From 84f782c7915036d798824a887c25536d22fa0ee1 Mon Sep 17 00:00:00 2001 From: Eugene Petkevich Date: Tue, 5 Jul 2022 11:52:52 +0300 Subject: [PATCH] Add midi adaptens for linuxsampler, hydrogen, amsynth, yamaha dtx drums --- extensions/classes/midiamsynth.sc | 21 +++++++ extensions/classes/mididtx.sc | 61 +++++++++++++++++++ extensions/classes/midihydrogen.sc | 51 ++++++++++++++++ extensions/classes/midilinuxsampler.sc | 21 +++++++ startup.scd | 11 ++++ .../test.scd" | 20 +++++- 6 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 extensions/classes/midiamsynth.sc create mode 100644 extensions/classes/mididtx.sc create mode 100644 extensions/classes/midihydrogen.sc create mode 100644 extensions/classes/midilinuxsampler.sc diff --git a/extensions/classes/midiamsynth.sc b/extensions/classes/midiamsynth.sc new file mode 100644 index 0000000..bfb0580 --- /dev/null +++ b/extensions/classes/midiamsynth.sc @@ -0,0 +1,21 @@ +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 diff --git a/extensions/classes/mididtx.sc b/extensions/classes/mididtx.sc new file mode 100644 index 0000000..a6c19f1 --- /dev/null +++ b/extensions/classes/mididtx.sc @@ -0,0 +1,61 @@ +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 diff --git a/extensions/classes/midihydrogen.sc b/extensions/classes/midihydrogen.sc new file mode 100644 index 0000000..cff6a19 --- /dev/null +++ b/extensions/classes/midihydrogen.sc @@ -0,0 +1,51 @@ +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 diff --git a/extensions/classes/midilinuxsampler.sc b/extensions/classes/midilinuxsampler.sc new file mode 100644 index 0000000..8ee9458 --- /dev/null +++ b/extensions/classes/midilinuxsampler.sc @@ -0,0 +1,21 @@ +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 diff --git a/startup.scd b/startup.scd index 06ed20d..8dde760 100644 --- a/startup.scd +++ b/startup.scd @@ -33,6 +33,17 @@ SynthDef(\buti, {|out=0, amp=1, pan=0, t_trig=0, accent=0.1, freq=200, tone=0.5, 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, diff --git "a/\320\245\321\215\320\267\320\270\321\204\321\203/test.scd" "b/\320\245\321\215\320\267\320\270\321\204\321\203/test.scd" index 3e93037..e391027 100644 --- "a/\320\245\321\215\320\267\320\270\321\204\321\203/test.scd" +++ "b/\320\245\321\215\320\267\320\270\321\204\321\203/test.scd" @@ -136,7 +136,25 @@ s.waitForBoot{ //============================================================================= ~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 -- 2.17.1