sr = 44100 ksmps = 32 nchnls = 4 0dbfs = 1.0 /* here, i put all gui input elements in one instrument */ /*********************************************************************************/ /********************************** Volume Display *****************************/ /*********************************************************************************/ opcode ShowLED_a, 0, Sakkk Soutchan, asig, ktrig, kdb, kdbrange xin kdispval max_k asig, ktrig, 1 if kdb != 0 then kdb = dbfsamp(kdispval) kval = (kdbrange + kdb) / kdbrange else kval = kdispval endif if ktrig == 1 then outvalue Soutchan, kval endif endop opcode ShowOver_a, 0, Sakk Soutchan, asig, ktrig, khold xin kon init 0 ktim times kstart init 0 kend init 0 khold = (khold < .01 ? .01 : khold); avoiding too short hold times kmax max_k asig, ktrig, 1 if kon == 0 && kmax > 1 && ktrig == 1 then kstart = ktim kend = kstart + khold outvalue Soutchan, kmax kon = 1 endif if kon == 1 && ktim > kend && ktrig == 1 then outvalue Soutchan, 0 kon = 0 endif endop /*********************************************************************************/ /*********************************************************************************/ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ /************************************* Camouflage ******************************/ /*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ vbaplsinit 2, 4, -45, 45, 135, 225 ;Angles of the places of the 4 channels. giBuffer1 ftgen 0, 0, 137*sr, 2, 0 ;Use Buffer for recording. instr Timer kSecs timeinsts outvalue "timer", kSecs outvalue "min", int(kSecs/60) outvalue "sec", int(kSecs%60) endin instr Mic aMic inch 1 /* MIC INPUT SHOULD BE SEEN ALL THE TIME */ ;kAmp_Mic ctrl7 1, 6, -60, 10 kAmp_Mic invalue "amp_mic" kAmp_Mic port kAmp_Mic,0.1 gaMic = aMic*ampdb(kAmp_Mic) gkTrigDisp metro 10 gkshowdb = 1 gkdbrange = 60 ShowLED_a "SchPre_Amp_Mic", gaMic, gkTrigDisp, gkshowdb, gkdbrange ShowOver_a "SchPreOver_Amp_Mic", gaMic, gkTrigDisp, 2 endin instr GUI gkDel_vol_1 invalue "del_vol_1" gkDel_vol_2 invalue "del_vol_2" gkDel_vol_3 invalue "del_vol_3" gkDel_vol_4 invalue "del_vol_4" gkDel_vol_5 invalue "del_vol_5" gkDel_vol_6 invalue "del_vol_6" gkMic_vol_out invalue "mic_vol_out" gkDel_vol_1 port gkDel_vol_1, .1 gkDel_vol_2 port gkDel_vol_2, .1 gkDel_vol_3 port gkDel_vol_3, .1 gkDel_vol_4 port gkDel_vol_4, .1 gkDel_vol_5 port gkDel_vol_5, .1 gkDel_vol_6 port gkDel_vol_6, .1 gkMic_vol_out port gkMic_vol_out, .1 gkAng0 invalue "ang_mic" gkAng0 port gkAng0,0.1 endin /*********************************************************************************/ /************************************* Part A ******************************/ /************************************* Introduction ******************************/ /*********************************************************************************/ instr A0 ;Just Mic for 15 secs. aMic = gaMic aA0 linenr aMic, 0.1, 0.1, 0.01 a1, a2, a3, a4 vbap aA0, 0, 0, 0 chnmix a1, "instrA0_1" chnmix a2, "instrA0_2" chnmix a3, "instrA0_3" chnmix a4, "instrA0_4" endin instr A1 ;Mic + 5 delay lines aMic = gaMic aMic linenr aMic, 0.1, 0.1, 0.01 kAng1 linseg 0, 10, 0, 135, 810 ;2 complete rounds + 90 degrees which is equal to 15 secs. a1_1, a1_2, a1_3, a1_4 vbap aMic*ampdb(gkMic_vol_out), kAng1, 0, 0 ;The beginning of the 1st delay line after 10 secs. aD1 delay aMic, 10 kAngD1 linseg 0, 20, 0, 135, 810 aD1_1, aD1_2, aD1_3, aD1_4 vbap aD1*ampdb(gkDel_vol_1), kAngD1, 0, 0 ;The beginning of the 2nd delay line after 20 secs. aD2 delay aMic, 20 kAngD2 linseg 0, 30, 0, 135, 810 aD2_1, aD2_2, aD2_3, aD2_4 vbap aD2*ampdb(gkDel_vol_2), kAngD2, 0, 0 ;The beginning of the 3rd delay line after 30 secs. aD3 delay aMic, 30 kAngD3 linseg 0, 40, 0, 135, 810 aD3_1, aD3_2, aD3_3, aD3_4 vbap aD3*ampdb(gkDel_vol_3), kAngD3, 0, 0 ;The beginning of the 4th delay line after 40 secs. aD4 delay aMic, 40 kAngD4 linseg 0, 50, 0, 135, 810 aD4_1, aD4_2, aD4_3, aD4_4 vbap aD4*ampdb(gkDel_vol_4), kAngD4, 0, 0 ;The beginning of the 5th delay line after 50 secs. aD5 delay aMic, 50 kAngD5 linseg 0, 60, 0, 135, 810 aD5_1, aD5_2, aD5_3, aD5_4 vbap aD5*ampdb(gkDel_vol_5), kAngD5, 0, 0 ;Mic 1st Dly 2nd Dly 3rd Dly 4th Dly 5th Dly a1 = a1_1 + aD1_1 + aD2_1 + aD3_1 + aD4_1 + aD5_1 a2 = a1_2 + aD1_2 + aD2_2 + aD3_2 + aD4_2 + aD5_2 a3 = a1_3 + aD1_3 + aD2_3 + aD3_3 + aD4_3 + aD5_3 a4 = a1_4 + aD1_4 + aD2_4 + aD3_4 + aD4_4 + aD5_4 a1 linenr a1, 0.1, 3, 0.01 ;for fading out as this instrument finishes. a2 linenr a2, 0.1, 3, 0.01 a3 linenr a3, 0.1, 3, 0.01 a4 linenr a4, 0.1, 3, 0.01 chnmix a1, "instrA1_1" chnmix a2, "instrA1_2" chnmix a3, "instrA1_3" chnmix a4, "instrA1_4" /*\\\\\\\\\\\\\\\\\\\\\\\\\ Record \\\\\\\\\\\\\\\\\\\\\*/ aWriteIndex1 linseg 0, 137, ftlen(giBuffer1) tablew aMic, aWriteIndex1, giBuffer1 /*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ endin /*********************************************************************************/ /*************************************** Part B ********************************/ /*************************************** Chaos ********************************/ /*********************************************************************************/ instr B0 ;Rounding Mic in channels. faster and faster! aMic = gaMic aB0 linenr aMic, 0.1, 0.1, 0.01 kSpread linseg 100, 10, 100, 10, 20, 10, 10 kAng linseg 0, 10, 0, 10, 360, 8, 720, 6, 1080, 4, 1440, 3, 1800, 2, 2160, 1, 2520, 1, 2900, 1, 3300, 1, 3700, 1, 4100, 1, 4500, 1, 4900 a1, a2, a3, a4 vbap aB0*ampdb(gkMic_vol_out), kAng, 0, kSpread chnmix a1, "instrB0_1" chnmix a2, "instrB0_2" chnmix a3, "instrB0_3" chnmix a4, "instrB0_4" endin instr B1 ;1 Mic and 6 delay lines. All moving in channels randomly with random changing pitches. ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1 ;von-Hann window aMic = gaMic aMic linenr aMic, 3, 0.1, 0.01 fSoundin pvsanal aMic, ifftsize, ioverlap, iwinsize, iwinshape; kPitch1 randomi 0.90, 3, 0.7 kPitch2 randomi 0.90, 1.2, 0.8 kPitch3 randomi 0.90, 1.2, 0.9 kPitch4 randomi 0.90, 1.3, 1 kPitch5 randomi 0.90, 1.4, 1.1 kPitch6 randomi 0.90, 1.8, 1.2 fSound1 pvscale fSoundin, kPitch1 fSound2 pvscale fSoundin, kPitch2 fSound3 pvscale fSoundin, kPitch3 fSound4 pvscale fSoundin, kPitch4 fSound5 pvscale fSoundin, kPitch5 fSound6 pvscale fSoundin, kPitch6 aSound1 pvsynth fSound1 aSound2 pvsynth fSound2 aSound3 pvsynth fSound3 aSound4 pvsynth fSound4 aSound5 pvsynth fSound5 aSound6 pvsynth fSound6 aSound1 delay aSound1, 0.01 aSound2 delay aSound2, 0.2 aSound3 delay aSound3, 0.6 aSound4 delay aSound4, 0.7 aSound5 delay aSound5, 0.8 aSound6 delay aSound6, 1 kAng0 randomi 0, 720, 1 kAng1 randomi 0, 360, 1 kAng2 randomi 0, 360, 1.1 kAng3 randomi 0, 360, 1.2 kAng4 randomi 0, 360, 1.3 kAng5 randomi 0, 360, 1.4 kAng6 randomi 0, 360, 1.5 a01, a02, a03, a04 vbap aMic*ampdb(gkMic_vol_out), kAng0 a11, a12, a13, a14 vbap aSound1*ampdb(gkDel_vol_1), kAng1 a21, a22, a23, a24 vbap aSound2*ampdb(gkDel_vol_2), kAng2 a31, a32, a33, a34 vbap aSound3*ampdb(gkDel_vol_3), kAng3 a41, a42, a43, a44 vbap aSound4*ampdb(gkDel_vol_4), kAng4 a51, a52, a53, a54 vbap aSound5*ampdb(gkDel_vol_5), kAng5 a61, a62, a63, a64 vbap aSound6*ampdb(gkDel_vol_6), kAng6 a1 = a01 + a11 + a21 + a31 + a41 + a51 + a61 a2 = a02 + a12 + a22 + a32 + a42 + a52 + a62 a3 = a03 + a13 + a23 + a33 + a43 + a53 + a63 a4 = a04 + a14 + a24 + a34 + a44 + a54 + a64 a1 linenr a1, 0.1, 3, 0.01 ;for fading out as this instrument finishes. a2 linenr a2, 0.1, 3, 0.01 a3 linenr a3, 0.1, 3, 0.01 a4 linenr a4, 0.1, 3, 0.01 chnmix a1, "instrB1_1" chnmix a2, "instrB1_2" chnmix a3, "instrB1_3" chnmix a4, "instrB1_4" endin /*********************************************************************************/ /*********************************** Part C and D ****************************/ /********************************** Camouflage and Coda **************************/ /*********************************************************************************/ instr C0 ;Mic + Play back the recorded sound from Instr A1 with its delays /*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Mic \\\\\\\\\\\\\\\\\\\\\\\\\*/ aMic = gaMic aMic linenr aMic, 0.1, 0.1, 0.01 a0_1, a0_2, a0_3, a0_4 vbap aMic, gkAng0, 0, 10 /*\\\\\\\\\\\\\\\ Play Back the Recorded Sound \\\\\\\\\\\\\\*/ aReadIndex1 linseg 0, 137, ftlen(giBuffer1) aPlayBack table aReadIndex1, giBuffer1 aPlayBack linenr aPlayBack, 0.1, 0.1, 0.01 kAng1 linseg 0, 10, 0, 135, 810, 80, 480 a1_1, a1_2, a1_3, a1_4 vbap aPlayBack*ampdb(gkMic_vol_out), kAng1, 0, 0 ;The beginning of the 1st delay line after 10 secs. aD1 delay aPlayBack, 10 kAngD1 linseg 0, 20, 0, 135, 810, 75, 450, 5, 450 aD1_1, aD1_2, aD1_3, aD1_4 vbap aD1*ampdb(gkDel_vol_1), kAngD1, 0, 0 ;The beginning of the 2nd delay line after 20 secs. aD2 delay aPlayBack, 20 kAngD2 linseg 0, 30, 0, 135, 810, 70, 420, 10, 420 aD2_1, aD2_2, aD2_3, aD2_4 vbap aD2*ampdb(gkDel_vol_2), kAngD2, 0, 0 ;The beginning of the 3rd delay line after 30 secs. aD3 delay aPlayBack, 30 kAngD3 linseg 0, 40, 0, 135, 810, 65, 390, 15, 390 aD3_1, aD3_2, aD3_3, aD3_4 vbap aD3*ampdb(gkDel_vol_3), kAngD3, 0, 0 ;The beginning of the 4th delay line after 40 secs. aD4 delay aPlayBack, 40 kAngD4 linseg 0, 50, 0, 135, 810, 60, 360, 20, 360 aD4_1, aD4_2, aD4_3, aD4_4 vbap aD4*ampdb(gkDel_vol_4), kAngD4, 0, 0 ;The beginning of the 5th delay line after 50 secs. aD5 delay aPlayBack, 50 kAngD5 linseg 0, 60, 0, 135, 810, 55, 330, 25, 330 aD5_1, aD5_2, aD5_3, aD5_4 vbap aD5*ampdb(gkDel_vol_5), kAngD5, 0, 0 ;Mic Playback 1st Dly 2nd Dly 3rd Dly 4th Dly 5th Dly a1 = a0_1 + a1_1 + aD1_1 + aD2_1 + aD3_1 + aD4_1 + aD5_1 a2 = a0_2 + a1_2 + aD1_2 + aD2_2 + aD3_2 + aD4_2 + aD5_2 a3 = a0_3 + a1_3 + aD1_3 + aD2_3 + aD3_3 + aD4_3 + aD5_3 a4 = a0_4 + a1_4 + aD1_4 + aD2_4 + aD3_4 + aD4_4 + aD5_4 ; a1 linenr a1, 0.1, 3, 0.01 ; a2 linenr a2, 0.1, 3, 0.01 ; a3 linenr a3, 0.1, 3, 0.01 ; a4 linenr a4, 0.1, 3, 0.01 chnmix a1, "instrC0_1" chnmix a2, "instrC0_2" chnmix a3, "instrC0_3" chnmix a4, "instrC0_4" endin /*********************************************************************************/ /********************************** Main Sound Outputs **************************/ /*********************************************************************************/ instr Output aInstrA0_1 chnget "instrA0_1" aInstrA0_2 chnget "instrA0_2" aInstrA0_3 chnget "instrA0_3" aInstrA0_4 chnget "instrA0_4" aInstrA1_1 chnget "instrA1_1" aInstrA1_2 chnget "instrA1_2" aInstrA1_3 chnget "instrA1_3" aInstrA1_4 chnget "instrA1_4" aInstrB0_1 chnget "instrB0_1" aInstrB0_2 chnget "instrB0_2" aInstrB0_3 chnget "instrB0_3" aInstrB0_4 chnget "instrB0_4" aInstrB1_1 chnget "instrB1_1" aInstrB1_2 chnget "instrB1_2" aInstrB1_3 chnget "instrB1_3" aInstrB1_4 chnget "instrB1_4" aInstrC0_1 chnget "instrC0_1" aInstrC0_2 chnget "instrC0_2" aInstrC0_3 chnget "instrC0_3" aInstrC0_4 chnget "instrC0_4" a1 = aInstrA0_1 + aInstrA1_1 + aInstrB0_1 + aInstrB1_1 + aInstrC0_1 a2 = aInstrA0_2 + aInstrA1_2 + aInstrB0_2 + aInstrB1_2 + aInstrC0_2 a3 = aInstrA0_3 + aInstrA1_3 + aInstrB0_3 + aInstrB1_3 + aInstrC0_3 a4 = aInstrA0_4 + aInstrA1_4 + aInstrB0_4 + aInstrB1_4 + aInstrC0_4 /*************************** Volume Controller *******************/ /*\\\\\\\\\\\\\\\\\\\\\\\\\ 1st Channel \\\\\\\\\\\\\\\\\\\\\*/ ;kDb ctrl7 1, 0, -60, 10 kDb_1 invalue "amp_sig1" kDb_1 port kDb_1, 0.1 a1 = a1*ampdb(kDb_1) ShowLED_a "SchPre_asig1", a1, gkTrigDisp, gkshowdb, gkdbrange ShowOver_a "SchPreOver_asig1", a1, gkTrigDisp, 2 /*\\\\\\\\\\\\\\\\\\\\\\\\\ 2nd Channel \\\\\\\\\\\\\\\\\\\\\*/ ;kDb ctrl7 1, 1, -60, 10 kDb_2 invalue "amp_sig2" kDb_2 port kDb_2 ,0.1 a2 = a2*ampdb(kDb_2) ShowLED_a "SchPre_asig2", a2, gkTrigDisp, gkshowdb, gkdbrange ShowOver_a "SchPreOver_asig2", a2, gkTrigDisp, 2 /*\\\\\\\\\\\\\\\\\\\\\\\\\ 3rd Channel \\\\\\\\\\\\\\\\\\\\\*/ ;kDb ctrl7 1, 2, -60, 10 kDb_3 invalue "amp_sig3" kDb_3 port kDb_3, 0.1 a3 = a3*ampdb(kDb_3) ShowLED_a "SchPre_asig3", a3, gkTrigDisp, gkshowdb, gkdbrange ShowOver_a "SchPreOver_asig3", a3, gkTrigDisp, 2 /*\\\\\\\\\\\\\\\\\\\\\\\\\ 4th Channel \\\\\\\\\\\\\\\\\\\\\*/ ;kDb ctrl7 1, 3, -60, 10 kDb_4 invalue "amp_sig4" kDb_4 port kDb_4, 0.1 a4 = a4*ampdb(kDb_4) ShowLED_a "SchPre_asig4", a4, gkTrigDisp, gkshowdb, gkdbrange ShowOver_a "SchPreOver_asig4", a4, gkTrigDisp, 2 /******************************************************************/ outch 1, a1, 2, a2, 3, a3, 4, a4 chnclear "instrA0_1" chnclear "instrA0_2" chnclear "instrA0_3" chnclear "instrA0_4" chnclear "instrA1_1" chnclear "instrA1_2" chnclear "instrA1_3" chnclear "instrA1_4" chnclear "instrB0_1" chnclear "instrB0_2" chnclear "instrB0_3" chnclear "instrB0_4" chnclear "instrB1_1" chnclear "instrB1_2" chnclear "instrB1_3" chnclear "instrB1_4" chnclear "instrC0_1" chnclear "instrC0_2" chnclear "instrC0_3" chnclear "instrC0_4" endin /*********************************************************************************/ /*************************************** Record ********************************/ /*********************************************************************************/ instr Record a1, a2, a3, a4 monitor fout "20180620_Camouflage.wav", 16, a1, a2, a3, a4 endin i "Timer" 0 9999 i "Mic" 0 9999 i "GUI" 0 9999 ;/*********** Part A ***********/ ;Total = 2.5 min i "A0" 0 15 ;15 secs i "A1" 15 137 ;2 min + 15 secs /*********** Part B ***********/ ;Total = 3 min i "B0" 150 51 ;50 secs i "B1" 200 133 ;130 secs /******** Part C and D ********/ i "C0" 330 800 /*********** Output ***********/ i "Output" 0 800 /*********** Record ***********/ i "Record" 0 800