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 (verified working on real hardware).
This is mostly a proof-of-concept, as decoding 32.768kHz M/S stereo audio takes 60-70% CPU (depending on the decoding quality mode, track complexity, etc.) 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:
The GitHub page contains the source code to the player 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 15% CPU; if 44.1kHz was to be used for example, CPU usage would be over 100%, resulting in dropouts.
- Target bitrate: 32..256kbps+ (no hard limits on playback or coding rates)
- MDCT-based coding using sine window (window switching plus overlap switching to minimize decimation)
- Noise-fill (similar to PNS)
- Nybble-based syntax (no entropy-code lookups)
As an experiment, a flimsy (but fun-to-use) pitch shifter has been included as of the 20201024 version. Lower frequencies tend to distort pretty badly (making it useless for serious applications), but it's kinda fun to mess around with.
The track used in this demo is a slightly EQ'd version of Re-Style & Vertex - Shadow World (64kbps VBR @ 32.768kHz). All credit goes to them, and I am making no money off this project; this is entirely for fun and learning.
The codec itself is free open-source software, under the GPLv3 license.
- Improved tools and codec syntax Apr 18, 2021
- Improvements, updated UI, new track Feb 6, 2021
- Improvements, new UI, 128kbps demo, gimmicky pitch shifter Oct 23, 2020