From: Eugene Petkevich Date: Wed, 14 Dec 2022 03:04:53 +0000 (+0100) Subject: Add multitrack prototype X-Git-Url: https://git.zuelum.org/?a=commitdiff_plain;h=2add4668e59fca21c9fe5e6fa8b9cdc24748a43b;p=scprojects.git Add multitrack prototype --- diff --git a/extensions/classes/midihandler.sc b/extensions/classes/midihandler.sc index 518306f..0bf7f2d 100644 --- a/extensions/classes/midihandler.sc +++ b/extensions/classes/midihandler.sc @@ -9,6 +9,8 @@ MidiHandler { }; } + // midiNames[0] should be Midi Device name + // midiNames[1] should include Midi port name midiInit { var dest; dest = MIDIClient.destinations.detect({ |item| diff --git a/extensions/classes/midiremotesl.sc b/extensions/classes/midiremotesl.sc index 196f1c7..c758c26 100644 --- a/extensions/classes/midiremotesl.sc +++ b/extensions/classes/midiremotesl.sc @@ -31,7 +31,7 @@ MidiRemote25SL : MidiHandler { var <>rewind, <>forward, <>stop, <>bplay, <>loop, <>brec; var <>pad; - *new {|name='Novation SL25 ReMOTE MKII', midiNames=#["ReMOTE SL", ["ReMOTE SL MIDI 1", "ReMOTE SL MIDI 1"]], reveal=true| + *new {|name='Novation SL25 ReMOTE MKII', midiNames=#["ReMOTE SL", ["ReMOTE SL MIDI 1", "Port 1"]], reveal=true| ^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit; } @@ -47,7 +47,10 @@ MidiRemote25SL : MidiHandler { } controlInit { - idin2 = MIDIClient.sources.detect{|i| i.name == "ReMOTE SL MIDI 2"}.uid; + idin2 = MIDIClient.sources.detect{ |i| + (i.device == midiNames[0]) + .and(["ReMOTE SL MIDI 2", "Port 2"].includesEqual(i.name)) + }.uid; // key pressed/released MIDIdef.noteOn((\keyDown++name).asSymbol, {|...args| diff --git "a/\320\245\321\215\320\267\320\270\321\204\321\203/multitrack.scd" "b/\320\245\321\215\320\267\320\270\321\204\321\203/multitrack.scd" new file mode 100644 index 0000000..7fbd061 --- /dev/null +++ "b/\320\245\321\215\320\267\320\270\321\204\321\203/multitrack.scd" @@ -0,0 +1,71 @@ +~ke = MidiRemote25SL(\kedifu); + +( +SynthDef(\zuFader, {|in, amp=1.0, out=0| + Out.ar(out, In.ar(in, 2) * amp); +}).add; +) + +( +// Multitrack class +/* +~trackFactory = { + ( + name: \mumy, + def: + ) +}; +*/ + +~trackerFactory = { + ( + tracks: [\lonu, \fose, \ziba, \pepo, \kaco, \xehi, \puso, \nuhu], + groups: Array(8), + buses: Array(8), + faders: Array(8), + init: {|self| + self.sourceGroup = Group(); + self.faderGroup = Group.after(self.sourceGroup); + self.kedifu = MidiRemote25SL(\kedifuTracker, reveal: false); + self.tracks.do{|k, i| + var group, bus, fader; + Pdef(k).endless; + self[k] = Pdef(k); + self[(k ++ \_).asSymbol] = {|self, f| Pdef(k, f)}; + group = Group(self.sourceGroup); + self.groups.add(group); + bus = Bus.audio(numChannels: 2); + self.buses.add(bus); + Pdef(k).set(\group, group, \out, bus); + fader = Synth(\zuFader, [in: bus, out: 0], self.faderGroup); + self.faders.add(fader); + }; + self.kedifu.fader_{|v, n| + self.faders[n].bindRange(\amp, -60.dbamp, 0.dbamp).value(v); + }; + self + }, + ) +}; +) +~tracker = ~trackerFactory.value.init; + +( +~tracker.lonu_{ + Pbind(*[ + instrument: \naje, + db: Pwhite(-9, -6!2), + dur: Prand((1!43)++(2!14)++(3!51)++(4!31), inf)/4, + pan: Pwhite(-0.7, 0.7!2, inf), + scale: Scale.nahawand, + octave: Pseq([2, 2, 2, 3, 3, 2, 3, 4, 3, 4], inf) + [2, 6], + degree: Pseq([0, 4, 5, 7, 6, 1], inf), + legato: Pwhite(0.8, 1.3!2, inf), + cut: Pwhite(600, 900!2), + rez: Pwhite(0.7, 0.9!2), + modFreqMin: Pwhite(6, 8!2), + modFreqMax: Pwhite(11, 13!2), + modAmp: Pwhite(0.01, 0.02!2), + ]) +}.quant_(7).play; +)