download sc file: gabun_bavaria.rtf
country mouth bow 1
country mouth bow 2
Licenced under Creative Commons 'some rights reserved'
Julian Rohrhuber (jrh) 2002 / 2005
beng (gabon mouthbow)
(
play {
var bowRoot, stick, bow, mouth;
var speed, stickPattern, rootStickPattern, rootStick, tstick, trigger, hi, lo;
speed = 0.7;
trigger = Impulse.kr(12*speed);
stickPattern = Dseq([
Dseq(#[1, 0, 1, 0, 1, 1, 0, 1, 0.3, 1, 0], 8),
Dseq(#[1, 0, 1, 0, 0.2, 1, 0, 1, 1, 1, 0], 2),
Dseq(#[0, 1, 0, 1, 0, 1, 0, 0, 0.5, 1, 0], 2)
], inf) * Dwhite(0.8, 1.2, inf);
hi = Dwhite(65.95, 66.05, 1);
lo = 68;
rootStickPattern = Dseq([hi, hi, lo, hi, lo, lo, hi, lo], inf);
stick = Demand.kr(trigger, 0, stickPattern) * trigger;
rootStick = PulseDivider.kr(stick, 3, 3);
bowRoot = Lag.kr(Demand.kr(rootStick, 0, rootStickPattern).midicps, 0.05, 1/3.5);
bow = CombL.ar(
GrayNoise.ar(Decay2.kr(stick, 0.001, LFNoise1.kr(12, 0.05, 0.1), 0.3)),
0.01,
Lag.kr(bowRoot, 0.15).reciprocal,
LFNoise2.kr(0.32, 0.2, 0.5 - (0.2*ToggleFF.kr(rootStick)) * 4)
// Add a little mouse-magic (comment previous line, uncomment the following)
//LFNoise2.kr(0.32, MouseY.kr([0.2,0.005],[100,40],\exponential), 0.5 - (0.2*ToggleFF.kr(rootStick)) * 4)
);
tstick = Trig.kr(stick,0.01);
mouth = RLPF.ar(
bow,
Lag.kr(
Demand.kr(tstick, 1,
Dseq([Drand([
Drand(#[3, 4, 5, 6], 2),
Drand(#[2, 3, 5], 4 * 3),
Drand(#[ 2, 4, 6, 3 ], 3 * 4),
Dseq(#[6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6], 2)
], 3)], inf)
), 0.05) * bowRoot,
LFNoise1.kr(0.8, 0.05, 0.1)
);
Pan2.ar(LPF.ar(mouth, 2000), -0.3) +
Pan2.ar(HPF.ar(bow * 0.3, 5000), 0.4)
// If you're using "mouse-magic" you can leave out the first Pan2
// LPF.ar(mouth, 2000) +
// Pan2.ar(HPF.ar(bow * 0.3, 5000), 0.4)
};
)
bavarian mouth harp
(
play {
var root, finger, harp, mouth;
var speed, trigger, troot;
speed = MouseX.kr(0.7, 1.0) * 6;
trigger = Impulse.ar(speed + LFNoise2.kr(0.1, 0.1));
troot = PulseDivider.ar(trigger, 24, 24);
root = Demand.ar(troot, 1, Dseq([ 47, 52 ], inf)).midicps;
finger = Demand.ar(trigger, 0,
Dseq([
Dseq(#[1, 1, 0.05, 1, 0.7, 0.02, 1, 1, 0.1, 1, 0.1, 0.1], 4),
Dseq(#[1, 1, 1, 0.1, 0.1, 0.2, 1, 1, 0.1, 1, 1, 0.1], 5),
Dseq([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 2] ++ (0 ! 16+2))
])
) * trigger;
harp = Saw.ar(Lag.ar(root, 0.15), Decay.ar(finger, LFNoise1.ar(0.4, 0.3, 0.8), 0.2));
mouth = RLPF.ar(
harp,
Lag.ar(
Demand.ar(finger, 0,
Dseq([
Dseq([
Dseq(#[4, 5, 6], 2),
Dseq([6, 5, Drand(#[8, 7], 1)], 4),
Dseq(
#[3, 5, 6, 7, 6, 5, 7, 5, 6, 9,
8, 7, 5, 6, 4, 3], 2)
], 3)
], inf)
), 0.1) * root,
LFNoise1.kr(0.3, 0.05, 0.08),
1,
LPF.ar(harp, 2000) * 0.4
);
Pan2.ar(
LPF.ar(mouth, 4000),
LFNoise1.kr(0.5, 0.3)
);
};
)
using patterns instead of demand ugens
(
SynthDef("mursing", { |freq, harm, t_trig, gate=1, metal=0.5, base=0.5, out, pan, amp=0.1|
var env, harp, mouth, trigger;
env = Linen.kr(gate, doneAction:2);
trigger = Impulsar.ar(t_trig);
amp = amp * Decay2.ar(trigger,
LFNoise1.kr(5).range(0.0001, 0.01),
LFNoise1.kr(5).range(0.4, 0.8),
0.2
);
harp = Saw.ar(Lag.kr(freq, 0.15));
harp = harp + PinkNoise.ar(harp.max(0) * 0.2) * amp * 10;
mouth = RLPF.ar(
harp,
Lag.kr(harm, LFNoise1.kr(2).range(0.2, 0.3)) * freq,
LFNoise1.kr(0.3).range(0.01, 0.05),
1,
LPF.ar(harp, 2000) * 0.4
);
Out.ar(out,
Pan2.ar(
LPF.ar(mouth, 4000) +
(HPF.ar(harp, 2000) * metal) +
LPF.ar(harp, 400, 14 * base),
pan,
env
)
);
}).store;
)
(
var a, b;
a = 0;
b = 5;
Pmono(\mursing,
\note, Pseq([Pseq([Pn(a, 24), Pn(b, 24)], 2), Pseq([Pn(a, 12), Pn(b, 12)], 2)], inf),
\octave, 4,
\harm, Pseq([
Pseq([ Pseq([4, 1, 5]), Pseq([4, 6, 2]) ], 24),
Pseq([ Pseq([7, 6, 5]), Pseq([1, 7, 4]) ], 24),
Pseq([ Pseq([4, 1, 5]), Pseq([4, 6, 2]) ], 12),
Pseq([ Pseq([7, 6, 5]), Pseq([6, 1, 1]) ], 12)
], inf),
\t_trig, Pswitch([
Pseq([1, 0.3, 0.3, 1, 0, 0]), Pseq([1, 0.3, 0, 0, 1, 0])],
Pseq([0,0,1,0,1,1,0], inf)
),
\metal, Pbrown(0.3, 0.8, 0.01, inf),
\base, Pwrand([1, 0.3], [0.1, 0.8], inf),
\dur, 0.14
).play;
)