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/your_username/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.