;Port Audio
;WARNING!!!
;it is recommended to use -f flag when soundcard it supports native ASIO driver (20,24 or 32 bit)
-+I -+P -m0 -d -+O -f
sr = 48000
kr = 2400
ksmps = 20
nchnls = 2 ;4
#define MAXDEL #500#
gifont init 9
giUpsliders init 12 ;Sliders graphic update/second
;GUI generation
FLpanel "Orecchio elettronico di Tomatis [Ver 0.1]", 800,600, 100,50
FLlabel 11, gifont, 0, 5, 5, 5
iM FLbox "Input Micro", 1,gifont,14,80,10,10,33
iT FLbox "Input Tape ", 1,gifont,14,80,10,10,58
FLsetTextColor 128,0,0,iM
FLsetTextColor 0,0,128,iT
gkSel,gihsel FLbutBank 3, 1, 2, 25, 50, 100,25, -105
FLsetVal_i 0,gihsel
gkGainMic,giMicGain FLslider "Micro gain l/r (db)", -24,12,0,15, -1, 155+40,16, 130,30
FLsetVal_i 0,giMicGain
FLsetBox 6,giMicGain
FLsetAlign 7,giMicGain
FLsetColor2 255,0,0,giMicGain
gkGainTape,giTapeGain FLslider "Tape gain l/r (db)", -24,12,0,15, -1, 155+40,16, 130,55
FLsetVal_i 0,giTapeGain
FLsetBox 6,giTapeGain
FLsetAlign 9,giTapeGain
FLsetColor2 0,0,255,giTapeGain
;V-meters
gkselect,iSe FLbutton "Static/Dinamic peak", 1, 0, 2, 13, 20, 682, 90-50, -105
FLsetBox 6,iSe
FLsetAlign 4,iSe
iVMhw0 FLbox "L", 1,gifont,14,10,10,330,33
iVMhw1 FLbox "R", 1,gifont,14,10,10,330,57
gk1M,gih1M FLslider " ", 0,32767,0,1, -1, 350,15,345,30-5 ;L
gk3M,gih3M FLslider " ", 0,32767,0,1, -1, 350,15, 345,55+5 ;R
ih2M FLvalue " ", 60, 25, 720,18-5
gk2M,gih2M FLslider " ", 0,32767,0,3, ih2M, 350,15, 345,15-5
ih4M FLvalue " ", 60, 25, 720,58+5
gk4M,gih4M FLslider " ", 0,32767,0,3, ih4M, 350,15, 345,70+5
gk6M,gih6M FLslider " ", 0, 1,0, 1, -1, 15-5,25-10, 345+350,30-5
gk5M,gih5M FLslider " ", 0, 1,0, 1, -1, 15-5,25-10, 345+350,55+5
FLsetBox 1, ih4M
FLsetBox 1, ih2M
FLsetTextSize 14, iVMhw0
FLsetTextSize 14, iVMhw1
FLsetBox 0, ih2M
FLsetBox 0, gih2M
FLsetBox 6, gih1M
FLsetBox 0, ih4M
FLsetBox 0, gih4M
FLsetBox 6, gih3M
FLsetBox 0, gih6M
FLsetBox 0, gih5M
FLsetColor2 100, 55, 100, gih1M
FLsetColor2 100, 10, 255, gih2M
FLsetColor2 100, 55, 100, gih3M
FLsetColor2 100, 100, 255, gih4M
FLsetColor2 255, 100, 100, gih6M
FLsetColor2 255, 100, 100, gih5M
ih1 FLvalue " ", 54, 25, 20+12, 120+30
ih2 FLvalue " ", 54, 25, 20+150+25+12, 120+30
ih3 FLvalue " ", 54, 25, 320+12, 120+30
ih4 FLvalue " ", 54, 25, 20+450+25+12, 120+30
ih5 FLvalue " ", 54, 25, 620+12, 120+30
ih6 FLvalue " ", 54, 25, 70,340
;ih7 FLvalue " ", 54, 25, 495+120, 230+30+15
;iboxch1 FLbox "Channel 1",6,1,11,290,210,20+425,130+20
;iboxch2 FLbox "Channel 2",6,1,11,290,210,155,130+20
FLcolor 100,100,100
gkCutOff,ginit1 FLknob "Low-pass pre-filter (cut-off)", 20,20000, 0, 1, ih1, 80, 20,130+50
FLsetVal_i 20000,ginit1
FLsetBox 1, ih1
FLcolor 128,50,50
gkLpCh1,ginit2 FLknob "Channel 1 Attenuator low", 20,10000, 0, 1, ih2, 60, 20+150+25,130+50
FLsetVal_i 20,ginit2
FLsetBox 1, ih2
gkHpCh1,ginit3 FLknob "Channel 1 attenuator high", 20,20000, 0, 1, ih3, 60, 20+300,130+50
FLsetVal_i 20000,ginit3
FLsetBox 1, ih3
FLcolor 0,128,0
gkLpCh2,ginit4 FLknob "Channel 2 Attenuator low", 20,20000, 0, 1, ih4, 60, 20+450+25,130+50
FLsetVal_i 20,ginit4
FLsetBox 1, ih4
gkHpCh2,ginit5 FLknob "Channel 2 Attenuator high", 20,20000, 0, 1, ih5, 60, 20+600,130+50
FLsetVal_i 20000,ginit5
FLsetBox 1, ih5
FLcolor -1
;Precessione e Delay
gkdlt,ginit6 FLslider "Delay", 0,$MAXDEL,0,15,-1, 500,25,20+150+25,30+350
FLsetVal_i 0,ginit6
FLsetBox 1, ginit6
FLsetTextColor 128,128,128,ginit6
FLsetTextSize 18,ginit6
FLsetColor2 128,128,128,ginit6
FLsetAlign 2,ginit6
gkthreshold,gihthreshold FLslider "Threshold Precession", 0,32767,0,15,-1, 500,25,20+150+25,80+350
FLsetVal_i 0,gihthreshold
FLsetBox 1, gihthreshold
FLsetTextColor 128,128,128,gihthreshold
FLsetTextSize 18,gihthreshold
FLsetColor2 128,128,128,gihthreshold
FLsetAlign 2,gihthreshold
gkRescaleCh1,gihresc1 FLslider "Channel 1 Conduzione Ossea", 0,1,0,1, -1, 200,15,20+150+25,300
gkRescaleCh2,gihresc2 FLslider "Channel 2 Conduzione Aerea", 0,1,0,1, -1, 200,15, 20+450+25,300
FLsetColor2 128,50,50,gihresc1
FLsetColor2 0,128,0,gihresc2
FLsetBox 6,gihresc1
FLsetBox 6,gihresc2
FLsetTextColor 128,50,50,gihresc1
FLsetTextSize 14,gihresc1
FLsetTextColor 0,128,0,gihresc2
FLsetTextSize 14,gihresc2
FLcolor 14,114,114
gkPortTime,gihPortTime FLknob "Portamento Time/Ms", 1,2000, 0, 1, ih6, 60, 70,370
FLsetVal_i 1,gihPortTime
FLsetBox 1,ih6
FLcolor -1
gkexit, iex FLbutton "@9plus", 1, 0, 1, 70, 70, 10, 520, +105, 110, 0, 3600
FLsetTextSize 14,iex
FLsetBox 4, iex
FLpanel_end
FLrun
instr 1 ;Mic input
if gkSel = 1 kgoto tape
aMic_L, aMic_R ins
gaSig_L = aMic_L*ampdb(gkGainMic)
gaSig_R = aMic_R*ampdb(gkGainMic)
kgoto end
tape:
schedk 1,+105,2,0,3600
turnoff
end:
endin
instr 2 ;Tape record input
if gkSel = 0 kgoto mic
aTape_L,aTape_R diskin "BROWSE_FILE",.5,0,1
gaSig_L = aTape_L*ampdb(gkGainTape)
gaSig_R = aTape_R*ampdb(gkGainTape)
kgoto end
mic:
schedk 1,+105,1,0,3600
turnoff
end:
endin
instr 3 ;V-meter and more informations
FLsetVal_i 0,gih1M
FLsetVal_i 0,gih2M
FLsetVal_i 0,gih3M
FLsetVal_i 0,gih4M
FLsetVal_i 0,gih5M
FLsetVal_i 0,gih6M
;turnoffk gkSMT
;if gkSMT = 1 kgoto nonclip2
iresetpeak = 1.5
ktrig metro giUpsliders
kvalL max_k gaSig_L, ktrig, 0
kvalR max_k gaSig_R, ktrig, 0
kpeakL peak kvalL
kpeakR peak kvalR
if gkselect == 1 kgoto contin
reset:
timout 0, iresetpeak, contin
kpeakL = 0
kpeakR = 0
kclipL = 0
kclipR = 0
reinit reset
contin:
if kpeakL < 32767 kgoto nonclip1
kclipL = 1
FLsetVal ktrig, kclipL, gih6M
nonclip1:
if kpeakR < 32767 kgoto nonclip2
kclipR = 1
FLsetVal ktrig, kclipR, gih5M
nonclip2:
FLsetVal ktrig, kvalL, gih1M
FLsetVal ktrig, kpeakL, gih2M
FLsetVal ktrig, kvalR, gih3M
FLsetVal ktrig, kpeakR, gih4M
FLsetVal ktrig, kclipL, gih6M
FLsetVal ktrig, kclipR, gih5M
;Precessione
;gkPrecessione tonek (kvalL > gkthreshold ? 1 :0),10
gkPrecessione portk (kvalL > gkthreshold ? 1 :0),gkPortTime*.001
FLsetVal ktrig, gkPrecessione, gihresc1
FLsetVal ktrig, 1-gkPrecessione, gihresc2
endin
instr 4
;kfreq1 tonek gkCutOff,10
;kfreq2 tonek gkLpCh1,10
;kfreq3 tonek gkHpCh1,10
;kfreq4 tonek gkLpCh2,10
;kfreq5 tonek gkHpCh2,10
;Filtro programmabile passa basso
aFilterProg_L butterlp gaSig_L, gkCutOff;kfreq1
aFilterProg_R butterlp gaSig_R, gkCutOff;kfreq1
;filtri ch1 Conduzione Ossea
aFilterCh1_L butterhp aFilterProg_L, gkLpCh1
aOssea_L butterlp aFilterCh1_L, gkHpCh1
aFilterCh1_R butterhp aFilterProg_R, gkLpCh1;kfreq3
aOssea_R butterlp aFilterCh1_R, gkHpCh1 ;kfreq4
;filtri ch2 Conduzione Aerea
aFilterCh2_L butterhp aFilterProg_L, gkLpCh2
aAerea_L butterlp aFilterCh2_L, gkHpCh2
aFilterCh2_R butterhp aFilterProg_R, gkLpCh2;kfreq3
aAerea_R butterlp aFilterCh2_R, gkHpCh2 ;kfreq4
aAerea_L vdelay aAerea_L,gkdlt,$MAXDEL
aAerea_R vdelay aAerea_R,gkdlt,$MAXDEL
/*
aOutOssea_L = ((aOssea_L*gkPrecessione) + (aAerea_L*(1-gkPrecessione)))
aOutOssea_R = ((aOssea_R*gkPrecessione) + (aAerea_R*(1-gkPrecessione)))
aOutAerea_L = ((aAerea_L*gkPrecessione) + (aOssea_L*(1-gkPrecessione)))
aOutAerea_R = ((aAerea_R*gkPrecessione) + (aOssea_R*(1-gkPrecessione)))
*/
aOutOssea_L = (aOssea_L*gkPrecessione) + (aAerea_L*(1-gkPrecessione))
aOutOssea_R = (aOssea_R*gkPrecessione) + (aAerea_R*(1-gkPrecessione))
aOutAerea_L = (aOssea_L*gkPrecessione) + (aAerea_L*(1-gkPrecessione))
aOutAerea_R = (aOssea_R*gkPrecessione) + (aAerea_R*(1-gkPrecessione))
outs aOutOssea_L,aOutOssea_L
;outq1 aOutOssea_L
;outq2 aOutOssea_R
;outq3 aOutAerea_L
;outq4 aOutAerea_R
endin
instr 110
timout 0, 1,end
reinit exit
goto end
exit:
exitnow
end:
endin
i1 0 [3600*3] ;Max performance time
i3 0 [3600*3]
i4 0 [3600*3]
e