«Silly Voice» by Bruno Ruviaro
on 11 Nov'13 01:39 inFormant Synthesis example with a silly bass voice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
////////////////////////////////////////////
// Silly formant synthesis example.
// Using Pmono or Pbind to create a voice.
// SynthDef is hardwired to bass formants.
// Evaluate SynthDef first, then scroll down for Pmono and Pbind.
(
// SynthDef
SynthDef("sillyVoice", { arg
freq = 220,
amp = 0.5,
vibratoSpeed = 6,
vibratoDepth = 4,
vowel = 0,
att = 0.01,
rel = 0.1,
lag = 1,
gate = 1;
var in, vibrato, env, va, ve, vi, vo, vu, snd;
vibrato = SinOsc.kr(vibratoSpeed, mul: vibratoDepth);
in = Saw.ar(Lag.kr(freq, lag) + vibrato);
env = EnvGen.kr(Env.asr(att, 1, rel), gate, doneAction: 2);
va = BBandPass.ar(
in: in,
freq: [ 600, 1040, 2250, 2450, 2750 ],
bw: [ 0.1, 0.067307692307692, 0.048888888888889, 0.048979591836735, 0.047272727272727 ],
mul: [ 1, 0.44668359215096, 0.35481338923358, 0.35481338923358, 0.1 ]);
ve = BBandPass.ar(
in: in,
freq: [ 400, 1620, 2400, 2800, 3100 ] ,
bw: [ 0.1, 0.049382716049383, 0.041666666666667, 0.042857142857143, 0.038709677419355 ],
mul: [ 1, 0.25118864315096, 0.35481338923358, 0.25118864315096, 0.12589254117942 ]);
vi = BBandPass.ar(
in: in,
freq: [ 250, 1750, 2600, 3050, 3340 ] ,
bw: [ 0.24, 0.051428571428571, 0.038461538461538, 0.039344262295082, 0.035928143712575 ],
mul: [ 1, 0.031622776601684, 0.15848931924611, 0.079432823472428, 0.03981071705535 ] );
vo = BBandPass.ar(
in: in,
freq:[ 400, 750, 2400, 2600, 2900 ] ,
bw: [ 0.1, 0.10666666666667, 0.041666666666667, 0.046153846153846, 0.041379310344828 ],
mul: [ 1, 0.28183829312645, 0.089125093813375, 0.1, 0.01 ]);
vu = BBandPass.ar(
in: in,
freq: [ 350, 600, 2400, 2675, 2950 ],
bw: [ 0.11428571428571, 0.13333333333333, 0.041666666666667, 0.044859813084112, 0.040677966101695 ],
mul: [ 1, 0.1, 0.025118864315096, 0.03981071705535, 0.015848931924611 ]);
snd = SelectX.ar(Lag.kr(vowel, lag), [va, ve, vi, vo, vu]);
snd = Mix.new(snd);
Out.ar(0, snd!2 * env * amp);
}).add;
)
// Play around with these examples/
// Vowels a e i o u correspond to number 0 1 2 3 4
// Example 1
(
Pmono(
"sillyVoice",
\note, Pseq([5, 7, 9, 11], inf),
\ctranspose, -14,
\dur, Pwhite(0.61, 1.7),
\amp, 0.2,
\vibratoSpeed, Pwhite(6,7),
\vibratoDepth, 4,
\vowel, Pwrand([0, 2], [0.8, 0.2], inf),
\lag, 0.5
).play;
)
// Example 2
(
Pmono(
"sillyVoice",
\note, Pseq([-5, -3, -1, 0], inf),
\ctranspose, -14,
\dur, Pwhite(0.61, 1.7),
\amp, 0.2,
\vibratoSpeed, Pwhite(6,7),
\vibratoDepth, 4,
\vowel, Pwrand([0, 1], [0.8, 0.2], inf),
\lag, 0.5
).play;
)
// Example 3
(
Pbind(
\instrument, "sillyVoice",
\note, Prand([0, 5, 7, 9], inf),
\ctranspose, -14,
\dur, Pwhite(0.61, 1.7),
\amp, 0.2,
\vibratoSpeed, Pwhite(6,8),
\vibratoDepth, 4,
\vowel, Pwrand([0, 1], [0.8, 0.2], inf),
\legato, 1,
\att, 1.1,
\rel, 2.5
).play;
)
reception
Ah, really nice! Only discovered it today!
Beautiful and strange voices! thanks a lot!:-)