Hi,
This guy posted this a while ago, which is great:
The oscillator in his basic form :
(
Ndef(\Glitch_Free, {
var freq = 900;
var modshift = 2pi;
var modr = 1;
var vibrato_freq_env = 1;
var vibrato_width_env = 0.1;
var detune = LFNoise2.ar (7) / 77;
var vibrato = SinOsc.ar (2 ** (vibrato_freq_env - 6)) * vibrato_width_env / 12;
var fund_phasor = LFSaw.ar (freq * (2 ** (detune + vibrato))).range (0, modr);
var modulator = sin(fund_phasor * modshift);
var car_0 = 1 ** 0.5 * Crossfade_Formant.ar (fund_phasor, modulator, K2A.ar (Rand(0.1, 1)), Rand(0.1, 0.7), 1);
var car_1 = 1 ** 1.5 * Crossfade_Formant.ar (fund_phasor, modulator, K2A.ar (Rand(0.1, 1)), Rand(0.1, 1.3), 1);
var car_2 = 1 ** 2 * Crossfade_Formant.ar (fund_phasor, modulator, K2A.ar (Rand(0.1, 1)), Rand(0.1, 1.3), 1);
var sig = (car_0 + car_1 + car_2).tanh;
var env = EnvGen.ar(Env([0, 1, 1, 0], [0.1, 2, 1], [3, 0, -7]),
doneAction: 2);
OffsetOut.ar(0, sig * env * 0.2 ! 2);
}).play;
)
With those custom classes in the extension folder before playing it
Nearest_Even {
*ar {
arg val;
var val_floor, val_ceil, res, distance;
val_floor = val.floor;
val_ceil = val.ceil;
res = Select.ar (val % 2,
[ val_floor, val_ceil ],
);
distance = (val - res).abs;
^ [ res, distance ];
}
}
Nearest_Odd {
*ar {
arg val;
var val_floor, val_ceil, res, distance;
val_floor = val.floor;
val_ceil = val.ceil;
res = Select.ar (val + 1 % 2,
[ val_floor, val_ceil ],
);
distance = (val - res).abs;
^ [ res, distance ];
}
}
Crossfade_Formant {
*ar {
arg phasor = 0, phase_mod = 0, harm = 1, pm_index = 1, amp = 1; // lag = 0;
var harm_even, harm_odd, sig_even, sig_odd, sig, phase;
phase = phase_mod * pm_index;
harm_even = Nearest_Even.ar (harm);
sig_even = cos (phasor * 2pi * harm_even[0] + phase);
harm_odd = Nearest_Odd.ar (harm);
sig_odd = cos (phasor * 2pi * harm_odd[0] + phase);
sig = XFade2.ar (sig_even, sig_odd, harm_even[1] * 2 - 1) * amp;
^ sig;
}
}
1/ I was wondering how to implement - in this code - the formant tables that came with the classic Vowel UGen (tables that come originally from CSound)
https://csound.com/docs/manual/MiscFormants.html
2/ How to implement an FM modulation ?
Thanks a lot