-+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