ForumsSoftware ← Aalto timbre, modulation, and sample rate

Hi there,

I've found that certain combinations of Aalto's timbre and mod index seem to result in a sound that depends strongly on my host's sample rate.

For example, this test patch sounds very different to me at 48 KHz and 96 KHz sampling rates. Is this just the oscillator anti-aliasing doing its thing, as designed?

I'm using Aalto 1.7.0, Windows 64-bit.

{
"delay_input": 0.910000,
"seq_trig": 0,
"key_voices": 1,
"key_mod": 1,
"key_bend": 7,
"key_unison": 0,
"key_glide": 0,
"seq_wave": 0,
"seq_local": 1,
"seq_host": 0,
"seq_loop": 1,
"seq_rate": 0.250000,
"seq_ratio": 1,
"seq_rate_p": 0,
"seq_steps": 16,
"seq_steps_p": 0,
"seq_offset": 0,
"seq_offset_p": 0,
"seq_range": 12,
"seq_quantize": 0,
"seq_glide": 0,
"seq_pw": 50,
"seq_value_delay": 0,
"seq_pulse_delay": 0,
"seq_value0": 0,
"seq_value1": 0,
"seq_value2": 0,
"seq_value3": 0,
"seq_value4": 0,
"seq_value5": 0,
"seq_value6": 0,
"seq_value7": 0,
"seq_value8": 0,
"seq_value9": 0,
"seq_value10": 0,
"seq_value11": 0,
"seq_value12": 0,
"seq_value13": 0,
"seq_value14": 0,
"seq_value15": 0,
"seq_pulse0": 0,
"seq_pulse1": 0,
"seq_pulse2": 0,
"seq_pulse3": 0,
"seq_pulse4": 0,
"seq_pulse5": 0,
"seq_pulse6": 0,
"seq_pulse7": 0,
"seq_pulse8": 0,
"seq_pulse9": 0,
"seq_pulse10": 0,
"seq_pulse11": 0,
"seq_pulse12": 0,
"seq_pulse13": 0,
"seq_pulse14": 0,
"seq_pulse15": 0,
"lfo_freq": 1,
"lfo_noise": 0,
"lfo_level": 0,
"lfo_level_p": 0,
"lfo_freq_p": 0,
"env1_attack": 0.001000,
"env1_decay": 2.890000,
"env1_sustain": 1,
"env1_release": 2.720000,
"env1_level": 1,
"env1_xvel": 1,
"env1_trig_select": 1,
"env1_attack_p": 0,
"env1_decay_p": 0,
"env1_release_p": 0,
"env2_repeat": 0.429688,
"env2_delay": 0,
"env2_attack": 0.001000,
"env2_sustain": 0,
"env2_release": 0.990000,
"env2_xvel": 0,
"env2_trig_select": 1,
"env2_xenv1": 1,
"env2_delay_p": 0,
"env2_attack_p": 0,
"env2_repeat_p": 1,
"osc_noise": 0,
"osc_ratio": 3,
"osc_offset": 0.000003,
"osc_index": 1.980000,
"osc_timbre": 0.630000,
"osc_pitch": 110,
"osc_waveshape": 3.725290e-009,
"osc_noise_p": 0,
"osc_ratio_p": 0,
"osc_offset_p": 0,
"osc_index_p": 3,
"osc_timbre_p": 0,
"osc_pitch_exp_p": 1,
"osc_pitch_lin_p": 4,
"osc_waveshape_p": 0,
"osc_carrier_out": 0.500000,
"osc_mod_out": 0,
"gate_level": 0,
"gate_mode": 0,
"gate_decay": 0,
"gate_level_p": 0.480000,
"delay_peakfreq": 1000,
"delay_drive": 1,
"delay_peakres": 0,
"delay_feedback": 0,
"delay_freq": 110,
"delay_input_p": 0.500000,
"delay_peakfreq_p": 1,
"delay_drive_p": 0,
"delay_peakres_p": 0,
"delay_feedback_p": 0,
"delay_freq_p": 1,
"delay_output_wet": 0,
"delay_output_dry": 1,
"filter_cutoff": 20000,
"filter_q": 0,
"filter_mix": -1,
"filter_cutoff_p": 1,
"filter_q_p": 0,
"filter_mix_p": 0,
"output_input_gain": 1,
"output_reverb": 0,
"output_pan": 0,
"output_reverb_p": 0,
"output_pan_p": 0,
"patcher_matrix": {
"type": "signal",
"width": 14,
"height": 31,
"depth": 1,
"data": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
},
"key_scale": "12-equal",
"preset": "sampleratetest",
"maker_name": "Madrona Labs",
"app_name": "Aalto",
"app_version": 67328
}

My usual goal is to make things sound the same at different sampling rates. Doing this perfectly would take a lot of CPU in some cases, though. So there are optimizations that you might be able to hear sometimes, like calculating certain signals only once per signal vector instead of every sample. (Usually these should be only every N samples regardless of signal vector, but maybe sometimes it's the latter.)

I'll take a listen...

I was curious enough to try measuring this, in case there is some issue with my setup.

span-aalto-sampleratetest

White - 48 KHz sampling rate upsampled to 96 KHz by Ableton Live ("HiQ" mode)
Blue - 96 KHz sampling rate

Anyways, this was just an experiment and I thought I'd share what I found.