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