--- /dev/null
+MidiAmsynth : MidiHandler {
+
+ *new {|name='amsynth', midiNames=#["amsynth", ["MIDI IN"]], reveal=true|
+ ^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit;
+ }
+
+ controlInit {
+ midiout.latency_(Server.default.latency);
+ "Amsynth is connected to supercollider";
+ }
+
+ makeSynthBind {
+ ^Pbind(
+ \type, \midi,
+ \midiout, this.midiout,
+ \midicmd, \noteOn,
+ \chan, 1,
+ )
+ }
+
+}
\ No newline at end of file
--- /dev/null
+MidiDtxDrums : MidiHandler {
+ classvar notes;
+ var <>pedalHiHat, <>closedHiHat, <>openHiHat, <>snare, <>rimShot, <>sideStick, <>bassDrum, <>tomHi, <>tomMid, <>tomLo, <>cCrash, <>ride, <>foot;
+
+ *new {|name='DTX drums', midiNames=#["DTX drums", ["DTX drums MIDI 1"]], reveal=true|
+ ^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit;
+ }
+
+ *initClass {
+ notes = IdentityDictionary[
+ 44 -> \pedalHiHat,
+ 42 -> \closedHiHat,
+ 46 -> \openHiHat,
+ 38 -> \snare,
+ 40 -> \rimShot,
+ 37 -> \sideStick,
+ 36 -> \bassDrum,
+ 48 -> \tomHi,
+ 47 -> \tomMid,
+ 43 -> \tomLo,
+ 49 -> \cCrash,
+ 51 -> \ride,
+ ];
+ }
+
+ controlInit {
+ // drum hit
+ MIDIdef.noteOn((\hit++name).asSymbol, {|...args|
+ var handler, drumName;
+ drumName = notes[args[1]];
+ handler = this.perform(drumName);
+ handler.value(args[0].linlin(0, 127, 0, 1), *args);
+ }, notes.keys.asArray, srcID: idin);
+
+ MIDIdef.cc((\foot++name).asSymbol, {|...args|
+ foot.value(args[0].linlin(0, 127, 0, 1), *args);
+ }, 4, srcID: idin);
+
+ // initialize handlers with revealing code
+ [
+ \pedalHiHat, \closedHiHat, \openHiHat, \snare, \rimShot,
+ \sideStick, \bassDrum, \tomHi, \tomMid, \tomLo, \cCrash, \ride, \foot
+ ].do{|handlerName|
+ this.perform((handlerName++\_).asSymbol, {|...args|
+ this.noCallback(handlerName, *args);
+ });
+ };
+
+ "Зацатя готов к использованию 😊".postln;
+ }
+
+ free {
+ [
+ \hit, \foot
+ ].do{|prefix|
+ var defName = (prefix ++ name).asSymbol;
+ MIDIdef(defName).free;
+ };
+ }
+
+}
\ No newline at end of file
--- /dev/null
+MidiHydrogen : MidiHandler {
+ classvar gmrock;
+
+ *new {|name='Hydrogen', midiNames=#["Hydrogen", ["Hydrogen Midi-In", "Hydrogen Midi-Out"]], reveal=true|
+ ^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit;
+ }
+
+ *initClass {
+ gmrock = IdentityDictionary[
+ \bass -> 36,
+ \side -> 37,
+ \snare -> 38,
+ \clap -> 39,
+ \rim -> 40,
+ \tomfloor -> 41,
+ \hatclosed -> 42,
+ \tomlow -> 43,
+ \hatpedal -> 44,
+ \tomhigh -> 45,
+ \hatopen -> 46,
+ \cowbell -> 47,
+ \ride -> 48,
+ \ccrash -> 49,
+ \ride2 -> 50,
+ \splash -> 51,
+ \hatsemiopen -> 52,
+ \bell -> 53,
+ ];
+ gmrock.know = true;
+ }
+
+ controlInit {
+ midiout.latency_(Server.default.latency);
+ "Hydrogen is connected to supercollider";
+ }
+
+ makeSynthBind {
+ ^Pbind(
+ \type, \midi,
+ \midiout, this.midiout,
+ \midicmd, \noteOn,
+ \chan, 1,
+ )
+ }
+
+}
+
+/*
+~hi = MidiHydrogen();
+
+*/
\ No newline at end of file
--- /dev/null
+MidiLinuxSampler : MidiHandler {
+
+ *new {|name='LinuxSampler', midiNames=#["LinuxSampler", ["Port 0"]], reveal=true|
+ ^super.newCopyArgs(name, midiNames, reveal).midiInit.controlInit;
+ }
+
+ controlInit {
+ midiout.latency_(Server.default.latency);
+ "LinuxSampler is connected to supercollider";
+ }
+
+ makeSynthBind {
+ ^Pbind(
+ \type, \midi,
+ \midiout, this.midiout,
+ \midicmd, \noteOn,
+ \chan, 1,
+ )
+ }
+
+}
\ No newline at end of file
Out.ar(out, sig);
}).add;
+// fm-synth pulse
+SynthDef(\dire, { |amp=1, out=0, freq=440, gate=1|
+ var sig, modFreq, env;
+ modFreq = SinOsc.ar(3000, mul: freq/4, add: freq);
+ sig = Pulse.ar(modFreq);
+ env = EnvGen.ar(Env.adsr(), gate, doneAction: 2);
+ sig = sig * env;
+ sig = Pan2.ar(sig, Rand(-0.5, 0.5));
+ Out.ar(out, sig * amp);
+}).add;
+
// Subtract synth pad
SynthDef(\dyti, {
| out=0, gate=1, freq=440, amp=1, pan=0, doneAction=2, cut=800, rez=0.8,
//=============================================================================
~kedi = MidiRemote25SL();
+~kedi2 = MidiRemote25SL(\kedi2);
~monokeys = KeySynthRelative(~kedi);
~monokeys.synthName = \dyti;
-~monokeys.intervals = #[5];
+~monokeys.bendRadius = 0.2;
+~monokeys.centerKey = 67;
+~monokeys.intervals = #[2, 5, 7];
+
+~monokeys.params[\modAmp] = 0.0;
+(
+~kedi.press_{|v|
+ var val = v * 0.02;
+ ~monokeys.group.set(\modAmp, val);
+ ~monokeys.params[\modAmp] = val;
+};
+)
+
+~monokeys2 = KeySynthRelative(~kedi2, centerKey: 52, intervals: #[2, 3]);
+~monokeys2.amp = 2;
+~monokeys2.synthName = \pope;
+~monokeys2.bendRadius = 0.2;
+~monokeys.intervals = #[2, 5, 7];
\ No newline at end of file