I went here to teel tha I found lisndfile myself but Chris beat me to it.
Thank you so much for your effort tough, my google-fu was probably drained trying to find wildmidi for the Miles XMIDI decoding.
Anyway It seems that I should answer at least part of your questions:
What is this going to be used for?
I'm writing an LBX Handler targeted a Master of Orion, to be able to extract and convert on the fly resources from the original LBX files to memory to be later used by an Allegro engine.
I mean an engine for a rewrite from scratch of that very game...it's my big dream and I am trying to use the motivation as an excuse for doing stuff and learn something about C++ - Allegro and whatever comes under the radar doing that.
The choice not to convert the original data files beforehand (which could be done in the same way using the same approach but "on disk") is to conform to the choice of most of the "Openwhatever" modern day remakes that so can be distributed w/o thinking too hard about distributing copyrighted resources.
It is also an interesting problem to solve for a n00b like me.
Bitmaps should be easy enuff to handle because with Allegro one has direct access to the bitmap's pixels so the decoding algorithm (which has been widely teared apart from enthusiast) can be applied directly.
For sounds, MOO uses straight VOC files for SFX and Miles Design AIL 2.0 Extended MIDI files.
For the latter I found both the open source AIL 2.0 from John Miles and an implementation of WildMIDI lib that could be used and saves meself from writing a decoder myself.
The idea is that I'll decode them into WAV memfiles and play/stream using Allegro Sound subsystem.
The daring could hope to add proper decoders to the Allegro acodec addon but I ain't up to the task.
Surely it will take a long time, but who knows...I might be hit by the Programmer's muse and code away my evenings for the years to come.
I just hope you're using a good operating system because it appears Windows isn't directly supported
I am on windows but use MSYS2 shell, anyway libsndfile seems to be tested on both Win32 and win64:
At the moment, each new release is being tested on i386 Linux, x86_64 Linux, PowerPC Linux, Win32 and Win64.
But if you don't mind the bloat of another library, through SDL in there and be done with it
I will surely need at least a couple libs here and there so I'll have to live with it, but of course I wouldn't have used SDL, and most prolly would resolve myself into writing a decoder based on sox or the C++ decoder you linked (that was the only thing I didn't find of all your list....internet searching is REALLY an hard-to-master skill!).
By the way, since I am using MSYS2 seems libsndfile come at zero cost since it's in the mingw-w64 packages. SPOT ON!
Hope to make something out of all this mess!