-+Q -+P -+I -m0
;***Esempio di file orchestra realizzato in Csound
;***P.D. Z.C.
;
sr = 44100
kr = 44100
ksmps = 1 ;non variare il ksmps
nchnls = 1
gknummidi init 0
gkamp init 0
gidopo init 0
gktrigger init 0
instr 1
;===================================================================================0
; parametri da introdurre
;**************
; generici
ifreq_min = 100
ifreq_max = 800
ifrqthp = 50 ; il valore 50 č di default
isalto_tempo = 0.01 ; parametro da introdurre
; filtro LP
irapp = 2 ; rapporto tra freq taglio filtro LP ; e frequenza massima possibile
iselet = 2 ; valore massimo possibile = 4
;**************
; calcolo variabili
ifrqtlp = ifreq_max*irapp
ifrqthp = (ifreq_min > ifrqthp ? ifrqthp : ifreq_min*.8)
isalto_campioni = sr*isalto_tempo
;inizializzazioni
kfatto init 0
aperiodo init 1
kcounter init 0
ktrovato init 0
k1 init 0
k0 = k1 ; valore precedente
ain in ; in real-time?
;ain diskin "c:/windows/desktop/jarrett.wav", 2, 6.5,1
;aenv follow ain, 0.1
if iselet < 2 goto uno
if iselet < 3 goto due
if iselet < 4 goto tre
ain tone ain, ifrqtlp
tre:
ain tone ain, ifrqtlp
due:
ain tone ain, ifrqtlp
uno:
ain tone ain, ifrqtlp
;filtrohp
ain butterhp ain, ifrqthp
k1 downsamp ain
kcounter=kcounter+1
if (kcounter < isalto_campioni) goto no
if ((k0*k1) > 0) goto no
if (k0=k1) goto no
;elseif k0*k1 < 0 cioč sono di segno opposto
if (ktrovato = 1) goto gia_trovato
kdirezione0 = (k1 > 0 ? 1 : -1)
ktrovato = 1
kcounter0 = kcounter
goto no
gia_trovato:
kdirezione1 = (k1 > 0 ? 1 : -1)
if (kdirezione1 != kdirezione0) goto no
kperiodo = kcounter-kcounter0 ;kperiodo
kfatto=1
ktrovato=0
no:
;kamp=(kfatto=0 ? 0 : 10000)
kcps = 1/(kperiodo/sr)
;===================================================================================
igate = 2
koct = octcps(kcps)
aenv follow ain, 0.1
kveloc downsamp (aenv/32768)*127
kpch = pchoct(koct)
kfrac = (frac(kpch)/10)*1000
kint = int(koct)
kvet table kint-4, 1
knote = kvet+kfrac
konoff = (kveloc > igate ? 1 : 0)
gknummidi = kvet+kfrac
gkamp = kveloc*konoff
/*
asig = gknummidi
adelay delay asig, 1/kr
kdelay = adelay
printk 0.2 , int(kdelay)
gktrigger = (int(kdelay) == int(gknummidi) ? 0 : 1)
*/
;aout oscil aenv, kcps, 10
;out aout
endin
instr 2
ktrig = gktrigger
midion 1, int(gknummidi+1), int(gkamp)
endin
f1 0 64 -2 12 24 36 48 60 72 84 96 108
f10 0 4096 10 1
i1 0 10000
i2 0 10000
e