BassoonTracker icon indicating copy to clipboard operation
BassoonTracker copied to clipboard

tweak clipping of .XM so that it matches ft2(-clone)/milkytracker

Open coderofsalvation opened this issue 1 year ago • 3 comments
trafficstars

I've noticed that milkytracker & ft2-clone clip in exactly the same way, but bassoontracker not (it has much more headroom, perhaps because of the higher float-resolution?).

I was talking to 8bitbubsy (ft2-clone) about the fact whether there's even something about it in the spec. He said:

"At full amp in the FT2 config screen (32x), one voice equals full volume (0dB, peak). And about clipping, FT2 clamps the final 16-bit value after mixing of all voices is done, right before it sends the mixed stereo stream to the sound card So it has a 32-bit integer mix buffer"

Maybe we can clamp the mix to 16 bit values (and adjust 0db to the maximum value of 16bit?) so that it clips everything beyond that?

kind regards,

Leon

background: some of my modules (and other producers who use daws) use clipping in a musical way (boost transients of a mix to pierce through other sounds, which are shaven off when clipped, to increase perceived loudness).

coderofsalvation avatar Nov 12 '24 19:11 coderofsalvation

how to reproduce:

use a normalized sample (bassdrum e.g.) as follows:

image

row 8 and 12 should start clipping (beyond 0db)

coderofsalvation avatar Nov 12 '24 19:11 coderofsalvation

Hmm... good point... Internally, because it's using webaudio, all sample data ends up as floats, indeed, affecting clipping. (and other things) BassoonTracker doesn't do any mixing in script, it just hands that over to webaudio, so there's no easy way of clamping that final mixed value to a 16 bit int. I'll have a think about that.

steffest avatar Nov 13 '24 06:11 steffest

interesting challenge indeed.

It turns out "JavaScript Numbers are Always 64-bit Floating Point", so at least that's a fixed size which can be worked with (before sending it to WebAudio)..so I guess somewhere values exceeding 16bit needs to be shaven off...and then normalized back to 64bit floating point.

coderofsalvation avatar Nov 15 '24 10:11 coderofsalvation