Shuttle is an open source, local music player for Android.

Overview

Shuttle Music Player

License: GPL v3 API Build Status Discord Chat Slack invite

Shuttle is an open source, local music player for Android.

Shuttle comes in two flavours:

The free version includes an option to upgrade via an IAP, which unlocks the features otherwise available in Shuttle+.

Features
  • Local playback only (based on the MediaStore)
  • Built in equalizer
  • Sleep timer
  • Folder browser
  • Scrobbling
  • Widgets
  • Theming
  • Album-artist support
  • Artwork scraping (Last.FM & iTunes)
Paid features:
  • Tag editing
  • Folder browsing
  • Chromecast
  • Additional theme options
  • Additional artwork editing options

Contributing:

See the Contributing document. This is/will become a good resource if you're just wondering how the app works.

History:

Shuttle started some time in early 2012, as a project to learn Java (and programming in general). Initially, it was based off of the Random Music Player sample project by Google. I clearly recall how happy I was when I managed to wrangle that project to play a song of my choosing!

After lots of blog reading and trial and error, I eventually stumbled upon Googles Default Music Player. At the time I had no idea what I was doing, but for better or worse, I made a habit of not copying classes, but writing the code out myself. This tedious process lasted a while, but it was my way of trying to ensure I understood what was going on when I copied a class into my app.

Initially, Shuttle was relased as AMP (another.music.player). A patent troll threatened legal action if I didn't change the name (don't want a native Android app getting confused with an audio codec!) and I was naive enough to comply - and so the name was changed.

As I developed Shuttle, I received a lot of really positive feedback from reddit (/r/android). I continued to work on customisation of holo-based themes and looked on in awe as Shuttle ticked over to install number 10.

I eventually discovered Cyanogenmod, and the then-famous Apollo Music Player, which seemed to solve a few problems I wasn't able to solve myself. I discovered the beautiful thing that is open source software, and found out that someone else had already solved these problems for me, and I was allowed to copy them! That someone else was Andrew Neal, the developer of Apollo Music Player. Initially via email, then to hangouts and now on Slack, Andrew unwittingly became my mentor. I attribute a large portion of Shuttle's success to both Andrew and his app Apollo.

Shuttle continued to gain momentum over the years. Holo was phased out and something post-Holo-pre-Material came in. I celebrated 500,000 downloads with an actual cake sometime in 2014. I got a job as an Android developer.. Glide came out, RXJava became popular and Material design came in.

I've continued to work on Shuttle at times daily, at the least weekly, ever since its initial release. It's come a hell of a long way since day one. It is my proudest accomplishment. It now has almost 4 million downloads!

Motivation for Open Source:

Without open source, Shuttle wouldn't exist, and I probably wouldn't be an Android developer. One of my motivations for open sourcing this project is to 'give back'. Maybe Shuttle can be to someone else what Apollo Music Player was to me.

Secondly, I don't feel like I'm able to dedicate as much time to the project as I have in the past. Each year that goes by, I feel like there's just more for me to do and less time do it. I'm hoping that there are some enthusiastic developers out there who like Shuttle, and would like to improve it in some way.

License

Shuttle Music Player is released under the GNU General Public License v3.0 (GPLv3), which can be found here: License

Comments
  • Can't download missing artist and album images.

    Can't download missing artist and album images.

    Shuttle version:

    v2.0.7 (Upgraded)

    Device, OS:

    Nexus 5 , Android 6.0.1

    Description of bug:

    Can't download missing artist and album images. Old images that have been downloaded before with 2.06 are displaying normally. It's shows the downloading artwork bar after it finishes, no new images are shown.

    Steps to reproduce:

    1. Transfer a new album
    2. Settings-> Artwork-> Download Artwork->Download
    3. Wait to finish Downloading

    Expected outcome: In v2.0.6 (Upgraded) I would have an image of the Artist

    Observations/Actual Result: On the Artist tab there are no images shown

    possible-bug 
    opened by Clientsiman 21
  • Music randomly stops (app crashes?)

    Music randomly stops (app crashes?)

    Shuttle version:

    v2.0.5-beta6

    Device, OS:

    Pixel 2, Android P Beta 3

    Description of bug:

    Music will randomly stop playing. I check my phone and the Shuttle app is not there anymore. I reopen the app and am able to restart the music where it stopped playing. It's as if someone closed the app.

    Steps to reproduce:

    1. Start playing music and just wait. Happens randomly.

    Expected outcome:

    App will close.

    Observations/Actual Result:

    It's random, doesn't happen all the time. Unpredictable.

    bug high-priority 
    opened by kaio77 18
  • Music takes very long to load

    Music takes very long to load

    Shuttle version:

    2.02 Upgraded

    Device, OS: Galaxy S7, Android 7.0

    Description of bug:

    It takes like 30-60 seconds to fully open the music library

    Music is on SD card

    Steps to reproduce:

    1. Fully close shuttle with no music playing
    2. Open up shuttle through the widget or app icon
    3. Wait in sadness

    Expected outcome:

    Music should load instantaneously

    bug duplicate 
    opened by Ninjahague 16
  • Shuttle not staying in memory

    Shuttle not staying in memory

    Shuttle version:

    Shuttle+ v2.0.5 beta2

    Device, OS:

    Nexus 6P, Android 8.1.0 ABC Rom

    Description of bug:

    App randomly gets killed while playing music

    Steps to reproduce:

    1. Play music
    2. Use other lightweight apps or do nothing with the screen off
    3. Music stops, notification disappears

    Expected outcome:

    Music should continue playing, especially when not doing any other performance intensive tasks

    Observations/Actual Result:

    App seems like it's getting killed despite having more than enough RAM. This issue also did not happen prior to the new beta, with all device settings staying the same.

    I'm not familiar with development so I'm most likely wrong, but I took a look at the commits and it may have something to do with MusicService?

    possible-bug 
    opened by neekless 15
  • Last.fm Album Artwork Not Downloading

    Last.fm Album Artwork Not Downloading

    Shuttle version:

    v2.0.10

    Device, OS:

    Google Pixel 2 XL, Android 9 Pie (May 2019)

    Description of bug:

    Version 2.0.10, which seems to have been released to fix Last.fm artwork, actually caused this issue for me. I didn't have an issue before the update (I didn't try 2.0.9, so it may have been there). Album artwork refuses to download.

    opened by ghost 11
  • File google-services.json is missing. The Google Services Plugin cannot function without it.

    File google-services.json is missing. The Google Services Plugin cannot function without it.

    Shuttle version:

    Shuttle+ v2.0.4

    Device, OS:

    Samsung Galaxy Edge S7

    Description of bug:

    Code will not compile in Android Studio with this error:

    File google-services.json is missing. The Google Services Plugin cannot function without it. 
     Searched Location: 
    /Users/Morticia/Shuttle/app/src/amazon/free/release/google-services.json
    /Users/Morticia/Shuttle/app/src/amazonFree/release/google-services.json
    /Users/Morticia/Shuttle/app/src/release/amazonFree/google-services.json
    /Users/Morticia/Shuttle/app/src/amazon/release/google-services.json
    /Users/Morticia/Shuttle/app/src/amazon/free/google-services.json
    /Users/Morticia/Shuttle/app/src/amazon/freeRelease/google-services.json
    /Users/Morticia/Shuttle/app/src/amazonFree/google-services.json
    /Users/Morticia/Shuttle/app/src/release/google-services.json
    /Users/Morticia/Shuttle/app/src/amazonFreeRelease/google-services.json
    /Users/Morticia/Shuttle/app/src/amazon/google-services.json
    /Users/Morticia/Shuttle/app/src/amazonRelease/google-services.json
    /Users/Morticia/Shuttle/app/google-services.json
    

    Steps to reproduce:

    1. Cloned Repo and during Gradle build, error surfaced

    Expected outcome: google-services.json should be present

    Observations/Actual Result:

    google-services.json is not present.

    Thanks! -TJB

    opened by TJBlack31 11
  • Add build instructions

    Add build instructions

    Currently there is not much information on building this. It would be nice to have some basic information like Java version (7 or 8?) and Android SDK packages required. This would help new would-be contributors get started.

    opened by alanorth 11
  • Shuttle+ fails to detect some audio files, but other music players do.

    Shuttle+ fails to detect some audio files, but other music players do.

    Shuttle version:

    v2.0.7 (Upgraded)

    Device, OS:

    Blackberry KeyONE, Android 8.1.0

    Description of bug:

    Other music players detect my podcasts directory, but Shuttle does not detect them. They are in OGG format, and play fine with other media players.

    Steps to reproduce:

    1. Download a BBC podcast to a podcasts directory on the phone. (OGG format)
    2. Trigger a media scan, or wait for one.
    3. Open Shuttle+, try to open the podcast for playback.

    Expected outcome:

    I'd expect the BBC podcast (or any podcast really, they all seem to fail to appear in Shuttle) to appear in the Shuttle+ library view.

    Observations/Actual Result:

    No podcasts are seen in Shuttle+, but they have worked before in older versions. In other players, such as Google Play Music, or the stock music player, do not fail to detect the podcasts. I do not believe this is a Media Storage issue, or to do with .nomedia files.

    needs-info possible-bug 
    opened by shymega 9
  • Album Shuffle Mode Implementation

    Album Shuffle Mode Implementation

    I've implemented this feature according to suggestions by @clockler in the issue thread.

    For a small overview:

    • ShuffleMode now includes ALBUMS, and ON has been changed to TRACKS.

    • Most items referring to shuffle generally now specify track shuffle. Analogues of track shuffling functionality in MusicService, MusicUtils, and elsewhere now exist for album shuffling.

    • New UI elements for album shuffle, including ShuffleAlbumsView, uses a layout similar to the list item shuffle element that comes before the list of songs.

    opened by willcoughlin 9
  • Playlist Longer Than 30 Songs?

    Playlist Longer Than 30 Songs?

    Love the F-Droid version of this app!

    Is there any way to have more than 30 songs in one playlist? I want to play more songs continuously without making a separate playlist.

    opened by HonestAbe7 8
  • Queue disappearing

    Queue disappearing

    Shuttle version:

    2.0.6 (Upgraded) Previous versions affected as well.

    Device, OS:

    Android 8.0, 8.1.0, 9.X reported. Multiple devices reported.

    Description of bug:

    From reddit (2 individual posts/comments, 7 total upvotes):

    Pausing playback and switching to another app (or another app starting its own playback) will often cause the play queue to become empty on Android 8.1.

    https://imgur.com/a/UtZHPw6

    This started happening after a relatively recent major Android version update that added new power management features.

    I have not observed any clear correlation between this behavior and the duration of the pause, memory use during the pause, or activities and apps launched during the pause.

    I have the paid upgrade for Shuttle. The smooth UI is great, the automatic UI colour selection has been pretty cool since the algorithm started accounting for saturation and probable aesthetic appropriateness, and the little enhancements like the faded album art in the notification are great, but being unable to reliably listen to a queue you've set up is very nearly a deal-breaker for me.

    Same problem tested on 9.0 and 8.0 devices. It got slightly better when I turned off battery optimization for Shuttle, but that's not a viable long term solution.

    https://www.reddit.com/r/shuttle/comments/9pnm1f/pausing_playback_and_switching_to_another_app_or/

    On my own, I've found that the play queue will sometimes still be loaded back in if I wait a minute or so after reopening the app. This is pretty inconsistent though, it normally doesn't work if I touch the UI's navigation controls at all before it's loaded, and even when it does work I still need to wait for upwards of 30 seconds with an empty play queue, and then it still loses track of the position in the song.

    Also, interestingly enough, even when the app is in the background, the control notification is gone, and the play queue is (would be) empty when I re-open the app, the playback controls on my Bluetooth headset can often get the song to pick back up where I paused it (after a brief delay).

    Steps to reproduce:

    1. Launch Shuttle.
    2. Start a new play queue.
    3. Pause playback and exit Shuttle (in any order).
    4. Return to Shuttle.

    Expected outcome:

    Play queue is restored as before exiting the app, and position in current song is preserved and ready to resume.

    Observations/Actual Result:

    Play queue is empty.

    https://imgur.com/a/UtZHPw6

    Play queue will occasionally be restored after several dozen seconds of waiting if touch interface is not interacted with in that time, but play position in current song will likely have reverted to a previous state even in this case.

    bug high-priority 
    opened by stkAnon 8
  • `IllegalStateException` when trying to open Folders view

    `IllegalStateException` when trying to open Folders view

    Shuttle version:

    v2.0.17

    Device, OS:

    Galaxy Fold3 Android 12 OneUI 4.1.1

    Description of bug:

    Simply clicking "Folders" on the left sidebar crashes the app.

    Steps to reproduce:

    This reproduces every time. My only actions that might be special here is that upon the fresh installation I went to settings and

    1. Turned on "Remember shuffling mode"
    2. Went to Excluded, and clicked "Clear" + confirmed

    After doing this I tried to click "Folders" in order to set which folders I need music from.

    Observations/Actual Result:

    App crashes shortly after clicking on Folders. This is what I see in Logcat:

    java.lang.RuntimeException: An error occurred while executing doInBackground()
    	at android.os.AsyncTask$4.done(AsyncTask.java:415)
    	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    	at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    	at java.lang.Thread.run(Thread.java:920)
    Caused by: java.lang.IllegalStateException
    	at android.media.MediaPlayer._prepare(Native Method)
    	at android.media.MediaPlayer.prepare(MediaPlayer.java:1434)
    	at android.media.MediaPlayer.create(MediaPlayer.java:979)
    	at android.media.MediaPlayer.create(MediaPlayer.java:952)
    	at android.media.MediaPlayer.create(MediaPlayer.java:931)
    	at com.simplecity.amp_library.utils.i5.e(SourceFile:3)
    	at com.simplecity.amp_library.m.c1.c(SourceFile:2)
    	at com.simplecity.amp_library.ui.modelviews.FolderView$b.a(SourceFile:1)
    	at com.simplecity.amp_library.ui.modelviews.FolderView$b.doInBackground(SourceFile:1)
    
    opened by lostmsu 0
  • Looping for a very long time stops working

    Looping for a very long time stops working

    Shuttle version:

    v2.0.17

    Device, OS:

    • Google Pixel, Android 10
    • Samsung S6, Android 7

    Description of bug:

    If I play a looping test file continuously, after 16-19 hours the audio stops and the app no longer works correctly.

    Steps to reproduce:

    1. Start Shuttle
    2. Set to loop single track
    3. Play for a very long time

    The track is 15 seconds long, 48 kHz, 24-bit PCM WAV file, I can send it if necessary.

    Expected outcome:

    It should just play continuously forever.

    Observations/Actual Result:

    After the app locks up, pressing pause/play has no effect, the progress dot stays at the beginning of the track and nothing plays.

    Another time, the gapless looping stopped being gapless, there was a pause after each loop.

    Another time, it started playing a different track? Despite being set to loop 1 track and doing so correctly for many hours. Not sure how that happened.

    After phone reboot, it works normally again.

    opened by endolith 1
  • Feature Request: Folder view: Stay on last chosen folder or at least have setting for default folder

    Feature Request: Folder view: Stay on last chosen folder or at least have setting for default folder

    Shuttle version:

    v2.0.17

    Description of FR:

    As my most important and daily used feature, folder view is really frustrating when it always jumps back to where Shuttle thinks my music is, but isn't, so I have to go to my music folder each time. (It did find all songs in it though, seen from other views.) So, a setting for where to start folder view or just the following last-browsed would be enough to fix this. Last-browsed: Would also be nice to start at the last subfolder chosen.

    opened by e-motiv 0
  • Play Store Data Safety Section

    Play Store Data Safety Section

    Hi Team

    In the recent Play Store policy, it will become mandatory for you to fill out the Data Safety Section. Since this is an OSS Android app, it will make sense to have it as a part of the repository as well.

    I have run the scan using my tool here on your repo, attached are the scan results. I found the following:

    • 2 data types
    • 0 SDK

    If this is helpful, do use our free tool to generate Play Store Data Safety report: https://github.com/Privado-Inc/privado

    Also, do share your feedback & thanks for the OSS app 😄

    image image

    opened by vaibhavantil1 0
  • Alert Tone genre

    Alert Tone genre

    v2.0.15

    Xcover 5 Android 11

    Description of bug: genres list shows an empty genre called "Alert Tone", for which there are no music files in the selected library folder, and never will be

    Steps to reproduce:

    1. fresh install on devide with music folder on sd card
    2. open app
    3. look at genres tab

    Expected outcome: only genres with music files in them should show up

    Observations/Actual Result: all other genres shown are the ones with music in them, as expected, but Alert Tone shows up without anything in it

    opened by illdeletethis 0
Releases(v2.0.17-release)
Owner
Tim Malseed
I'm a software engineer working in Melbourne, Australia. Android's my jam, but I'm proficient at iOS development as well.
Tim Malseed
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshot Features Parse and

Konyaco 4 Dec 10, 2022
This is a local music player, imitates the UI of Netease Music client.

Introduce This is a local music player, imitates the UI of Netease Music client. The UI was built on Jetbrains Compose. Screenshots Features Parse and

Konyaco 4 Dec 10, 2022
Auxio is a local music player with a fast, reliable UI/UX without the many useless features present in other music players

Auxio A simple, rational music player for android. FAQ | Licenses | Contributing | Architecture About Auxio is a local music player with a fast, relia

null 3 Mar 21, 2022
SocyMusic is an open-source Android music player written in Java with the aim of creating an easy-to-use app for exchanging and listening to top-quality music. Help us create it!

SocyMusic SocyMusic is an open-source Android music player written entirely in Java. It's objectives are to provide top-quality music to everyone for

Benji 23 Dec 26, 2022
Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and more.

Blade Player Blade is an open source music player for Android, allowing you to play music from multiple services : files on your phone, Spotify, and m

Valentin HAUDIQUET 72 Jan 5, 2023
Odeon Music Player is a lightweight music player for Android.

Odeon ?? Odeon Music Player is a lightweight music player for Android. Get it on Google Play. We value your privacy, your battery life and your device

Thibault Seisel 63 Dec 20, 2022
Music Player - This is a basic music player built with Android Studio and Kotlin

Music Player Made by Jenny Cárdenas This is a basic music player built with Android Studio and Kotlin, it shows two views in the UI, the user can play

Jenny C 3 Oct 28, 2021
TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback service

TunePlayer TunePlayer is a basic music player app aimed at showing how MusicServiceCompat and MusicBrowerCompat can be used to build a music playback

Abdulmalik 6 Nov 18, 2022
Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface.

Fermata Media Player About Fermata Media Player is a free, open source audio and video player with a simple and intuitive interface. It is focused on

Andrey 227 Jan 6, 2023
NOVA is an open source video player for Android

NOVA: opeN sOurce Video plAyer Overview NOVA is an open source video player for Android. It consists in a fork of the original Archos Video Player Com

NOVA 876 Jan 2, 2023
Echo is a lightweight and minimal music player for Android, built with Android Studio and written in Kotlin

Echo - Echo, A light-weight, minimal music player for Android, with shuffle, favorites and audio visualization

Divins Mathew 0 Feb 7, 2022
Android music player example.

Android music player example.

Chien 21 Jul 29, 2022
A elegant and light weight music player for android

A elegant and light weight music player for android

Atul Patare 45 Dec 21, 2022
Best material design music player for Android

Metro Material Design music player for Android music lovers Table of contents Downloads Differences between Metro and RetroMusicPlayer Screenshots App

Muntashir Al-Islam 684 Jan 1, 2023
A material designed music player for Android

Vinyl Music Player A material designed local music player for Android. Forked from Phonograph; makes all Pro features free, as they used to be. Additi

Adrien Poupa 581 Dec 30, 2022
Auxio - A simple, rational music player for android.

Auxio is a local music player with a fast, reliable UI/UX without the many useless features present in other music players. Built off of Exoplayer, Auxio has a much better listening experience compared to other apps that use the native MediaPlayer API. In short, It plays music.

OxygenCobalt 800 Jan 2, 2023
An offline music player android app, with modern UI and powerful features

Pulse Music An offline music player android app, with modern UI and powerful features If you liked this repo, fork it and leave a STAR. Your support m

Sharath 7 Apr 11, 2022
Android Offline Music Player

Howl Music Player A sleek and minimal offline music player made wit. Features Sleek and responsive UI , following material design Minimal layout with

LooKeR 145 Jan 8, 2023
A simple music player for Android

RSShool2021-Android-task6-Music-App Цель - реализовать простой музыкальный плеер на Android ?? Требования: Данные о треках считываются с JSON-файла. П

null 0 Dec 19, 2021