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 (verified working on real hardware).
This is mostly a proof-of-concept, as decoding 32.768kHz M/S stereo audio takes 65-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:
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.
NOTE: As of the 20210821 version, pitch shifting tends to overload the CPU (default ROM waitstates are pretty terrible).
The track used in this demo is a slightly EQ'd version of Re-Style & Runeforce - A New Dawn (32kbps VBR @ 32.768kHz). All credit goes to them, and I am making no money off this project; this is entirely for fun and learning.
Please use hardware to judge the quality; on some environments, high frequency detail is lost during resampling from 32768Hz, resulting in excessive muffling.
The codec itself is free open-source software, under the GPLv3 license.
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 65-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:
- 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.
NOTE: As of the 20210821 version, pitch shifting tends to overload the CPU (default ROM waitstates are pretty terrible).
The track used in this demo is a slightly EQ'd version of Re-Style & Runeforce - A New Dawn (32kbps VBR @ 32.768kHz). All credit goes to them, and I am making no money off this project; this is entirely for fun and learning.
Please use hardware to judge the quality; on some environments, high frequency detail is lost during resampling from 32768Hz, resulting in excessive muffling.
The codec itself is free open-source software, under the GPLv3 license.