From ef9096ef88fe0b49fc7a93e29a94d7c02a7de346 Mon Sep 17 00:00:00 2001 From: Miguel Carvalho Date: Sun, 26 Dec 2021 00:45:10 +0000 Subject: [PATCH 1/2] Pitch bend implemented for both dreamcrusher++ and suboscillator It is based on the parameter "bend range" --- icarus.lua | 4 ++++ lib/Engine_Icarus.sc | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/icarus.lua b/icarus.lua index 73ae5d9..d76ca92 100644 --- a/icarus.lua +++ b/icarus.lua @@ -70,6 +70,9 @@ function setup_midi() skeys:on(d.note) elseif d.type=="note_off" then skeys:off(d.note) + elseif d.type=="pitchbend" then + local bend_st = (util.round(d.val / 2)) / 8192 * 2 -1 -- Convert to -1 to 1 + engine.bend(bend_st * params:get("bend_range")) end end end @@ -87,6 +90,7 @@ function setup_midi() mididevice[mididevice_list[v]].active=true end) params:add{type="option",id="midichannel",name="midi ch",options=midi_channels,default=1} + params:add_number("bend_range", "bend range", 1, 48, 2) if #mididevice_list>1 then params:set("midi",2) diff --git a/lib/Engine_Icarus.sc b/lib/Engine_Icarus.sc index 049741c..d95bd23 100644 --- a/lib/Engine_Icarus.sc +++ b/lib/Engine_Icarus.sc @@ -17,14 +17,14 @@ Engine_Icarus : CroneEngine { (0..5).do({arg i; SynthDef("icarussynth"++i,{ arg amp=0.5, hz=220, pan=0, envgate=0, - pulse=0,saw=0, + pulse=0,saw=0,bend=0, attack=0.015,decay=1,release=2,sustain=0.9, lpf=20000,resonance=0,portamento=0.1,tremelo=0,destruction=0, pwmcenter=0.5,pwmwidth=0.05,pwmfreq=10,detuning=0.1, feedback=0.5,delaytime=0.25, delaytimelag=0.1, sublevel=0; // vars - var ender,snd,local,in,ampcheck; + var ender,snd,local,in,ampcheck,hz_dream,hz_sub; // envelope stuff ender = EnvGen.ar( @@ -38,19 +38,15 @@ Engine_Icarus : CroneEngine { ); // dreamcrusher++ - in = VarSaw.ar(Lag.kr(hz+( - SinOsc.kr(LFNoise0.kr(1))* - (((hz).cpsmidi+1).midicps-(hz))*detuning - ),portamento), + hz_dream=(Lag.kr(hz+(SinOsc.kr(LFNoise0.kr(1))*(((hz).cpsmidi+1).midicps-(hz))*detuning),portamento).cpsmidi + bend).midicps; + in = VarSaw.ar(hz_dream, width: LFTri.kr(pwmfreq+rrand(0.1,0.3),mul:pwmwidth/2,add:pwmcenter), mul:0.5 ); // add suboscillator - in = in + Pulse.ar(Lag.kr(hz/2+( - SinOsc.kr(LFNoise0.kr(1))* - (((hz/2).cpsmidi+1).midicps-(hz/2))*detuning - ),portamento), + hz_sub=(Lag.kr(hz/2+(SinOsc.kr(LFNoise0.kr(1))*(((hz/2).cpsmidi+1).midicps-(hz/2))*detuning),portamento).cpsmidi + bend).midicps; + in = in + Pulse.ar(hz_sub, width: LFTri.kr(pwmfreq+rrand(0.1,0.3),mul:pwmwidth/2,add:pwmcenter), mul:0.5*sublevel @@ -254,6 +250,11 @@ Engine_Icarus : CroneEngine { icarusPlayer[i].set(\pwmfreq,msg[1]); }); }); + this.addCommand("bend","f", { arg msg; + (0..5).do({arg i; + icarusPlayer[i].set(\bend,msg[1]); + }); + }); } From a93ab168bcb9b48158660b4041fd258eb8c415bf Mon Sep 17 00:00:00 2001 From: Miguel Carvalho Date: Sun, 26 Dec 2021 17:46:38 +0000 Subject: [PATCH 2/2] Changed the lower bound of pitch bend to 0. --- icarus.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icarus.lua b/icarus.lua index d76ca92..527615e 100644 --- a/icarus.lua +++ b/icarus.lua @@ -90,7 +90,7 @@ function setup_midi() mididevice[mididevice_list[v]].active=true end) params:add{type="option",id="midichannel",name="midi ch",options=midi_channels,default=1} - params:add_number("bend_range", "bend range", 1, 48, 2) + params:add_number("bend_range", "bend range", 0, 48, 2) if #mididevice_list>1 then params:set("midi",2)