Today I started bringing on .ogg support in DirectQ, and I guess that you've probably guessed the end result by now. It's not going to happen for the foreseeable future.
Let me explain a bit here.
I've already excluded the traditional route of adding the 4 (or whatever) DLLs to the distribution - things are already enough of a mess with other source ports doing the same, and using conflicting DLL versions; I'm not going to make things worse. The same applies to anything else distributed in this manner.
Next I looked at stb_vorbis. On paper it looks just the ticket. A single .h file that you drop into your project, make some function calls, and everything happens automatically. Or rather, it doesn't, because you still have to interface it with a sound API, write your own streaming code, etc, and even then it fails to load the sample files from the Vorbis website.On to FFMPEG. This is a close second-best, being a bunch of static .libs (the Windows distribution even comes with .ogg pre-compiled in) but the API is horrible and besides - the header files are set up for UNIX and don't work with Visual Studio.The option of pulling something together from the Doom 3 source was considered. Sure it would bloat the executable and source code distributions, but something that works should be possible. You'd also need to include all of the idLib stuff and write some public interfaces of your own.
At this point I stopped.
To quote from something someone else once said a long time ago in a galaxy far far away:
Is it that bad, really? As far as I'm concerned right now, yes. This is a strange Twilight Zone where priorities are upside-down and where flavour-of-the-month rules over practical considerations. Is it hosted using CVS, SNV, Git, Mercurial? It is cross-compiled for 40 different platforms and oh-so-endian-aware? Does it have a command-line interface with pipes? Guess what?
I DON'T CARE.
All I want here is a nice single static library with a header file that I can drop into my project. No dependencies, no versioning conflicts, 6 functions needed: PlayFromFile, PlayFromMemory, Pause, Resume, Stop, SetVolume. It doesn't have to be technically perfect, it doesn't have to be any of the above things, it just has to not suck.
And it seems as though such a thing doesn't exist. Rant over.