* A collection of files in directories
* Ability to randomize full collection, or play just one directory
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.
citation needed. Youtube still gives you crappy, unlistenable 153kbps crap.
[1] - https://hifigo.com/products/hiby-rs2?variant=43134031167727
Granted, 2TB sd cards are now a thing so once they come down in price, I'll probably get one.
I've been using Plex+PlexAmp for a while but have been really wanting to move to something outside of that.
Would love to take a look at your web app if it's available
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.
Good concurrency should make the code simpler to understand and reason about as it grows. Simply having process/service based encapsulation is a huge win. IMO this is a failing of the async/await abstraction, not concurrency itself.
As an ideal.
But you can only go so simple once you have a piece of data that is read at the same time by many, while also maybe mutated by at least one. And as simple you can get version 1.0, as software grow, it gets new features which necessitate more interactions with that data, which makes synchronization more complex.
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 think the real shift here isn't the iPod vanishing.
I think the existence of Spotify and smartphones is what killed mp3 players. Both of those just filled so much of the air in the room that it smothered everything else out.
Parents will probably buy similar devices to their children instead of an MP3 Player. You have an unconventional parenting style not to get your son a phone at 14. Don't get me wrong, I respect that, but there isn't a lot like you to warrant a demand beyond what's currently available.
https://m.youtube.com/playlist?list=PLv0k4pV5hufxLd70t1bN7Zj...
My hunch is that they’ve got an actual from-scratch rewrite in the works that’s similar to the all-new WinUI-based Windows version of Music that came out a while back.
Apple is so quick to drop support for some things and keep other things around seemingly indefinitely.
What's the problem with baking your own?
My app is a prototype in the sense that I want more features, but the app has just enough functionality that I lack motivation to implement more features. Currently has audio playback, remote file access, and FLAC metadata parsing. Similar to the author, I originally wanted to use React Native because I have experience with it and already maintain a few React Native applications. However, I am not interested in targetting (or debugging) other platforms. So I decided to try using SwiftUI and used a special tool[1] to get something resembling hot reloading. (It's kind of a gross hack that requires supplying custom linker flags in Xcode, but it works just enough for me to not miss the DX of TypeScript and React Native).
Actually, I think it is a bit odd that the author didn’t find a free music app they liked. But I also think you don’t really need an excuse to go make something anyway, so… I dunno, it think maybe that was just a framing narrative to get the story started.
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.
Or else a large audio file will be halted on the clientside till it is fully downloaded.
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.
Everything from writing code to building and publishing is overcomplicated.
Now, SwiftUI and Compose are effectively cousins, as are Kotlin and Swift. Both App Stores have their quirks. Publishing is part of both workflows. It's really not harder for one or the other, it's just administrivia.
But for me language is not a problem at all. I mean that you have a lot of pre-requirements to start developing for iOS.
And the stuff, except writing code feels much more restricted. AppStore is a walled garden itself.
But yeah, Objective-C was something...
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.
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.
On android the best I've found is Pi music player
On both iOS and Android, HTML can play videos and mp3s while the screen is turned off. So maybe it is possible?
When I made https://ambiph.one I ended up having to route everything through a MediaStreamAudioDestinationNode to trick Safari into thinking it's a livestream, which is apparently the only type of audio allowed to play in the background
Minimal demo here if it's helpful for anyone: https://codepen.io/matteason/pen/VYwdzVV
https://stackoverflow.com/questions/64283711
It works nicely in Chrome on the desktop and on Android. Not sure how the situation is on iOS.
I just never polished it to publish it, but it is quite easy and I guess ChatGPT can help with the basics as no arcane knowledge is required. (Except maybe the playing while screen is off.)
You also need a small node script, though or something different with system access to scan the media files. I think in browser tools make this now somewhat possible without(beware of security restrictions), but my approach is simply a node script scanning the music folder and generating a list that the media player consumes to find files for the player. I still didn't got around to make it automatic, but I don't add so much music (anymore).
I guess I will give it a try to see, how good it works a mobile player nowdays. I always wanted to upgrade it, so I can connect to spotify from my player as I hate the spotify mobile app.
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:
I'd also recommend looking at communities such as Soulseek. And Limewire is still around!
Apparently he also the original author of OpenTDD and ScummVM, and it seems that he's the legit Carmack 2.0 [1].
[1] Ludvig Strigeus:
Software for playing audio used to be great even with far fewer engineering resources going into them. That suggests the reason they are getting worse is deliberate and stems from a misalignment between what software users want and what the producers want.
Most music software companies today are two businesses joined together:
1. A software company that makes apps to let people listen to music.
2. A content licensing company that pays artists and record labels to give them access to music and let people listen to it.
If they were only #1 then they would be agnostic to what music people listen to and how much of it. WinAmp didn't give a damn how big your music library was, what songs you listened to, or how often, because that was entirely between you and your MP3 collection.
But, say, Spotify has to pay someone every time you listen to a song and how much they pay depends on what you listen to and how often. That gives them a direct, perverse incentive to build an app that routes you away from expensive audio you might prefer towards cheap stuff that eats up your time but doesn't cost Spotify as much.
That's why every single time I open the fucking Spotify app I see a wall of podcasts even though I have literally never listened to one and never will. They don't put them there for my benefit, but for theirs.
For Spotify, the end game is routing people towards eventually-AI-generated musak that they themselves own the licenses for because it's free for them. This is directly analogous to why Netflix is now constantly pimping their own often-shitty produced shows over movies you might actually prefer.
The reason we aren't saturated with options is that producing a media app without also having deals that give the app direct access to media to play dumps a lot of work back onto users and most users these days simply don't have a local media library or want to maintain one.
And spinning up a new app that does off content directly has huge startup costs. You need an army of lawyers to go out and negotiate deals with every record label out there, and those labels probably hate you out the gate since they are still salty about not making anywhere near as much money as they used to make when they sold CDs.
And it's funny you point to the podcasts as an example for that, a lot of the podcasts and now audiobooks they push are some of the most expensive content they have.
And then there's a massive chunk of the market that finds the tradeoff of ads for "free" access to music an acceptable tradeoff. A few dollars a month in cost for access to music is way more than they're interested in spending, even $10 for a CD is more than they're usually looking to spend to acquire content. They're the kind of people who maybe only bought a handful of CDs or cassette tapes back int the day total and got a lot of their content from the radio.
Most of the paying customers for digital music tend to be generally OK or even prefer streaming services. And generally speaking, those streaming apps work pretty OK. Most work better than the early streaming/subscription apps back in the day (like old Rhapsody and Zune Music and non-pirating Napster). I still remember how long it would take to go from clicking Play on Zune to the time it would actually start playing the song compared to Spotify which felt nearly instant in comparison. Not having to reconnect my Creative Zen every few weeks refresh the DRM from Napster. Having all that content on demand from my wireless portable device. Practically all of what is available today is quite a bit better than what was, in terms of "I don't want to bother buying all of this content, I'm OK with renting a lot of it" standpoint.
I've got a collection of music I own, things I really care about. Mostly physical formats, a few hundred songs exclusively digital files. But for a lot of music I consume, I don't really care if I have it locally or have it forever. Its like listening to the radio, that song may never play again, that's OK. Buying all that content legitimately costs considerably more than what I pay for a streaming service, so the streaming service makes a ton of economic sense for what I'm looking for. I'm mostly looking for something in between a radio and a privately curated music collection, which is exactly what streaming is.
The situation for me on Android would be hilarious if it weren't so saddening. Since I purchased a KitKat tablet in 2015, I've more or less stuck to the "Android Files" app to play music files. Yes, that has been the best solution: no app install required, bare bones, no feature demands from me. In fact, rather than making playlists, I would just copy out tracks to a new folder and play them in there. Want to repeat one? Make five copies of it!
On Chromebook I'm using the builtin app, Gallery. It's utterly barebones as well. All I want to do is listen to a track.
This has continued even to the present day, but you know what? Our days are numbered, because apps are staking out moats in terms of file types they will handle. They're looking to reduce generic handling of multiple file types.
I've been trying to conform to this "new normal" by using YouTube Music. With my Premium subscriptions I should be able to download any streamable track, and also listen to files on-device. This is working out poorly. The on-device management is abysmal and makes you want to die. The downloading feature just sort of... fills up my storage, and I don't really even use it. I still fall back on Android Files because Music is such a horrible app, except when I'm using it to stream.
Not everyone had some massive record collection and hundreds of cassette tapes.
As the size of your music library goes up, the UX changes. The original iPod UX was (at least for me) genuinely awesome. It became less awesome as iPods got 40, 60, and larger storage, and it was pretty much unusable when I modded one to have 1TB of storage.
And related but different, everybody's expectation of what "a large music collection" is varies wildly.
I don't necessarily think this is intentional enshittification, I lean more towards "there's no right solution for everybody, and there's probably not even a dozen different right solutions that encompass most people".
You can transfer files to the app over wifi or even use files from the Files app.
Project's Github - https://github.com/nexo-tech/localwave
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!
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
4: https://substreamerapp.com/
5: https://github.com/daneren2005/Subsonic
6: https://github.com/advplyr/audiobookshelf-app/releases
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)
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.
Essentially, you could carry a small battery attached to an extra sigle-task dedicated device, or a slightly larger battery in about the same-ish form factor that will let you use that energy to do anything you want with your other device you're probably already carrying.
If your phone is in whatever airplane mode, battery saver mode, etc. it's not going to use that much power just to play local music.
Wheels will always be the best way to navigate music libraries.
https://www.amazon.com/JadeAudio-JM21-Snapdragon-Bluetooth-P...
[0] https://gerrit.rockbox.org/r/c/rockbox/+/6510 [1] https://github.com/amachronic/echoplayer
You can replace the hard drive with MicroSD/SD or compact flash cards.
You can buy different color faceplates/backplates, upgrade the batteries, etc.
https://www.idemigods.com/iPod_5th_5_5_Generation_Video_Part...
I don't even need it to be portable. In fact, I'm happy with a "component stereo" look with a VFD display. ;-)
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]
[1]: https://apps.apple.com/us/app/foobar2000/id1072807669
[2]: https://imgur.com/a/7GVxB2y
[3]: https://apps.apple.com/us/app/synctrain/id6553985316I was unaware foobar2000 existed on iOS too, but the Windows version is my favorite audio player on that platform too.