Broken state but progress
This commit is contained in:
BIN
Classes/.DS_Store
vendored
BIN
Classes/.DS_Store
vendored
Binary file not shown.
@ -55,22 +55,22 @@ Boot {
|
|||||||
// Post actions: installing behavior after server boot
|
// Post actions: installing behavior after server boot
|
||||||
Server.default.waitForBoot({
|
Server.default.waitForBoot({
|
||||||
if (false) {
|
if (false) {
|
||||||
d = ();
|
// d = ();
|
||||||
// Exceptional Dual Sardine Boot
|
// Exceptional Dual Sardine Boot
|
||||||
d.dirt = SuperDirt(2, s);
|
// d.dirt = SuperDirt(2, s);
|
||||||
d.dirt.fileExtensions = ["wav","aif","aiff","aifc","mp3"];
|
// d.dirt.fileExtensions = ["wav","aif","aiff","aifc","mp3"];
|
||||||
d.dirt.loadSoundFiles("/Users/bubo/Library/Application\ Support/Sardine/SON/*");
|
// d.dirt.loadSoundFiles("/Users/bubo/Library/Application\ Support/Sardine/SON/*");
|
||||||
d.dirt.loadSoundFiles("/Users/bubo/.config/livecoding/samples/*");
|
// d.dirt.loadSoundFiles("/Users/bubo/.config/livecoding/samples/*");
|
||||||
d.dirt.doNotReadYet = true;
|
// d.dirt.doNotReadYet = true;
|
||||||
d.dirt.start(57120, [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]);
|
// d.dirt.start(57120, [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]);
|
||||||
(
|
// (
|
||||||
d.d1 = d.dirt.orbits[0]; d.d2 = d.dirt.orbits[1]; d.d3 = d.dirt.orbits[2];
|
// d.d1 = d.dirt.orbits[0]; d.d2 = d.dirt.orbits[1]; d.d3 = d.dirt.orbits[2];
|
||||||
d.d4 = d.dirt.orbits[3]; d.d5 = d.dirt.orbits[4]; d.d6 = d.dirt.orbits[5];
|
// d.d4 = d.dirt.orbits[3]; d.d5 = d.dirt.orbits[4]; d.d6 = d.dirt.orbits[5];
|
||||||
d.d7 = d.dirt.orbits[6]; d.d8 = d.dirt.orbits[7]; d.d9 = d.dirt.orbits[8];
|
// d.d7 = d.dirt.orbits[6]; d.d8 = d.dirt.orbits[7]; d.d9 = d.dirt.orbits[8];
|
||||||
d.d10 = d.dirt.orbits[9]; d.d11 = d.dirt.orbits[10]; d.d12 = d.dirt.orbits[11];
|
// d.d10 = d.dirt.orbits[9]; d.d11 = d.dirt.orbits[10]; d.d12 = d.dirt.orbits[11];
|
||||||
);
|
// );
|
||||||
d.dirt.soundLibrary.addMIDI(\midi, MIDIOut.newByName("MIDI", "Bus 1"));
|
// d.dirt.soundLibrary.addMIDI(\midi, MIDIOut.newByName("MIDI", "Bus 1"));
|
||||||
d.dirt.soundLibrary.addMIDI(\midi2, MIDIOut.newByName("MIDI", "Bus 2"));
|
// d.dirt.soundLibrary.addMIDI(\midi2, MIDIOut.newByName("MIDI", "Bus 2"));
|
||||||
};
|
};
|
||||||
s.latency = 0.3;
|
s.latency = 0.3;
|
||||||
|
|
||||||
|
|||||||
@ -64,6 +64,9 @@
|
|||||||
pattern = EventShortener.process(
|
pattern = EventShortener.process(
|
||||||
pattern, this.key, \buboEvent, 0
|
pattern, this.key, \buboEvent, 0
|
||||||
);
|
);
|
||||||
|
pattern = EffectChain.process(
|
||||||
|
pattern, this.key
|
||||||
|
);
|
||||||
this[0] = Pbind(*pattern);
|
this[0] = Pbind(*pattern);
|
||||||
this.prepareToPlay(this, quant, fade);
|
this.prepareToPlay(this, quant, fade);
|
||||||
^this
|
^this
|
||||||
@ -94,7 +97,7 @@
|
|||||||
pattern, this.key, 'pmono', 0
|
pattern, this.key, 'pmono', 0
|
||||||
);
|
);
|
||||||
this[0] = Pmono(*pattern);
|
this[0] = Pmono(*pattern);
|
||||||
this.prepareToPlay(this; quant, fade);
|
this.prepareToPlay(this, quant, fade);
|
||||||
^this
|
^this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -312,8 +312,6 @@ d.list = { arg obj; obj.keys.do({arg i; i.postln}); };
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(
|
(
|
||||||
z = SynthDef('kraut', {
|
z = SynthDef('kraut', {
|
||||||
/*
|
/*
|
||||||
@ -325,13 +323,14 @@ d.list = { arg obj; obj.keys.do({arg i; i.postln}); };
|
|||||||
*/
|
*/
|
||||||
arg out;
|
arg out;
|
||||||
var sweepFreq = XLine.ar(\freq.kr(400) * 1.99, \freq.kr, \attack.kr(0.05) / \time.kr(2));
|
var sweepFreq = XLine.ar(\freq.kr(400) * 1.99, \freq.kr, \attack.kr(0.05) / \time.kr(2));
|
||||||
var frequencyBias = SinOsc.ar(\modSpeed.kr(1)).range(0.90, 1);
|
var frequencyBias = SinOsc.ar(\modSpeed.kr(8)).range(0.99, 1);
|
||||||
var sin = SinOscFB.ar([
|
var sin = SinOscFB.ar([
|
||||||
sweepFreq * \tune.kr(1) * frequencyBias,
|
sweepFreq * \tune.kr(1) * frequencyBias,
|
||||||
sweepFreq / \tune.kr * frequencyBias],
|
sweepFreq / \tune.kr * frequencyBias],
|
||||||
feedback: \harmonics.kr(0.25));
|
feedback: \harmonics.kr(0.25));
|
||||||
var env = Env.perc(\attack.kr, \release.kr(0.5)).ar(doneAction: 2);
|
var env = Env.perc(\attack.kr, \release.kr(0.5)).ar(doneAction: 2);
|
||||||
var sound = Safe.ar(sin.lincurve(-1, 1, -1, 1, \curve.kr(4)));
|
var sound = sin.lincurve(-1, 1, -1, 1, \curve.kr(4));
|
||||||
|
sound = sound * \amp.kr(-6).dbamp;
|
||||||
OffsetOut.ar(out, DirtPan.ar(sound, ~dirt.numChannels, \pan.kr(0), env))
|
OffsetOut.ar(out, DirtPan.ar(sound, ~dirt.numChannels, \pan.kr(0), env))
|
||||||
}).add;
|
}).add;
|
||||||
d.kraut = z;
|
d.kraut = z;
|
||||||
|
|||||||
9
Classes/EffectChain.sc
Normal file
9
Classes/EffectChain.sc
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
EffectChain {
|
||||||
|
|
||||||
|
*process {
|
||||||
|
arg pattern, key;
|
||||||
|
|
||||||
|
^pattern
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,28 +2,28 @@ EventShortener {
|
|||||||
|
|
||||||
*process {
|
*process {
|
||||||
arg pattern, key, type, time;
|
arg pattern, key, type, time;
|
||||||
|
var new_pattern;
|
||||||
var additionalKeys = Dictionary.newFrom([
|
var additionalKeys = Dictionary.newFrom([
|
||||||
\midi, [
|
\midi, [
|
||||||
type: \midi,
|
type: \midi,
|
||||||
|
midiCmd: \noteOn,
|
||||||
],
|
],
|
||||||
\buboEvent, [
|
\buboEvent, [
|
||||||
type: \buboEvent,
|
type: \buboEvent,
|
||||||
],
|
],
|
||||||
\looper, [
|
\looper, [
|
||||||
type: \buboLoopEvent,
|
type: \buboLoopEvent,
|
||||||
legato: 1,
|
legato: 1, time: time
|
||||||
time: time
|
|
||||||
],
|
],
|
||||||
\pmono, [],
|
\pmono, [],
|
||||||
]);
|
]);
|
||||||
pattern = this.findShortcuts(pattern);
|
new_pattern = this.findShortcuts(pattern);
|
||||||
pattern = this.functionsToNdef(pattern, key);
|
new_pattern = this.functionsToNdef(new_pattern, key);
|
||||||
pattern = pattern ++ additionalKeys[type];
|
new_pattern = new_pattern ++ additionalKeys[type];
|
||||||
if (pattern.includes('pat'), {
|
if (pattern.includes('pat'), {
|
||||||
pattern = this.patternize(pattern, type);
|
new_pattern = this.patternize(new_pattern, type);
|
||||||
});
|
});
|
||||||
pattern.postln;
|
^new_pattern
|
||||||
^pattern
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*patternize {
|
*patternize {
|
||||||
@ -41,9 +41,7 @@ EventShortener {
|
|||||||
}, {
|
}, {
|
||||||
additionalKeys = [\trig, \delta, \dur, \str, \num];
|
additionalKeys = [\trig, \delta, \dur, \str, \num];
|
||||||
});
|
});
|
||||||
new_pattern = new_pattern ++ [
|
new_pattern = new_pattern ++ [additionalKeys, temp];
|
||||||
additionalKeys, temp
|
|
||||||
];
|
|
||||||
new_pattern = new_pattern ++ [
|
new_pattern = new_pattern ++ [
|
||||||
degree: Pfunc({ |e|
|
degree: Pfunc({ |e|
|
||||||
if (e.trig > 0, {
|
if (e.trig > 0, {
|
||||||
@ -56,15 +54,15 @@ EventShortener {
|
|||||||
if (type !== 'midi', {
|
if (type !== 'midi', {
|
||||||
if (pattern.includes('i') || pattern.includes('instrument') == false, {
|
if (pattern.includes('i') || pattern.includes('instrument') == false, {
|
||||||
new_pattern = new_pattern ++ [
|
new_pattern = new_pattern ++ [
|
||||||
sp: Pkey(\str),
|
sp: Pfunc { |e| e.str ? "kick" },
|
||||||
nb: Pkey(\num),
|
nb: Pfunc { |e| e.num ? 0 },
|
||||||
|
instrument: Pfunc { |e| e.str.isNil && e.num.isNil ? "default" },
|
||||||
fast: 1,
|
fast: 1,
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
}, {
|
}, {
|
||||||
new_pattern.add(a);
|
new_pattern = new_pattern ++ [a, b];
|
||||||
new_pattern.add(b);
|
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
193
dev_sessions/with_midi.scd
Normal file
193
dev_sessions/with_midi.scd
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
// == 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");
|
||||||
|
|
||||||
|
// NOTE: Pattern rythmique de base
|
||||||
|
(
|
||||||
|
~test => [ sp: "kick", nb: 0];
|
||||||
|
~test.play;
|
||||||
|
)
|
||||||
|
|
||||||
|
// NOTE: Pattern avec Pmini
|
||||||
|
(
|
||||||
|
~test => [ pat: "kick:4 snare:3" ];
|
||||||
|
~test.play;
|
||||||
|
)
|
||||||
|
|
||||||
|
// NOTE: Pattern sans numéro maintenant !
|
||||||
|
(
|
||||||
|
~test => [ pat: "[kick hat snare hat]/2" ];
|
||||||
|
~test.play;
|
||||||
|
)
|
||||||
|
|
||||||
|
Bank.list
|
||||||
|
|
||||||
|
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.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
|
||||||
|
});
|
||||||
|
~rhythm.play;
|
||||||
|
)
|
||||||
|
|
||||||
|
~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;
|
||||||
|
~plop => [
|
||||||
|
pat: "[sound:4 4modular:5 sound:6 4modular:8]/4",
|
||||||
|
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;
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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, fgood:11/2]", release: 4];
|
||||||
|
~snare => [pat: "[~ snare]/16", release: 4];
|
||||||
|
~snare.fx1(0.7, {arg in; MiVerb.ar(in, time: 0.7)});
|
||||||
|
~hat => [pat: "[sound:2|hat:5] hat:2 hat:3!2", release: 1/32,
|
||||||
|
amp: [0.0,-12.0].pwhite(inf)
|
||||||
|
];
|
||||||
|
~hat.play;
|
||||||
|
~snare.play;
|
||||||
|
~ground.play;
|
||||||
|
~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,
|
||||||
|
modSpeed: 8, pat: "[0(5,8) 3(5,8)]/8",
|
||||||
|
];
|
||||||
|
~vorb.play;
|
||||||
|
~apply => [
|
||||||
|
instrument: 'kraut',
|
||||||
|
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;
|
||||||
|
)
|
||||||
|
|
||||||
|
nil.isNil
|
||||||
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
// NOTE: ajouter un truc pour tuer tout le MIDI quand j'appuie sur F12
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// NOTE: Pattern rythmique de base
|
|
||||||
(
|
|
||||||
~test => [ sp: "kick", nb: 0 ];
|
|
||||||
~test.play;
|
|
||||||
)
|
|
||||||
|
|
||||||
// NOTE: Pattern de base, explicite (sans clés magiques)
|
|
||||||
(
|
|
||||||
~test = Pbind(
|
|
||||||
\instrument, 'splayer',
|
|
||||||
\sp, Bank("kick")[0],
|
|
||||||
);
|
|
||||||
~test.play;
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
(
|
|
||||||
~test >> [
|
|
||||||
pat: "0 2 3 4",
|
|
||||||
midiout: m
|
|
||||||
];
|
|
||||||
~test.play;
|
|
||||||
)
|
|
||||||
|
|
||||||
(
|
|
||||||
m = MIDIOut.newByName("MIDI", "Bus 1");
|
|
||||||
~test >> [ pat: "0 2 3 4", midiout: m ];
|
|
||||||
~test.play;
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user