Open applecuckoo opened 9 months ago
I’d like to thank you for commenting! I haven’t been active on my projects for so long as life and the rising cost of living has just eaten away at my free time :/ I’d love to potentially implement CBX in C#, as when this was published (4yrs ago now!) the format was wind and dust. We didn’t know anything! This id a great development indeed :)
Howdy, i just thought you'd like to know if you havent heard, Ac_k has revived his project on Github, i noticed just recently and at this time his most recent update was 3 weeks ago. Im sure you would like to try and get in contact with him about maybe working together.
Hey! I stumbled across this project when trying to extract icons for someone on a forum. That ended up not working so I posted a link to the TT Games Discord for them to join. Anyways, I saw a couple of things in the README that I wanted to share some insights on.
PAK files
No, not all these files are redundant. I know for a fact that LEGO Batman 2 and LEGO City Undercover (the Wii U versions, at least) store global and 'rest' SFX exclusively in these files as RESTSFX_CAFE.PAK and GLOBALSFX.PAK. Which brings me to...
CBX/Chatterbox files
Not sure if you were aware, but yeah, CBX stands for something. A while back I was made aware of a modder's efforts to reverse engineer the Chatterboxes. To my surprise, the app actually worked. I'm primarily a Linux user so I had to use a separate computer to convert the files. I did make a post in the CBX issue thread for vgmstream, a cross-platform decoder for various video game audio codecs.
That got the ball rolling and it resulted in support being added a couple weeks ago. Anyways, the reason why CBX exists at all is because it's a speech codec. Speech codecs are commonly used in VoIP and situations where you don't need crystal-clear sound quality, like quick voice lines that last for less than a second.
Nowadays, CBXs fall short of other codecs like Opus which is capable of seamlessly blending between the speech-oriented SILK codec and the CELT codec which works for everything else. For fun, I tried using Opus to encode a line from LCU which had both a low quality 22 kHz CBX version and a 44 kHz DSP version. Obviously, the DSP was my baseline - all my attempts to encode the CBX file resulted in something that sounded worse than the original CBX itself.
Encoding the 44 kHz file with a bitrate of 10 kbps gives me a file that's about the same quality of the CBX but it's ~62.4% smaller (4.7 kB vs 12.5 kB), and encoding that same file with a bitrate of 16 gives me something that's virtually indistinguishable from the original, but is ~95.5% of it (7.1 kB vs. 74.7 kB!).
Gosh, that was a long codec rant, wasn't it? I'll probably post my findings in a separate repo in the next few days 😃