ADPCM Wav encoding is super fuzzy - any way to improve?

Hi!

I'm trying to add some nice kalimba sound effects to my playdate app I've nearly finished making. I'm using an android app called "keylimba" to generate some mp3 SFX & then exporting them to Wav ADPCM to use them with the sample player.

Unfortunately, my lovely kalimba noises get all gross & fuzzy whenever I convert them to Wav files with ADPCM. I've tried with audacity, ffmpeg, adpcm-xq but all to no avail (I've even enlisted a friend who is a full time audio producer to try to help).

Is there anything obvious I'm missing? Here's the raw mp3s: UI sfx - Google Drive

here's an example of how it sounds on my playdate (apologies for the super out of focus vid. any "quieter" sounds in the vid are from me messing with the gain to see if that had an effect on the fuzz - it didn't, it just made it quieter)

desperate for help as I love the sfx I've made, and using file player to use the mp3s instead of sampler player is much worse on performance & everything chugs!

You can rule out that this is ADPCM by trying plain WAV.

It's likely that your volumes are too high.

I master my sfx at between -6dB to -9dB. Definitely not normalized to max levels.

Once you're back at ADPCM you can use
https://github.com/dbry/adpcm-xq with WAV input to get the best results.

Try to avoid starting from MP3 if you can help it.

If you post a sample here I'll have a play around with it.

2 Likes

appreciate the fast response!

You can rule out that this is ADPCM by trying plain WAV.

exporting as 16 bit unsigned wavs works fine

It's likely that your volumes are too high.

I tried lowering my volume levels a crazy amount (-18 DB!) and used adpcm-xq again and i can still hear the fuzz (albeit quieter now, but that's because the entire track is quieter lol)

Try to avoid starting from MP3 if you can help it.

sadly starting from something other than mp3 isn't an option as that's the only export option the app I'm using to generate the sfx gives me

there's a link to the originals in my first post - if you have a chance I'd love to see if there's a way to get them working as ADPCM wavs.

Thanks again for such a useful reply though - appreciate the various troubleshooting steps to work through

Two ideas come to mind, volume and filtering.

it's possible volume is peaking somewhere in the chain that's not obvious. You have channel volume, source volume, and then however the clip is processed before you get it in-game. Sounds like you've experimented with that, and had no luck.

It's possible the low-end of the audio is fuzzing up the sound. Consider a simple high-pass filter to reduce the volume of (or entirely remove) low frequencies which might not be critical to your audio.

If you've reduced, EQ'd (filtered), and are still having distortion issues please let us know. I'd be interested to hear how this resolves.

in audacity, I've chucked a low & high pass filter on, and reduced volume of the track to -9DB and it's still sounding fuzzy and compressed.

It's worth noting that this doesn't seem to be a playdate issue, and seems to be occuring solely when i export with ADPCM :frowning:

(it's also worth noting that I'm a total audio production noob!)

I guess it could be the synth marimba does play well with ADPCM?

Can you share a sample or let me know how to recreate one?

should be a link in the original post :slight_smile: UI sfx - Google Drive

1 Like

alright, I'm spending the morning playing with playdate's sound effects functions to see if it's something I can fix on the device, rather than in audacity - will report back..

As DJ_irl suggested, I'll try reducing volume on device, and some high/low pass filters

using a low pass filter with a freq of 250 eliminates all fuzz for me, but makes the sfx very very quiet.

only way i could think of combatting this was by chucking an overdrive effect on (lol), which sounded ok in the simulator, but clipped a bunch on the playdate itself

see example of quietness here: https://photos.app.goo.gl/dNfWBcmSua8RBkgd8

I've spent a good while trying other techniques & am just gonna stick with the excessive low pass filter for the moment. it's just about loud enough when the pd is at full volume, so it'll have to do till i can find another way round this

Not sure if it adds any new information, but if I play the mp3 itself on the device with a playdate.sound.fileplayer, it already has a light fuzz. It seems to me like the ADPCM compression just really amplifies what's already there.

ooh interesting, that's good to know. I think I've settled now with the low pass filter, it's very close to good enough that I'll keep it and just see if anyone complains!

1 Like

fwiw I have one sound effect in my game that has a similar tonality and has the exact same issue at the top few volume notches of the PD. It drove me insane! I tried EQ'ing every which way and ended up just having to turn the volume way down (well below the rest of my sound effects).

1 Like

It looks like there's some weird interaction between ADPCM decoding and sample rate conversion causing that buzz. I converted reset.mp3 to WAV then encoded an ADPCM version with adpcm-xq and comparing the two I can hear that buzz pretty clearly, even in the simulator. I then noticed that the file is 48 kHz, so I resampled at 44.1 kHz and ran the same test, can't hear any difference. I also recorded the simulator output there with BlackHole and subtracted it from the original file, found no audible difference.

Try resampling your files to 44,100 Hz before doing the ADPCM conversion and I bet you'll have better luck. Also, it sounds like these are all monophonic, so converting them to 1 channel audio will save half the memory. You could also try 22,050 Hz to shave another 50% off that. I didn't hear any difference when I tested that, but I probably can't hear above 10 kHz anyway. :laughing:

I'll file a bug on this, but it's a pretty niche case and it has an easy workaround so it's not very high priority.

4 Likes

thank you! appreciate the reply. definitely going to try resampling - I'm quite busy this week but will try it out this weekend.

alright so i got excited & tried it out tonight. I resampled all tracks at 22050Hz, used adpcm-xq, set my channel's volume to 0.8 & used a low pass filter of 750.

Unfortunately, I'm still getting clipping when using the playdate speakers :sob:

my prev. "solution" of a super high low pass filter doesn't really work in real world scenarios - it's ok in my super quiet study but taking it into real life today proved it still wasn't loud enough :sob: