diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-04-28 22:21:17 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-04-28 22:21:17 +0200 |
commit | f0a637fe7fce13ffe63b96bdfaf675636f71c3da (patch) | |
tree | cc4baa6b9a873a283bbbc203d267c78ea972e276 | |
parent | d572febd57e507b7d04dfa2111f048f11dfca4d1 (diff) | |
download | digitale-debutanten-f0a637fe7fce13ffe63b96bdfaf675636f71c3da.tar.gz |
robust MIDI setup, configurable LFO oscillator waveform, multiple LFO shred support
-rw-r--r-- | jack_patch.xml | 7 | ||||
-rw-r--r-- | lfo.ck | 54 | ||||
-rw-r--r-- | lib/Oscope.ck | 13 | ||||
-rw-r--r-- | settings.nktrl_set | bin | 1184 -> 1184 bytes |
4 files changed, 54 insertions, 20 deletions
diff --git a/jack_patch.xml b/jack_patch.xml index 6497036..3d36072 100644 --- a/jack_patch.xml +++ b/jack_patch.xml @@ -21,6 +21,9 @@ <socket exclusive="off" client="alsa_in" type="audio" name="ALSA hw:default Out"> <plug>capture_1</plug> </socket> + <socket exclusive="off" client="nanoKONTROL" type="midi" name="nanoKONTROL MIDI Out"> + <plug>nanoKONTROL MIDI 1</plug> + </socket> </output-sockets> <input-sockets> <socket exclusive="off" client="system" type="audio" name="ALSA hw:0 In"> @@ -43,6 +46,9 @@ <socket exclusive="off" client="ChucK" type="audio" name="Chuck In 2"> <plug>inport 2</plug> </socket> + <socket exclusive="off" client="Midi Through" type="midi" name="Chuck MIDI In 1"> + <plug>Midi Through Port-0</plug> + </socket> </input-sockets> <slots/> <cables> @@ -51,6 +57,7 @@ <cable output="Chuck Out 3" input="Oscilloscope In"/> <cable output="ALSA hw:0 Out" input="Chuck In 1"/> <cable output="ALSA hw:default Out" input="Chuck In 2"/> + <cable output="nanoKONTROL MIDI Out" input="Chuck MIDI In 1"/> </cables> </patchbay> @@ -7,22 +7,32 @@ new PulseOsc @=> lfo[1]; new SampOsc @=> lfo[2]; 10 => lfo[2].gain; /* preamp, to get value range 0 to 1000 */ +//lfo[2] => Bus.oscope[0]; +//0.1 => Bus.oscope[0].gain; + Step lfo_freq; for (0 => int i; i < 2 /*lfo.cap()*/; i++) lfo_freq => lfo[i]; 0 => int cur_lfo; +UGen @osc[2]; +new SawOsc @=> osc[0]; +new PulseOsc @=> osc[1]; + +0 => int cur_osc; + /* s.freq = lfo.freq*lfo.gain + base.value */ -lfo[cur_lfo] => Gain lfo_gain => SawOsc s => JCRev rev => Bus.out_left; +lfo[cur_lfo] => Gain lfo_gain => Gain lfo_dummy => osc[cur_osc] => Echo rev => Bus.out_left; rev => Bus.out_right; -Step base => s; +Step base => lfo_dummy; //50::ms => echo.delay; //.3 => echo.mix; -0.1 => rev.mix; -0.2 => rev.gain; +1::second => rev.max; +500::ms => rev.delay; +0.5 => rev.mix; 10 => lfo_freq.next; 400 => base.next; @@ -46,20 +56,31 @@ change_lfo(int new_lfo) } } +fun void +change_osc(int new_osc) +{ + lfo_dummy =< osc[cur_osc] =< rev; + lfo_dummy => osc[new_osc => cur_osc] => rev; +} + /* - * LFO configuration via MIDI (Channel/Scene 0) + * LFO configuration via MIDI */ /* FIXME: custom nanoKONTROL events */ if (me.args() > 1) me.exit(); -1 => int device; -if (me.args() == 1) - me.arg(0) => Std.atoi => device; +/* first param: scene number */ +0 => int on_channel; +if (me.args() > 0) + (me.arg(0) => Std.atoi)-1 => on_channel; +if (on_channel < 0 || on_channel > 3) + me.exit(); MidiIn min; -if (!min.open(device)) +/* always open MIDI Through port, actual connection is done by Jack */ +if (!min.open(0)) me.exit(); <<< "MIDI device:", min.num(), " -> ", min.name() >>>; @@ -69,7 +90,7 @@ while (min => now) { msg.data1 & 0xF0 => int cmd; (msg.data3 $ float)/127 => float value; - if (channel == 0 && cmd == 0xB0) { + if (channel == on_channel && cmd == 0xB0) { <<< "Channel:", channel, "Command:", cmd, "Controller:", msg.data2, "Value:", value >>>; if (msg.data2 == 22) { @@ -84,11 +105,18 @@ while (min => now) { /* setting lfo_freq does not influence SampOsc! */ value*20 => lfo_freq.next => (lfo[2] $ SampOsc).freq; } else if (msg.data2 == 31) { - change_lfo(0); + 0 => change_lfo; } else if (msg.data2 == 41) { - change_lfo(1); + 1 => change_lfo; } else if (msg.data2 == 30) { - change_lfo(2); + 2 => change_lfo; + } else if (msg.data2 == 40) { + if (value $ int) + 1 => change_osc; + else + 0 => change_osc; + } else if (msg.data2 == 9) { + value*second => rev.delay; } /*else if (msg.data2 == 9) value $ int => lfo.harmonics;*/ diff --git a/lib/Oscope.ck b/lib/Oscope.ck index 5849b3f..b18a0b2 100644 --- a/lib/Oscope.ck +++ b/lib/Oscope.ck @@ -78,26 +78,25 @@ for (0 => int i; i < Bus.oscope.cap(); i++) * jack.scope configuration via MIDI (Channel/Scene 1) */ /* FIXME: custom nanoKONTROL events */ -if (me.args() > 1) +if (me.args() > 0) me.exit(); -1 => int device; -if (me.args() == 1) - me.arg(0) => Std.atoi => device; - MidiIn min; -if (!min.open(device)) +/* always open MIDI Through port, actual connection is done by Jack */ +if (!min.open(0)) me.exit(); <<< "MIDI device:", min.num(), " -> ", min.name() >>>; +3 => int on_channel; /* scene 4 */ + while (min => now) { while (MidiMsg msg => min.recv) { msg.data1 & 0x0F => int channel; msg.data1 & 0xF0 => int cmd; (msg.data3 $ float)/127 => float value; - if (channel == 1 && cmd == 0xB0) { + if (channel == on_channel && cmd == 0xB0) { <<< "Channel:", channel, "Command:", cmd, "Controller:", msg.data2, "Value:", value >>>; if (msg.data2 == 67) { diff --git a/settings.nktrl_set b/settings.nktrl_set Binary files differindex 14d7c64..5682f73 100644 --- a/settings.nktrl_set +++ b/settings.nktrl_set |