I've been building a music collection in FLAC format for 25 years, and last year I bought an (Android) phone and a MicroSD card of 1TB that fits all of my music. It's been a long project for technology to catch up, but now that it's possible to have all of it in my pocket, I'm pretty happy with it.
I'm sure I can't be the only one that doesn't want to be a renter, give up control and stream anything the industry wants to push or deal with ads. It's cool to see some even go to great lengths to write their own application.
I come from the times where winamp was the go-to music player.
Today, even in the age of streaming services I still keep a local music library organized in folders. So, just as others here in the comments I built myself an old-school music player as a hobby project to listen to my music offline. It's a 1 page html/js app, has full keyboard controls and also features a simple queue mechanism functionality
Check it out: https://nobsutils.com/mp
I built my own web app to listen to full albums while allowing me to take breaks and switch devices. I really like to listen to albums from front to back but I found that at least YouTube Music doesn't remember playback position and you can't just switch devices without pulling up the album again on the other device and finding the position where you left off. My web app lets me paste a URL that is then downloaded to the server using yt-dlp and can be streamed from there. It always remembers playback position so I can listen from the phone in my car and then continue on the laptop at work from where I left off. It also works great for adding mixes from other sources such as NTS Radio - one of my favorites.
> This makes ultimately no sense. An innovative technology company actively puts roadblocks into democratized application development.
Makes sense to me. See this quote from erstwhile Disney CEO Michael Eisner:
> We have no obligation to make art. We have no obligation to make history. We have no obligation to make a statement. But to make money, it is often important to make history, to make art, or to make some significant statement.
Apple is not innovative by nature, and it is certainly not democratic. It is profit-seeking by nature, and will innovate and democratize when it thinks that is the best way to make money. However, letting the riff-raff into your App Store without paying the entrance fee is not a good way to make money. That fee is where the money comes from. You're letting the public abscond with your golden goose.
I was hoping the article was going to be about a physical device as well as the software to manage and play songs. A few years ago I wanted to get my 10 year old son an mp3 player – he's really into listening to music but wasn't ready (still isn't) for a phone. I was shocked by the state of the mp3 player options. When Apple discontinued the iPod they created a huge vacuum that no one seems to have filled.
I think the iPos shuffle (usb stick form) is still the best mp3 player I ever had – it was small, pluggable without extra cords, and battery lasted a really long time. It didn't have a screen to browse music but that was part of the idea – just let the shuffle do its thing. Even this relatively simple concept has not been replicated in the hardware market.
People will say it's not a hardware problem but a software/drm issue. I think that's a real shame. I wish there were a good, inexpensive, portable device that would just play my music.
This is a good read, admittedly haven't finished it yet. I like reading about the more granular details developers decide on and why.
I will say that I sympathize with the idea that ... I don't like any audio players that I've tried, but in the world of music apps the layout of screens and UI seem almost universal across them and ... I just don't like them / don't "get it".
I feel like I'm boxing with every music app ever...
I appreciate anyone who takes a shot at making something new.
I still use the Apple Music app with my own local files.
I turned off Apple Music (the steaming service), loaded everything into Apple Music (the app on macOS). I then plugged my phone into my laptop like it was 2007 and synced it over like an iPod. Everything works as expected. My music doesn’t change so much, so syncing hasn’t been an issue. I get a certain hit of nostalgia when syncing over the wire as well.
> Initially, I avoided Swift because of my previous experience with it […] without native async/await at that time, writing concurrent code compared to Go or JS/TS felt clunky and boilerplate-heavy.
I have to disagree. Async may makes concurrent code easier to write, but also less simple to reason about as it grows. In a complex async codebase, I find it harder to reason about code flow and concurrency.
If the goal is to reduce the cost of executing threaded code, we have a solution in green light weight threads.
If we aim to reduce the cost of maintaining threaded code, I expect async to end up costing more effort in the long run.
Managing local music with Music.app and syncing with Finder iPhone sync still works good for me, but Music.app does seem unmaintained for a couple years now with some annoying bugs since the terrible Big Sur rewrite. Despite the flaws this combination is still the best music library management + mobile sync solution I've seen (plz recommend!), but I feel eventually will have to write a system myself since the software is not maintained and not cross platform.
I thought about doing that as well. Currently I use Doppler but I wanted to add meta data from Wikipedia to create an experience similar to what Roon offers. It should also have more automation like auto-generated daily playlists and the like so your local library feels more alive and let's you rediscover things.
It's a web app with the Spotify Web Playback SDK or a good old MP3 HTTP server and API like Internet Archive.
It works crazy well on a ChromeBook, and reasonably well on an iPhone, iPad or Android both through a native app with a webview component or the browser.
I have a theory the pendulum is swinging back and there is a demand for controlling our own music and music interface, and web technology is sufficiently good for implementing players.
Tangentially related: as a non-developer I have started trying to hack/extend Anytime Podcast player to become a light language learning app, for supporting using native level resources for intermediate learners.
The idea is to give me vocab, phrases and idioms with timed with a transcript to appear just before the audio, with some feedback on understanding and a simple learning model of users level, vocabulary, strengths and weaknesses etc
I've made a start using whisper and some simple Bayesian modelling but if anyone more technically gifted wants to steal my idea they're more than welcome... As it's going to take a while for little old me.
People will literally build their own music apps instead of switching to Android. Is it just for the blue bubbles, or because of how everything "just works" (unless you want to play offline music)?
This is really cool, I love how you planned the entire development before with graphs.
When I was 16, I developed an mp3 player in C (I cheated and used mpg123 library). Audio players are a great way to learn about low level stuff and as a first project.
Interesting read, nice to see technical details and rationale for building it this way. I made a similar one (https://www.catnapgames.com/tiny-player/) except instead of iCloud I rely on web based uploads.
For me one of the high level takeaways was to use ffmpeg next time. Apple APIs for decoding are nice but have limited support for file formats. And then there’s the lockin aspect..
I wonder if this app shits the bed with "Various Artists"-type compilations (or DJ mixes separated into tracks) like seemingly every music app does.
What should happen: The album only has one listing and opening it reveals the entire album
What actually happens in pretty much everything: The album has one listing per artist (so you end up with a screen full of the same thing) and trying to play the whole album as one cohesive unit is an exercise in frustration
VA stuff is extremely common in my experience and it is gobstopping to me that nobody gets it right. Gobstopping enough that I have been kicking around ideas for my own music player (as it seems many of you as well)
Nice write-up - although I thought you've built your own HARDWARE audio player first.
However, I feel like this is one of the most re-invented wheels I've come across so far. Nobody seems to be happy, everybody seems to fail to build something that fits at least 80% of the requirements most people have.
My personal K.O. criteria is a bit awkward in days of bluetooth and wireless devices: Working cable headphone remote controls like Apple devices had for more than 10 years now - especially useful for audio books.
Years ago I tried to write a cross platform audio player[1] app with C# and Flutter inspired by iPod Nano 7g, but it always failed for the same reason: I could not get the headset controls working properly.
I've also spent some days to submit a PR on audiobookshelf-app[2], but it didn't get merged, although it worked pretty good on my device.
Nowadays I use a combination of my old iPod Nano 7g for music and audiobooks on the go and my Android GrapheneOS Phone as spare device for "streaming" something I don't have with me using Navidrome[3] and Substreamer[4] / DSub[5] for music and audiobookshelf-app[6] and VLC Media Player[7] for audiobooks (the offline support for audiobookshelf regularly breaks on my device) - most of these are available on fdroid or even official app stores.
Btw, if you ever wondered, why Apple EarPods do not support Volume Control on Android devices and vice versa, see this link[8] - it's definitely worth a read
Do people forget iTunes allows you to load your own music files so you can play them in your music app? Unless you only have linux computers, this is a non-problem
Man, this is awesome. It's sad that this is a rarity now a days... I have a hard time playing my own music on the iPhone as well. I'm pretty sure the first mp3 I played was in DOS BBS days and you spent a good 20 minutes downloading a single song and then fired up a fraunhoffer DOS CLI player. S3M/XM/IT players were much more advanced interfaces at the time....
Years and years ago I tried to store and organize family photos using iTunes on my computer. Suddenly, I could not use image files directly any more , for example edit them in Photoshop, without having to jump through hoops. That was when I ruled out apple products for ever.
..
It's enshittification.
It's interesting that most/all of the available tools for playing digital music, a well-known and very popular activity... suck. Do we think that's enshittification or product managers misunderstanding the market? In a normal universe one might otherwise expect it to be saturated with options.
I personally use the Documents app by Readdle. I have the free version and have been using it to transfer and play audio files for like 3 years. Their audio player looks just like a music player and has all controls too.
You can transfer files to the app over wifi or even use files from the Files app.
I'd still love to get a proper successor to the Sandisk Sansa Fuze, just with USB-C charging instead of its proprietary charging cable.
There's plenty of "luxury" /audiophile MP3 players out there which cost in the hundreds of dollars, but that one was in the sweet spot of bang-for-your-buck music player that I could just use for listening to music on long plane rides etc. without draining my smartphone battery.
>Even after the DMA Act in the EU, sideloading still isn’t fully open. EU users can now install apps from third-party marketplaces directly from a developer’s site, but only if that developer still enrolled in Apple’s $99/year program and agrees to Apple’s Alternative Terms. For personal/hobbyist use, this still doesn’t remove the 7-day dev build limitation.
Does Apple want to face a formal non-compliance judgment under the DMA, or is there another reason for Apple's blatant contempt of court with its refusal to properly and fully implement the mandated sideloading[1]?
[1] The Digital Markets Act (DMA) does mandate sideloading in Article 6(paragraph 4). It requires designated gatekeepers, which includes Apple for its iOS operating system, to allow for the installation and use of third-party apps and app stores. ( https://eur-lex.europa.eu/eli/reg/2022/1925/oj/eng )
For music on iOS I can't recommend foobar2000 [1] enough - and I tested ALL of the alternatives. You can import ANY folder (probably what OP is looking for) or use your "iPod Library". [2]
Personally, I sync my music via Synctrain (a Syncthing client). [3]
On iOS I'm using Evermusic player, which allows syncing with different online sources. First I used it with my Dropbox folder, then moved to my self-hosted WebDAV.
I won't comment on the merits of this project, but I put my entire media collection, including all audio, in Jellyfin, and I find Finamp (available for Android and iPhone) to be convenient player, especially that it has easy download of entire albums, artists, etc. and "offline mode" you can toggle on so you can random-play whatever you've downloaded, even in places with no phone reception.
I Built My Own Audio Player
(nexo.sh)267 points by nexo-v1 22 May 2025 | 168 comments
Comments
I'm sure I can't be the only one that doesn't want to be a renter, give up control and stream anything the industry wants to push or deal with ads. It's cool to see some even go to great lengths to write their own application.
Makes sense to me. See this quote from erstwhile Disney CEO Michael Eisner:
> We have no obligation to make art. We have no obligation to make history. We have no obligation to make a statement. But to make money, it is often important to make history, to make art, or to make some significant statement.
Apple is not innovative by nature, and it is certainly not democratic. It is profit-seeking by nature, and will innovate and democratize when it thinks that is the best way to make money. However, letting the riff-raff into your App Store without paying the entrance fee is not a good way to make money. That fee is where the money comes from. You're letting the public abscond with your golden goose.
I think the iPos shuffle (usb stick form) is still the best mp3 player I ever had – it was small, pluggable without extra cords, and battery lasted a really long time. It didn't have a screen to browse music but that was part of the idea – just let the shuffle do its thing. Even this relatively simple concept has not been replicated in the hardware market.
People will say it's not a hardware problem but a software/drm issue. I think that's a real shame. I wish there were a good, inexpensive, portable device that would just play my music.
I will say that I sympathize with the idea that ... I don't like any audio players that I've tried, but in the world of music apps the layout of screens and UI seem almost universal across them and ... I just don't like them / don't "get it".
I feel like I'm boxing with every music app ever...
I appreciate anyone who takes a shot at making something new.
I turned off Apple Music (the steaming service), loaded everything into Apple Music (the app on macOS). I then plugged my phone into my laptop like it was 2007 and synced it over like an iPod. Everything works as expected. My music doesn’t change so much, so syncing hasn’t been an issue. I get a certain hit of nostalgia when syncing over the wire as well.
I have to disagree. Async may makes concurrent code easier to write, but also less simple to reason about as it grows. In a complex async codebase, I find it harder to reason about code flow and concurrency.
If the goal is to reduce the cost of executing threaded code, we have a solution in green light weight threads.
If we aim to reduce the cost of maintaining threaded code, I expect async to end up costing more effort in the long run.
https://github.com/nzoschke/jukelab
It's a web app with the Spotify Web Playback SDK or a good old MP3 HTTP server and API like Internet Archive.
It works crazy well on a ChromeBook, and reasonably well on an iPhone, iPad or Android both through a native app with a webview component or the browser.
I have a theory the pendulum is swinging back and there is a demand for controlling our own music and music interface, and web technology is sufficiently good for implementing players.
On android the best I've found is Pi music player
The idea is to give me vocab, phrases and idioms with timed with a transcript to appear just before the audio, with some feedback on understanding and a simple learning model of users level, vocabulary, strengths and weaknesses etc
I've made a start using whisper and some simple Bayesian modelling but if anyone more technically gifted wants to steal my idea they're more than welcome... As it's going to take a while for little old me.
When I was 16, I developed an mp3 player in C (I cheated and used mpg123 library). Audio players are a great way to learn about low level stuff and as a first project.
Keep developing things!
You just upload your files (e.g. via Finder) and play them. You can browse by artist, album, etc. It's boring, it works, it's all I want.
Everything from writing code to building and publishing is overcomplicated.
It's not just an audio player but an eco-system, and for better or worst it changed the music industry forever.
Perhaps the modern version should make a p2p music streaming from peers rather than direct downloading.
[1] Napster:
https://en.wikipedia.org/wiki/Napster
On both iOS and Android, HTML can play videos and mp3s while the screen is turned off. So maybe it is possible?
Project's Github - https://github.com/nexo-tech/localwave
What should happen: The album only has one listing and opening it reveals the entire album
What actually happens in pretty much everything: The album has one listing per artist (so you end up with a screen full of the same thing) and trying to play the whole album as one cohesive unit is an exercise in frustration
VA stuff is extremely common in my experience and it is gobstopping to me that nobody gets it right. Gobstopping enough that I have been kicking around ideas for my own music player (as it seems many of you as well)
However, I feel like this is one of the most re-invented wheels I've come across so far. Nobody seems to be happy, everybody seems to fail to build something that fits at least 80% of the requirements most people have.
My personal K.O. criteria is a bit awkward in days of bluetooth and wireless devices: Working cable headphone remote controls like Apple devices had for more than 10 years now - especially useful for audio books.
Years ago I tried to write a cross platform audio player[1] app with C# and Flutter inspired by iPod Nano 7g, but it always failed for the same reason: I could not get the headset controls working properly.
I've also spent some days to submit a PR on audiobookshelf-app[2], but it didn't get merged, although it worked pretty good on my device.
Nowadays I use a combination of my old iPod Nano 7g for music and audiobooks on the go and my Android GrapheneOS Phone as spare device for "streaming" something I don't have with me using Navidrome[3] and Substreamer[4] / DSub[5] for music and audiobookshelf-app[6] and VLC Media Player[7] for audiobooks (the offline support for audiobookshelf regularly breaks on my device) - most of these are available on fdroid or even official app stores.
Btw, if you ever wondered, why Apple EarPods do not support Volume Control on Android devices and vice versa, see this link[8] - it's definitely worth a read
1: https://github.com/sandreas/ToneAudioPlayer
2: https://github.com/advplyr/audiobookshelf-app/pull/1218
3: https://www.navidrome.org/
4: https://substreamerapp.com/
5: https://github.com/daneren2005/Subsonic
6: https://github.com/advplyr/audiobookshelf-app/releases
7: https://code.videolan.org/videolan/vlc-android
8: https://tinymicros.com/wiki/Apple_iPod_Remote_Protocol
You can transfer files to the app over wifi or even use files from the Files app.
I'd still love to get a proper successor to the Sandisk Sansa Fuze, just with USB-C charging instead of its proprietary charging cable.
There's plenty of "luxury" /audiophile MP3 players out there which cost in the hundreds of dollars, but that one was in the sweet spot of bang-for-your-buck music player that I could just use for listening to music on long plane rides etc. without draining my smartphone battery.
Does Apple want to face a formal non-compliance judgment under the DMA, or is there another reason for Apple's blatant contempt of court with its refusal to properly and fully implement the mandated sideloading[1]?
[1] The Digital Markets Act (DMA) does mandate sideloading in Article 6(paragraph 4). It requires designated gatekeepers, which includes Apple for its iOS operating system, to allow for the installation and use of third-party apps and app stores. ( https://eur-lex.europa.eu/eli/reg/2022/1925/oj/eng )
Personally, I sync my music via Synctrain (a Syncthing client). [3]