The top-level design is very good and one way to implement it is to use a series of external audio libraries to handle different formats. Spettro does this, using libmpg123, libsndfile, libsox and libav though it only implements file reading, and ripping out its a_file.c and what it uses should not be too difficult.
Unfortunately there is already a library called libaudio, part of the Network Audio System.
The top-level design is very good and one way to implement it is to use a series of external audio libraries to handle different formats. Spettro does this, using
libmpg123,libsndfile,libsoxandlibavthough it only implements file reading, and ripping out itsa_file.cand what it uses should not be too difficult.Unfortunately there is already a library called
libaudio, part of the Network Audio System.