Audible Aliasing With Sine Waves (Using Resynth 2.2) - Bug?

Hi,

I just testing Resynth 2.2 with Renoise 2.8b3. I using the default Resynth preset, switched all part samples of the instrument to cubic interpolation. My output works with 48khz, 24bit.

If I play the sine wave on lower frequencies, there are really cleary aliasing artefacts audible. Reminds me on Amiga times.

Is this a bug, just normal or a bug in Resynth? I believed with cubic interpolation should make aliasing almost unaudible. As far as I can remember, other more modern trackers do not aliase, for example MilkyTracker.

EDIT:

Ok, it’s the way Resynth generates the wave, right? Seems to have aliasing on every played frequency, it’s just more audible on low frequencies.

filename: whywouldntitalias.png

we’re dealing with a 127 sample sinewave… in 8bit.

Oh shit, why it doesn’t generate in 32bit?? Ok, that’s why Resynth sounds like my old Amiga 1200 :)

You know, this would be the perfect feature request for a future 2.8 version of resynth. mxb would know if it’s possible or not :)

Regarding the 8bit sample, it doesn’t really make that much difference due to the second point below. However, there is no speed penalty for using 16 or 32 bit samples, so I’ll look into that for the next version.

Secondly, 128 frame samples are a compromise. If the period length becomes much bigger, re-rendering the sample cannot always keep up and so the real-time performance aspects are lost. As this is one of the major features, some corners had to be cut.

Additionally, the aliasing occurs at extreme variations from the base note. ReSynth2 generates samples at C4 (~261Hz) giving a sample rate of ~33000Hz. Therefore, should you play a C1 note this would only be playing back at 33000 / 2^(4-1) = ~4500Hz. Likewise, playing a C7 note would result in a playback frequency of 33000 * 2^(7-4) = ~265000Hz. The only way to avoid this would be to generate multiple samples per oscillator and map them across different parts of the keyboard. Unfortunately, currently the Lua implementation is just not fast enough to do this in realtime for performance use.

My recommended workaround for this would be to independantly generate a much lower waveform (e.g. a C1 or C2) and load this in the ‘wavetable’ oscillator. This would result in less aliasing, with the side-effect of having the octave selection offset.

Hope this helps.