ulc-codec Demonstration 20190512

Low-complexity MDCT audio codec

  1. Aikku
    Hey everyone.

    I've been developing an ultra-low-complexity MDCT-based audio codec (ulc-codec), and managed to get it running on the GBA to prove the extremely low decoding complexity.

    This is mostly a proof-of-concept, as decoding 32.768kHz M/S stereo audio takes 65% CPU spread out over 2-3 frames. That said, I still thought it was pretty neat as a tech demo.

    More details are available on the GitHub page, but the basics for the codec itself are:
    • Target bitrate: 16..256kbps+ (no hard limits on playback or coding rates)
    • MDCT-based coding using sine window (arbitrary (though fixed) window length + overlap)
    • Pre-echo reduction formula to account for fixed MDCT window length (very rudimentary, but does the job)
    • Nybble-based syntax (no entropy-code lookups)
    The GitHub page contains the source code to the demo as well as the tools necessary to convert your own files. Unfortunately, 32.768kHz is about the limit for stereo audio with this demo, as the visuals take around 25-30% CPU (that said, if you forgo all the visuals, you might be able to decode up to 48kHz M/S stereo).

    Special thanks go to No!ze Freakz for permission to use their track 'Freedom' for this demo (coded at 32.768kHz @ 64kbps, M/S stereo).

    The codec itself is free open-source software, under the GPLv3 license.

    UPDATE 190502: No new versions will be uploaded here, and they will only be available on the GitHub page. Shouldn't make too big of a difference though, as the somewhat inaccurate integer DCT routines from this demo seem to remove the fine details from the latest encoding tools.

    UPDATE 190512: So I lied. >_> Made a major breakthrough in encoding quality, so had to update with latest version. Also showing off new interface/design for the music player. Additionally, more demo songs on the GitHub page.



    Please note: I don't have a GBA to test this on, and the demo isn't built with any flashcarts in mind. Because of that, this will probably not run on hardware.

    Images

    1. Screenshot.PNG