-
-
Save williamthazard/1a540104dff9c0f4a8f02d8bad63c3a4 to your computer and use it in GitHub Desktop.
WIP: cybernetic feedback interaction
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
( | |
Server.default = Server.local; | |
Server.default.options.memSize_(2.pow(20)).device_("Scarlett 4i4 USB"); | |
Server.default.waitForBoot({ | |
Ndef(\cfi, | |
{ | |
var in, imp, imp1, imp2, klnk, sound, sound1, sound2, sound3; | |
in = LocalIn.ar(1); | |
imp1 = DFM1.ar(Dust.ar(\density1.kr(0.1, 0.5),\pingamp1.kr(0.01, 0.5,))+(LeakDC.ar(in)*0.001),\filter1_freq.kr(1000, 0.5),\filter1_res.kr(0.75, 0.5)); | |
imp2 = DFM1.ar(Dust.ar(\density2.kr(0.1, 0.5),\pingamp2.kr(0.01, 0.5))+(LeakDC.ar(in)*0.001),\filter2_freq.kr(880, 0.5),\filter2_res.kr(0.8, 0.5)); | |
imp = imp1 + imp2; | |
klnk = DynKlank.ar(` | |
[ | |
[ | |
\klnkfreq1.kr(50, 0.5), | |
\klnkfreq2.kr(60, 0.5), | |
\klnkfreq3.kr(200, 0.5), | |
\klnkfreq4.kr(300, 0.5), | |
\klnkfreq5.kr(400, 0.5), | |
\klnkfreq6.kr(800, 0.5) | |
], | |
[ | |
\klnkamp1.kr(0.05, 0.5), | |
\klnkamp2.kr(0.05, 0.5), | |
\klnkamp3.kr(0.05, 0.5), | |
\klnkamp4.kr(0.03, 0.5), | |
\klnkamp5.kr(0.03, 0.5), | |
\klnkamp6.kr(0.03, 0.5) | |
], | |
[ | |
\klnktime1.kr(1, 0.5), | |
\klnktime2.kr(1, 0.5), | |
\klnktime3.kr(1, 0.5), | |
\klnktime4.kr(1, 0.5), | |
\klnktime5.kr(1, 0.5), | |
\klnktime6.kr(1, 0.5) | |
] | |
], | |
imp | |
); | |
sound1 = CombC.ar(LeakDC.ar(klnk), 5, \delay1_time.kr(0.5, 0.5), \delay1_decay.kr(1, 0.5)); | |
sound2 = CombC.ar(LeakDC.ar(sound1), 5, \delay2_time.kr(8, 0.5), \delay2_decay.kr(2, 0.5)); | |
sound3 = CombC.ar(LeakDC.ar(sound2), 5, \delay3_time.kr(21, 0.5), \delay3_decay.kr(3, 0.5)); | |
sound = CombC.ar(LeakDC.ar(sound3), 5, \delay4_time.kr(34, 0.5), \delay4_decay.kr(5, 0.5)); | |
LocalOut.ar(LeakDC.ar(sound)); // for feedback | |
Out.ar(0,in!2) | |
}).play; | |
Spec.add(\density1,[0,2,'lin',0,0.1].asSpec); | |
Spec.add(\pingamp1,[0,1,'lin',0,0.01].asSpec); | |
Spec.add(\density2,[0,2,'lin',0,0.1].asSpec); | |
Spec.add(\pingamp2,[0,1,'lin',0,0.01].asSpec); | |
Spec.add(\filter1_freq,[20,4000,'exp',0,1000,'Hz'].asSpec); | |
Spec.add(\filter1_res,[0,1,'lin',0.001,0.75].asSpec); | |
Spec.add(\filter2_freq,[20,4000,'exp',0,880,'Hz'].asSpec); | |
Spec.add(\filter2_res,[0,1,'lin',0.001,0.8].asSpec); | |
Spec.add(\klnkfreq1,[20,4000,'exp',0,50,'Hz'].asSpec); | |
Spec.add(\klnkfreq2,[20,4000,'exp',0,60,'Hz'].asSpec); | |
Spec.add(\klnkfreq3,[20,4000,'exp',0,200,'Hz'].asSpec); | |
Spec.add(\klnkfreq4,[20,4000,'exp',0,300,'Hz'].asSpec); | |
Spec.add(\klnkfreq5,[20,4000,'exp',0,400,'Hz'].asSpec); | |
Spec.add(\klnkfreq6,[20,4000,'exp',0,800,'Hz'].asSpec); | |
Spec.add(\klnkamp1,[0,0.1,'lin',0,0.05].asSpec); | |
Spec.add(\klnkamp2,[0,0.1,'lin',0,0.05].asSpec); | |
Spec.add(\klnkamp3,[0,0.1,'lin',0,0.05].asSpec); | |
Spec.add(\klnkamp4,[0,0.1,'lin',0,0.03].asSpec); | |
Spec.add(\klnkamp5,[0,0.1,'lin',0,0.03].asSpec); | |
Spec.add(\klnkamp6,[0,0.1,'lin',0,0.03].asSpec); | |
Spec.add(\klnktime1,[0,2,'lin',0,1].asSpec); | |
Spec.add(\klnktime2,[0,2,'lin',0,1].asSpec); | |
Spec.add(\klnktime3,[0,2,'lin',0,1].asSpec); | |
Spec.add(\klnktime4,[0,2,'lin',0,1].asSpec); | |
Spec.add(\klnktime5,[0,2,'lin',0,1].asSpec); | |
Spec.add(\klnktime6,[0,2,'lin',0,1].asSpec); | |
Spec.add(\delay1_time,[0.5,60,'lin',0,0.5].asSpec); | |
Spec.add(\delay2_time,[0.5,60,'lin',0,8].asSpec); | |
Spec.add(\delay3_time,[0.5,60,'lin',0,21].asSpec); | |
Spec.add(\delay4_time,[0.5,60,'lin',0,34].asSpec); | |
Spec.add(\delay1_decay,[-60,60,'lin',0,1].asSpec); | |
Spec.add(\delay2_decay,[-60,60,'lin',0,2].asSpec); | |
Spec.add(\delay3_decay,[-60,60,'lin',0,3].asSpec); | |
Spec.add(\delay4_decay,[-60,60,'lin',0,5].asSpec); | |
MIDIClient.init; | |
MIDIIn.connectAll; | |
MIDIdef.cc(\miid, { | |
arg val, num, chan, src; | |
if( | |
(num == 0) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\density1, val.linlin(0,127,0,2)); | |
AppClock.sched(0,{~slider1.value_(val.linlin(0,127,0,1))}) | |
} | |
); | |
if( | |
(num == 0) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\pingamp1, val.linlin(0,127,0,1)); | |
AppClock.sched(0,{~slider2.value_(val.linlin(0,127,0,1))}) | |
} | |
); | |
if( | |
(num == 1) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\density2, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 1) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\pingamp2, val.linlin(0,127,0,1)) | |
} | |
); | |
if( | |
(num == 2) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\filter1_freq, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 2) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\filter1_res, val.linlin(0,127,0,1)) | |
} | |
); | |
if( | |
(num == 3) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\filter2_freq, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 3) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\filter2_res, val.linlin(0,127,0,1)) | |
} | |
); | |
if( | |
(num == 4) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq1, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 5) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq2, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 6) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq3, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 7) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq4, val.linlin(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 8) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq5, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 9) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkfreq6, val.linexp(0,127,20,4000)) | |
} | |
); | |
if( | |
(num == 4) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime1, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 5) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime2, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 6) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime3, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 7) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime4, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 8) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime5, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 9) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\klnktime6, val.linlin(0,127,0,2)) | |
} | |
); | |
if( | |
(num == 10) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkamp1, val.linlin(0,127,0,0.1)); | |
Ndef(\cfi).set(\klnkamp2, val.linlin(0,127,0,0.1)); | |
Ndef(\cfi).set(\klnkamp3, val.linlin(0,127,0,0.1)) | |
} | |
); | |
if( | |
(num == 11) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\klnkamp4, val.linlin(0,127,0,0.1)); | |
Ndef(\cfi).set(\klnkamp5, val.linlin(0,127,0,0.1)); | |
Ndef(\cfi).set(\klnkamp6, val.linlin(0,127,0,0.1)) | |
} | |
); | |
if( | |
(num == 12) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\delay1_time, val.linlin(0,127,0.5,60)) | |
} | |
); | |
if( | |
(num == 12) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\delay1_decay, val.linlin(0,127,-60,60)) | |
} | |
); | |
if( | |
(num == 13) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\delay2_time, val.linlin(0,127,0.5,60)) | |
} | |
); | |
if( | |
(num == 13) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\delay2_decay, val.linlin(0,127,-60,60)) | |
} | |
); | |
if( | |
(num == 14) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\delay3_time, val.linlin(0,127,0.5,60)) | |
} | |
); | |
if( | |
(num == 14) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\delay3_decay, val.linlin(0,127,-60,60)) | |
} | |
); | |
if( | |
(num == 15) && (chan == 0), | |
{ | |
Ndef(\cfi).set(\delay4_time, val.linlin(0,127,0.5,60)) | |
} | |
); | |
if( | |
(num == 15) && (chan == 4), | |
{ | |
Ndef(\cfi).set(\delay4_decay, val.linlin(0,127,-60,60)) | |
} | |
); | |
}, chan: [0,4]); | |
~mft = MIDIOut(1); | |
~mft.control(0,0,0.1.linlin(0,2,0,127)); | |
~mft.control(4,0,0.01.linlin(0,1,0,127)); | |
~mft.control(0,1,0.1.linlin(0,2,0,127)); | |
~mft.control(4,1,0.01.linlin(0,1,0,127)); | |
~mft.control(0,2,1000.explin(20,4000,0,127)); | |
~mft.control(4,2,0.75.linlin(0,1,0,127)); | |
~mft.control(0,3,880.explin(20,4000,0,127)); | |
~mft.control(4,3,0.8.linlin(0,1,0,127)); | |
~mft.control(0,4,50.explin(20,4000,0,127)); | |
~mft.control(4,4,1.linlin(0,2,0,127)); | |
~mft.control(0,5,60.explin(20,4000,0,127)); | |
~mft.control(4,5,1.linlin(0,2,0,127)); | |
~mft.control(0,6,200.explin(20,4000,0,127)); | |
~mft.control(4,6,1.linlin(0,2,0,127)); | |
~mft.control(0,7,300.explin(20,4000,0,127)); | |
~mft.control(4,7,1.linlin(0,2,0,127)); | |
~mft.control(0,8,400.explin(20,4000,0,127)); | |
~mft.control(4,8,1.linlin(0,2,0,127)); | |
~mft.control(0,9,800.explin(20,4000,0,127)); | |
~mft.control(4,9,1.linlin(0,2,0,127)); | |
~mft.control(0,10,0.05.linlin(0,0.1,0,127)); | |
~mft.control(0,11,0.03.linlin(0,0.1,0,127)); | |
~mft.control(0,12,0.5.linlin(0.5,60,0,127)); | |
~mft.control(4,12,1.linlin(-60,60,0,127)); | |
~mft.control(0,13,8.linlin(0.5,60,0,127)); | |
~mft.control(4,13,2.linlin(-60,60,0,127)); | |
~mft.control(0,14,21.linlin(0.5,60,0,127)); | |
~mft.control(4,14,3.linlin(-60,60,0,127)); | |
~mft.control(0,15,34.linlin(0.5,60,0,127)); | |
~mft.control(4,15,5.linlin(-60,60,0,127)); | |
Window.closeAll; | |
w = Window("cybernetic feedback interaction",Window.availableBounds) | |
.background_(Color.black) | |
.fullScreen | |
.onClose_({f.kill}); | |
k = Window("nested",Window.availableBounds,border:false) | |
.front | |
.background_(Color.clear) | |
.alwaysOnTop_(true); | |
~slider1 = Slider(k, Rect(0,5,w.view.bounds.width/30,w.view.bounds.height-5)) | |
.knobColor_(Color.clear) | |
.background_(Color.clear) | |
.value_(0.1.linlin(0,2,0,1)) | |
.action_({arg obj; Ndef(\cfi).set(\density1, obj.value.linlin(0,1,0,2)); ~mft.control(0,0,obj.value.linlin(0,1,0,127))}); | |
~slider2 = Slider(k, Rect(w.view.bounds.width/30,5,w.view.bounds.width/30,w.view.bounds.height-5)) | |
.knobColor_(Color.clear) | |
.background_(Color.clear) | |
.value_(0.01) | |
.action_({arg obj; Ndef(\cfi).set(\pingamp1, obj.value); ~mft.control(4,0,obj.value.linlin(0,1,0,127))}); | |
f = FreqScopeView(w, Rect(0,w.view.bounds.height/2,w.view.bounds.width,w.view.bounds.height)) | |
.active_(true) | |
.freqMode_(1) | |
.dbRange_(144) | |
}) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment