ulc-codec Demonstration 20200523

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 60-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: 32..256kbps+ (no hard limits on playback or coding rates)
    • MDCT-based coding using sine window (no window switching; overlap switching is implemented, though)
    • 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).

    As of the 20200509 release, the GBA executable's source code is included alongside the pre-built GBA demo. Additionally, pre-built encoding/decoding binaries (Windows only, sorry) are included as well, to hopefully make testing easier for inexperienced users. And to further increase ease-of-use, I've also included a "ConvertTool.bat" batch script that works with the encoding/decoding tools and will accept any format that FFmpeg can convert to 16-bit audio, and will output the decoded audio to a WAV file (please note that this batch script relies on FFprobe and FFmpeg, so these must be in your PATH or in the same folder as the script). NOTE: If the encoder/decoder crashes (possibly with an illegal instruction exception), try the SSE-only executables, and if that doesn't work, use the x87-only executables (simply delete the incompatible executables, and replace them with the new ones by removing "-sse-only" or "-x87-only" from the filenames).

    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). This demo is also available on GitHub at higher bitrates (96kbps, 128kbps), alongside a handful of other songs.

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

    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.


    1. No!ze Freakz - Freedom (64kbps).gif