PixelPlay is a modern, offline-first music player for Android, built with Kotlin and Jetpack Compose. It's designed to provide a beautiful and seamless experience for listening to your local music library.
- Local Music Playback: Scans and plays your local audio files (MP3, FLAC, AAC, etc.).
- Background Playback: Listen to music while the app is in the background, thanks to a foreground service and Media3.
- Modern UI: A beautiful and responsive UI built with Jetpack Compose and Material 3 Expressive, supporting Dynamic Color and dark/light themes.
- Music Library: Organize and browse your music by songs, albums, and artists.
- Widget: Control your music from the home screen with a Glance-based app widget.
- Tag Editor: Edit song metadata (title, artist, album, etc.) with the built-in tag editor.
- AI-Powered Features: Explore advanced features powered by Gemini for a unique listening experience.
- Language: 100% Kotlin
- UI: Jetpack Compose for a declarative and modern UI.
- Audio Playback: Media3 (ExoPlayer) for robust audio playback.
- Architecture: MVVM (Model-View-ViewModel) with a reactive approach using StateFlow and SharedFlow.
- Dependency Injection: Hilt for managing dependencies.
- Database: Room for local database storage.
- Background Processing: WorkManager for background tasks like syncing the music library.
- Asynchronous Operations: Kotlin Coroutines & Flow for managing asynchronous operations.
- Networking: Retrofit for making HTTP requests.
- Image Loading: Coil for loading and caching images.
- Metadata: JAudioTagger for reading and writing audio file metadata.
- Audio Processing: Amplituda for audio processing and waveform generation.
To get a local copy up and running, follow these simple steps.
- Android Studio Iguana | 2023.2.1 or newer.
- Android SDK 29 or newer.
- Clone the repo
git clone https://github.com/theovilardo/PixelPlay.git
- Open the project in Android Studio.
- Let Gradle sync and download the required dependencies.
- Run the app on an emulator or a physical device.
The project follows the standard Android app structure, with a few key directories:
app/src/main/java/com/theveloper/pixelplay/
├── data
│ ├── local # Room database, DAOs, and entities.
│ ├── remote # Retrofit services for any network calls.
│ ├── repository # Repositories that abstract data sources.
│ └── service # The MusicService for background playback.
├── di # Hilt dependency injection modules.
├── domain # Use cases and domain models (if any).
├── presentation # UI-related classes.
│ ├── components # Reusable Jetpack Compose components.
│ ├── navigation # Navigation graph and related utilities.
│ ├── screens # Composable screens for different parts of the app.
│ └── viewmodel # ViewModels for each screen.
├── ui
│ ├── glancewidget # Glance App Widget implementation.
│ └── theme # App theme, colors, and typography.
└── utils # Utility classes and extension functions.