If you need something even more simple, a no-configuration audio streaming server is here: github.com/fgergo/boringstreamer
I wrote boringstreamer to listen to my collection. I start one or more instances on different ports in different directories and connect to different ports similar to fm radio frequencies. (With tailscale I can listen from anywhere without any explicit access control.)
This is really cool. Simple media servers are I think are where it's at. I know lots of people like applications to handle managing their media (a la iTunes) but I really prefer this type of organization method myself...it let me be a lot sloppier with the media metadata while still being able to find stuff in large collections.
Being entirely selfish, I do wish audio servers would focus a bit more on what kind of audio they can serve up. Something with robust support for tracker (mod, s3m, xm, it, mtm, 669, etc), chip (most old 8-bit PCs), and game music formats (SNES, Genesis/MD, etc.) for old systems would be amazing and something I've long looked for as it would instantly open up millions of songs without requiring several terabytes of storage. Many libraries like FFmpeg support many of those internally, but software build on those libraries simply don't expose it.
Adding not so common audio formats to audioserve will not be so different. We'll just need to add mime types (and extensions), that are recognized as audio.
Also we will need to enforce mandatory transcoding for such formats.
Anything, which is supported by ffmpeg can be considered.
I think the secret sauce of network based audio server is streaming and whatever bag of tricks to smooth out perceived latency and fault tolerance. This can also mean pairing it with a nice client.
I mean, you can just serve mp3 files over HTTP. The browser can download the whole file, and load it until whatever mp3 playing library there is.
This is exactly what I did for my first personal project that landed me an internship at FANG. My music player had a pretty nice UI at the time ( Yahoo music days ), but music players from professionals like Yahoo or Spotify ( web player released one year later ) is that they are resilient to network failure, rather than assuming the mp3 file downloaded it one go, that it would be fast, and you can just point your JavaScript library at it, now that it's cached by the browser and can be loaded into memory.
> I mean, you can just serve mp3 files over HTTP. The browser can download the whole file, and load it until whatever mp3 playing library there is
If you have the right container/encoding format (my experience is that it works well with mkv) you can even start watching a video file locally with VLC while wget is still downloading it via HTTP... works amazingly well.
"bag of tricks to smooth out perceived latency and fault tolerance."
Agree - audioserve is now handling this with quite simple trick - just cache ahead couple of tracks/files from current folder (aka audiobook), so responsibility is move to client.
Surprisingly this simple trick did work for me for years (as I'm intensive user of audioserve). It kind of depends on file/chapter duration - but for most common cases - which are beetween 5 mins to say 90 mins it did work fine.
Historically only Android client was using this caching, but with new web client https://github.com/izderadicka/audioserve-web and broad Service Worker support in browsers it is also available in browser.
Demo doesn't work for me on my Mac (I'm using Safari).
Jane Austen: "Player error: MEDIA_ERR_DECODE : Media failed to decode"
Chesterton: No error, but silence when playing, and skips to next file. Perhaps server overload?
Dumas: "Player error: MEDIA_ERR_SRC_NOT_SUPPORTED : Unsupported source type"
Apple platforms has by default problem with Auddioserve - my choice of default audio codec is opus (in ogg container) and Apple support of opus is not very good, to put it mildly (I think one can make Safari on MacOS to support opus, but no chance on iPhone/iPad AFAIK). So for Apple you'll need to change the default configuration. First thing to try is to put transcoding to None on client. Thus formats supported by Apple like mp3 will work. Next task is to change transcoding on serve and use aac instead of opus. Recently I added possibility to choose transcoding based on User-Agent string (regex match).
I like this. Might be a good contender for audiobookshelf. I like the simple design, I like the low level language. Only downside is low number of contributors but I've looked at the author and they look like a real decent person. They have a history of contributing to open source, which is a good sign.
Concerning audiobookshelf, I see it other way around, because I think audiobookshelf came after - so it's contender to audioserve. But it is definitely nice app. I tried and did like some things (especially turning books into HLS streams), however I ran into couple of issues, when trying:
- audiobookshelf requires some rules for directory structure (which caused that some subfolders from my collections were not loaded), audioserve serves any directory structure
- bigger collections - for collections with 10k audiobooks audiobookshelf was just too slow it went on for couple of hours loading before I kill it. Audioserve is able to handle within collections scan in tens of minutes.
Thanks for nice words, though I do suffer from above average affinity to beer (and Rust) I consider myself decent person.
As I'm using audioserve myself, I try to evolve it continuosly, however my view of good simple audiobooks streaming server might be quite optioned (prefer textual information to covers, strong preference of opus codec, etc.), but do not hesitate to share your experiences and ideas via issues on project.
No unless somebody will make plugin for it - audioserve has it own API. I though about implementing Subsonic API, but it's design is much different from how audioserve works, so it'll require too much "interface code", so I doubt I'll get to it.
MPD is definitely much more sophisticated and bigger project.
MPD is primarily client-server music player with streaming support.
Audioserve is more about serving audio files over HTTP protocol with couple of utilities/enhancements like possible audio transcoding, support of playback position sharing, support for chapterized audio files (m4b) and couple more.
Looks like Amazon is retiring Alexa?
Audioserve has generic web client - but not sure if it works on Alexa. If there are problems try with transcoding set to None.
I wrote boringstreamer to listen to my collection. I start one or more instances on different ports in different directories and connect to different ports similar to fm radio frequencies. (With tailscale I can listen from anywhere without any explicit access control.)