Looking for advice on audio file decoders. RRS feed

  • Question

  • I'd appreciate any advice people can give me on the ease of implementation and current state of brokenness of the various Microsoft media decoder APIs. Recommendations for libraries also of interest. An advice appreciated.


    I'm about to dive into some code to import various audio file formats into a .net application for processing, but I can't figure out the current state of various Microsoft technologies for this. I have no problems with doing  the heavy lifting required to wrap a native API; but I'm not quite sure what API families give me what file formats at this point. There are pervasive rumors that MP3 decode is significantly broken on Vista in DirectoShow and DMA, but I'm not sure whether ACM still supports MP3 decode.


    The application is a pro-audio app. What I'd like to do is import as many pro-audio media types, as efficiently as possible into the program, for processing and playback. What I need: to be able to decode common audio file formats, and obtain the contents as PCM audio, in either 16-bit integer or 32-bit float samples. Low-latency ASIO support is mandatory for me, so the microsoft player platforms (DirectShow/DMO/Media SDK/Media Foundation) is only a means to an end, not an enabler.


    Things are complicated by disturbing rumors that MP3 decode has been sabotaged on Vista, and no longer works in DirectShow. The pattern in newer Microsoft decoder libraries (Media Foundation, &c) seems to be increasingly toward denying access to raw bits; and increasingly toward breaking MP3 support on the windows platform.


    The criteria is really what's available out of the box on Vista, without installing 3rd-party drivers. 


    GPL code is not an option; but Open Source-able license is mandatory. Berkely or MS license is fine. LGPL would be a significant minus.


    What I want (in order of priority)


    WAV file decode, for uncompressed formats. (not that hard really).

    MP3 decode (mandatory)

    MP3 encode (highly desirable)

    AC3/M4A - (would be a signficant bonus) encode and decode

    WMA -- Nice but, yeah, whatever.


    Other bonuses: an easy path to user-installable Ogg/Vorbis, minor pro-audio formats (like .AU) out-of-the-box, &c.


    Platform suport: ultimately consumed in a .net 3.5 app. Willing to wrap C++ native APIs to get the stream. I don't really care about abandoning support for XP. Preference for wrapper code is Managed C++.


    I've been looking at the various technology options for accessing system-provided decoders and encoders.


    Media Foundation... maybe. Can't be worse than DirectShow. Not sure which formats I get. Maybe ONLY WMA.

    DirectShow --- Possibly the most difficult API every invented on any platform. Been in there; a path of last resort, but it allegedly does not get me MP3 on vista anyway. Writing a Memory Sink in Managed C++ is not a very attractive option.

    DMO -- Maybe, but I can't figure out what decoding I'll actually get. MP3 is allegedly broken on Vista.

    ACM -- It's simple. Maybe MP3. But AC3, WMA &c are forever inaccessible. WaveFormatExtensible is not supported (but I've got that already).

    QuickTime -- No experience whatsoever, but given the state of brokenness of the MS APIs I'll be looking here.


    Thanks in advance.












    Monday, November 17, 2008 5:35 PM