The problem
Default music apps on Android phones are either full of ads or bury the features listeners actually use. People who fall asleep to music need a timer that fades the audio out gently rather than stopping it abruptly, and people with large local collections want to browse by folder — the way their files are actually organized — instead of relying on sometimes-broken media tags. This project builds a music player that treats both as first-class features: a sleep timer with presets, a custom duration and an end-of-track option, and a folder browser that scans device storage directly through the MediaStore API. Playback runs on ExoPlayer with a 5-band equalizer, gapless-friendly queue management, playlists persisted in Room, and a Material 3 dark interface with notification and lock-screen controls. The scope is deliberately honest — local playback done well — which makes it defensible in a viva and genuinely usable as a daily app.
Browses folders and the library, builds playlists, sets the sleep timer and controls playback from the notification or headset.
Follow the working sequence
How it works
- On first launch the app requests the audio media permission and scans device storage through the MediaStore API, building a folder tree plus a flat searchable library.
- Tapping any track hands it to the ExoPlayer instance managed by a foreground playback service, so music keeps playing when the screen is off.
- The Now Playing screen reads ExoPlayer's position callbacks to drive the seek bar, elapsed/remaining time and the queue, while the equalizer applies five peaking filters in the audio chain.
- Playlists are stored as Room entities with a many-to-many mapping to tracks, so adding, removing and reordering survive app restarts.
- When the user sets a sleep timer, a countdown runs in the service; in the final seconds the app ramps the player volume down smoothly, then pauses playback and releases the audio focus.
- A MediaSession publishes playback state to the system, which renders the notification controls and routes lock-screen, headset and car-kit buttons to the app.
Tech stack:
- Kotlin, Android SDK (min API 26)
- ExoPlayer / AndroidX Media3
- Room database (playlists, playback history)
- MediaStore API (folder and library scanning)
- DataStore (settings and EQ preferences)
- Material 3 components, dark theme
- Gradle (Kotlin DSL build scripts)
- Git (version control)
| Parameter | Value |
|---|---|
| Minimum SDK | API 26 (Android 8.0) — design target |
| Target SDK | API 34 (Android 14) — design target |
| Audio formats | MP3, AAC, WAV, FLAC, OGG (ExoPlayer-supported) |
| Sleep timer range | 1–480 minutes custom, plus 5/15/30/45/60 min presets and end-of-track |
| Fade-out duration | Final 10 seconds of the timer (design target) |
| Equalizer | 5 bands (60 Hz / 230 Hz / 910 Hz / 3.6 kHz / 14 kHz), ±12 dB per band |
| Library capacity | 5,000+ local tracks handled smoothly (expected) |
| APK size | Approximately 8–12 MB (expected, release build) |
| Permissions | READ_MEDIA_AUDIO (Android 13+), POST_NOTIFICATIONS (Android 13+) |
| Playback service | Foreground service with audio-focus handling (design target) |
Project features
- [Sleep timer with gentle fade-out] Presets of 5, 15, 30, 45 and 60 minutes, a custom duration up to 8 hours, and an end-of-track option; the volume fades out over the final seconds instead of stopping abruptly, and a countdown chip stays visible in the player bar.
- [Folder-based browsing] Browse the device's real folder structure the way files are stored, with per-folder song counts and total duration, plus a library view with search across titles, artists and albums.
- [ExoPlayer playback engine] Reliable local playback of MP3, AAC, WAV, FLAC and OGG through ExoPlayer/Media3, with play, pause, seek, next, previous, shuffle and repeat-one/repeat-all modes.
- [5-band equalizer with presets] Live EQ at 60 Hz, 230 Hz, 910 Hz, 3.6 kHz and 14 kHz with ±12 dB range and one-tap presets including Bass Boost, Vocal, Treble and Rock.
- [Playlists] Create, rename and manage custom playlists persisted in a Room database, with add-from-anywhere and remove controls.
- [Notification and lock-screen controls] A persistent media notification with play/pause/next/previous actions, integrated with the system media session so hardware buttons and Bluetooth controls work.
- [Sleep-friendly dark interface] A clean Material 3 dark theme designed for night-time use, with large touch targets and a distraction-free Now Playing screen with a live audio visualizer.
What is included
- Complete Kotlin source code for the Android app
- Debug APK plus a step-by-step release build and signing guide
- Folder scanner, library, playlists, equalizer and sleep timer modules with inline documentation
- Project report PDF (problem statement, architecture, MediaStore and ExoPlayer integration, testing)
- PPT presentation for the final review
- Viva Q&A preparation document (Android services, MediaStore, ExoPlayer, Room, runtime permissions)
- Demo walkthrough script showing every feature end to end
Limitations & prerequisites
- Local files only — no streaming-service integration; adding online sources is future scope.
- Equalizer processing applies to the app's own audio pipeline; some Bluetooth codecs and OEM audio effects may bypass it.
- Folder scanning depends on the MediaStore index; files on removable SD cards need the user to grant access explicitly.
- The sleep timer's end-of-track mode stops after the currently playing track only.
- No lyrics display or fetching is included in this build.
- Notification artwork uses generated track art; embedded cover-art extraction is listed as an optional enhancement.
Frequently Asked Questions
How is this different from the music apps already on my phone?
Stock players usually lack folder browsing and stop playback abruptly when a timer ends. This app is built around those two gaps: true folder playback from device storage and a sleep timer with a gentle fade-out, plus a full equalizer and playlists.
Does it stream music from the internet?
No. It is a local-file player by design — it scans the phone's storage and plays MP3, AAC, WAV, FLAC and OGG through ExoPlayer. That keeps the scope honest and the app fully usable offline.
How does the sleep timer work technically?
A countdown runs inside the playback foreground service. When the timer expires, the app ramps the player's volume down over the final seconds and then pauses playback and releases audio focus, so no other app is disturbed.
Which Android versions does it support?
The design target is Android 8.0 (API 26) through Android 14 (API 34), covering the large majority of devices students and examiners carry.
Can I extend it later?
Yes — the code is modular, so features like embedded cover-art extraction, lyrics display, or a home-screen widget can be added as clearly marked future scope, which also makes good viva discussion material.
Is this project suitable for a final-year project?
Yes — for Computer Science and IT programs. It demonstrates Android services, MediaStore integration, ExoPlayer playback, Room persistence, runtime permissions and Material 3 UI in one shippable app.
Components & software requirements
- Kotlin, Android SDK (min API 26)
- ExoPlayer / AndroidX Media3
- Room database (playlists, playback history)
- MediaStore API (folder and library scanning)
- DataStore (settings and EQ preferences)
- Material 3 components, dark theme
- Gradle (Kotlin DSL build scripts)
- Git (version control)
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.
Download free synopsis (PDF)
Enter your name and email — the synopsis PDF downloads immediately. We may send occasional project updates; no spam, unsubscribe anytime.