Files
BuboQuark/dev_sessions/with_midi.scd
2024-05-14 16:46:57 +02:00

295 lines
5.0 KiB
Plaintext

// == BACKLOG PERFORMANCE SAINT NAZAIRE ==
// TODO: ajouter un truc pour tuer tout le MIDI quand j'appuie sur F12
// TODO: simplifier l'émission de control change (c'est un type d'event)
// TODO: pourquoi le MIDI se comporte si bizarrement ? ('uid' not understood)
// BUG: Evalue moi
m = MIDIOut.newByName("MIDI", "Bus 1");
// TEST: Premier test
(
~test => [ sp: "kick", nb: 0 ];
~test.play;
)
// TEST: Second test
(
~fun => [ pat: "kick:4 snare:3" ];
~fun.play;
)
// TEST: Troisième test
(
~fun => [ pat: "1 2 3 4 5", sp: "hat" ];
~fun.play;
)
// TEST: Quatrième test
(
~plop => [
pat: "[4modular:4 4modular:3 4modular:2 4modular:5]/2",
pan: {SinOsc.ar(c.dur/4)}, rate: {
Sweep.ar(c.dur / 4, 1).linlin(0, 4, 0, 1, \minmax)
}, release: [1, 2, 3, 1].pseq(inf),
];
~plop.mold(2);
~plop.fx1(0.5, {arg in; MiVerb.ar(in, 0.2)});
~plop.play;
)
// TEST: Cinquième test
(
~testInstrument => [
instrument: 'default',
pat: "0 2 3 4"
];
~testInstrument.play;
)
// TEST: Sixième test
// WARNING: celui-ci crashe !
(
~testInstrument => [
pat: "0 2 3 4"
];
~testInstrument.play;
)
Sweep.help
(
~rhythm => [
pat: "[kick:11(3,8)/2, hat:4(5,8)/2, fsnare:2(1,8)/4]",
rate: [1, 0.5], release: 0.5,
];
~rhythm.play;
~rhythm.fx1(0.1, {
arg in;
var sound = CombC.ar(in, 2, c.dur / 4, LFNoise0.kr(c.dur * 2).range(0.01, 1));
sound = MiVerb.ar(sound, time: 0.1);
sound
});
)
(
~basse => [
pat: "0(5,8)/2",
i: "kraut",
pan: {SinOsc.ar(c.dur / 4).range(-0.5, 0.5)},
harmonics: {
Sweep.kr(
Impulse.kr(c.dur*2),
rate: 0.5
).linlin(0,1,0,2,\minmax)},
tune: [1, 2], amp: -2, release: 1, octave: 3,
];
~basse.fx1(0.5, {
arg in;
MiVerb.ar(in, time:0.3)
});
~basse.play;
)
(
BuboUtils.cleanSampleName("modular4")
)
// NOTE: changer amp de place cause une erreur (wtf?)
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test >> [
pat: "[[0 2 3 7 0 3 5 7 0 5 8 12 0 1 2 7]/4, [-7 -0]]/2",
chan: 0,
velocity: 10,
midiout: m
];
~test.play;
)
"uid".help
// NOTE: reproduction avec un pattern conventionnel
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test = Pbind(
\type, 'midi',
\degree, [0,2,3,4].pseq(inf),
\amp, Pwhite(0.0, 1.0, inf),
\midiout, m
);
)
// NOTE: MIDI très fancy !
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test >> [
pat: "[0 ~ 2 3 4]/2", midiout: m,
chan: 0, amp: [0.5, 0.7].pwhite(inf),
bob: {SinOsc.ar(2).range(1,120)},
control: 20,
da: Pfunc {
|e|
m.control(0, e.control, e.bob.asInteger)
}
];
~test.play;
)
~test.source.patternpairs
m.control(0, 20, 40)
// NOTE: Sans pattern Pmini
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test >> [ degree: [0, 2, 3, 4].pseq(inf), midiout: m ];
~test.play;
)
// NOTE: Avec Pmini + type explicite
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test >> [type: 'midi', pat: "0 1 2 3", midiout: m];
~test.play;
)
// NOTE: Avec Pmini, sans type explicite
(
m = MIDIOut.newByName("MIDI", "Bus 1");
~test >> [pat: "0 1 2 3", midiout: m];
~test.play;
)
// NOTE: : Pattern de démonstration
(
~baba = Pbind(
\type, \midi,
[\trig, \delta, \dur, \str, \num], Pmini("[1 ~ 2 3 4]/2").trace,
\degree, Pfunc({ |e| if(e.trig > 0) { e.str.asInteger } { \rest } }),
\midiout, m
);
~baba.play;
)
~a = [
];
~a.play;
(
~ground => [
pat: "[kick:2(5,16)/16, cgood:11/2 lgood:13]*2",
release: [4, 2, 1].pseq(inf),
quant: 4,
// test: Pfunc { |e| e.postln; },
// finish: { currentEnvironment.keysValuesDo {
// |key, val|
// "%: %".format(key, val).postln}
// },
];
~ground.play;
)
(
~snare => [pat: "[~ snare]/16", release: 4, quant: 4];
~snare.fx1(0.7, {arg in; MiVerb.ar(in, time: 0.7)});
~snare.play;
)
(
~hat => [pat: "[sound:2|hat:5] hat:2 hat:3!2", release: 1/32,
amp: [0.0,-12.0].pwhite(inf), quant: 4
];
~hat.play;
)
(
~vorb => [
// instrument: 'kraut',
octave: 6,
pat: "0 2 3 4 5 8"
];
~vorb.play;
)
(
~fault => [ pat: "1 2 3 4", sp: "hat", nb: 4 ];
~fault.play;
)
(
~fault.source.patternpairs
)
(
~vorb => [
instrument: 'kraut', octave: 4,
amp: -12, curve: -2,
tune: [0, [2, 4, 8].pseq(inf)],
release: {LFNoise0.kr(c.dur).range(0.1, 1)} * 4,
scale: Scale.chromatic,
quant: 4,
modSpeed: 8, pat: "[0(5,8) 3(5,8)]/8",
];
~vorb.play;
)
~apply => [
instrument: 'kraut',
quant: 4,
octave: [5, 6].pxrand(inf),
amp: -12, curve: -2, tune: 2,
release: {LFNoise0.kr(c.dur).range(0.1, 1)},
scale: Scale.chromatic, pan: 0.0,
modSpeed: 8, pat: "[[0 [3|~] 7 10]/2 [0 <[2 5 7 3] 3 [2 5] [3 12]> 7 10]/2]/2",
];
~apply.fx1(0.5, {
arg in;
MiVerb.ar(in, time: 0.8)
});
~apply.play;
)
Bank("default")[0].play
// NOTE: absolute crash (attention !)
(
~other => [
sp: "synthi", nb: 2,
release: 1/4, rate: 0.75,
pan: [0.0, 1.0].pwhite,
];
~other.mold(2);
~other.play;
)
// Faire le point sur la situation : qu'est-ce qui marche et ne marche pas ?
// NOTE: Pattern le plus basique
~a => [sp: "kick", nb: 4];
~a.play;
~a.clear;
// NOTE: Pattern avec Pmini
~a => [pat: "[kick hat snare hat]/2"];
~a.play;
~a.clear;
// NOTE: pattern de base, sample mal formée
// WARNING: le crash se produit ici !
~a => [sp: "kick:2", nb: 4];
~a.play;