Det finnes bokser i Csound som leser fra forhåndsproduserte lydfiler. Dette gjør at Csound er like velegnet til lydbehandling som til lydsyntese.
I instrumentet under bruker vi soundin, som leser en angitt lydfil. Nytt er også delayw som skriver inn i en delay, delayr som angir en fast delaytid, og deltapi som er en variabel tapning av delayen. Tre tapninger beveger seg her langsomt fram og tilbake, ute av takt med hverandre:
sr=32000 kr=32000 ksmps=1 instr 1 ainnlyd soundin "Oyvind/testlyd" adummy delayr 1 amod1 oscili .05,.1,1 atap1 deltapi amod1+.05 amod2 oscili .05,.11,1 atap2 deltapi amod2+.05 amod3 oscili .05,.12,1 atap3 deltapi amod3+.05 delayw ainnlyd out (atap1+atap2+atap3)/3; endin
f1 0 8192 10 1 i1 0 45 e
Ofte vil man legge en effekt på mange instrumenter samtidig, eller man vil la en varierende kontroll affisere et antall instrumenter. For å oppnå dette, bruker man globale variable. Globale variable begynner med bokstaven g, etterfulgt av en bokstav etter det vanlige systemet (a, k, i). Det er lurt å initialisere globale variable i orkester-headeren, med kommandoen init.
Eksemplet under viser hvordan romklangen kan kjøre helt uavhengig av andre instrumenter. Etter at instrumentene har sendt sine outputs til den globale variabelen, kan den brukes som input i det separate romklangsinstrumentet. Siden instrumentene adderer inn i den globale variabelen, må vi også passe på å nulle den etter at den er brukt i romklangsinstrumentet (dette kan kanskje virke litt pussig).
sr = 32000 kr = 1000 ksmps = 32 garev init 0 instr 1 ; Hvitstoy anois rand 5000 garev = garev+anois ; Send til reverb out anois ; og direkte ut endin instr 2 ; 220 Hz pip abeep oscil 10000,220,1 garev = garev+abeep out abeep endin instr 99 ; Romklang asig reverb garev*.1,2 ; Input fra garev, 2 sek. klangtid. out asig garev = 0 endin f1 0 4096 10 1 i99 0 5 ; Skru paa klangen i 5 sek. i1 0 .1 i2 1 .1 i1 2 .1 i2 2 .1 e
Det separate programmet pvanal kan gjøre en fasevokodingsanalyse av en lyd. Analysedataene sendes til en egen fil, som siden kan leses inn i et Csound-instrument for resyntese med enhetsgeneratoren pvoc.
pvanal krever en mono AIFF-fil (ikke AIFC), og programmet kjøres med UNIX-kommandoen "pvanal innfil analysefil".
pvoc leser fra analysefilen med en varierende peker. Denne pekeren kan bevege seg hurtig eller langsomt gjennom lyden, gå baklengs etc. uten at pitch endres. På denne måten kan man f.eks. lage time-stretch. I eksemplet strekkes lyden med en faktor 2, samtidig som vi transponerer en kvint opp:
sr = 44100 kr = 441 ksmps = 100 instr 1 ktime line 0, p3, p3/2 aout pvoc ktime, 1.5, "pvfil" out aout endin i1 0.0 30.0 e
Ceres er et annet fasevokodingsprogram med en kobling mot Csound. Ceres er menystyrt, og relativt enkelt å bruke. Med Sieve-funksjonen kan man plukke ut bare de sterkeste deltonene på ethvert tidspunkt, og disse små "ploppene" kan betraktes som egne noter. Ceres kan skrive en Csound partiturfil med alle disse notene.
Det separate programmet lpcanal kan gjøre en lineær-prediktiv analyse av en lyd. Analysedataene sendes til en egen fil, som siden kan leses inn i et Csound-instrument for resyntese med enhetsgeneratoren lpread. lpcanal har problemer med høye samplingrater (44.1 og 48 kHz).
lpcanal kjøres med UNIX-kommandoen "lpcanal innfil analysefil". Med på lasset følger en (upålitelig) pitch-tracker og en RMS-analyse. Se Csound-manualen for detaljene. Analysefilen leses inn i Csound f.eks. slik:
sr = 32000 kr = 1000 ksmps = 32 instr 1 ktime line 0, p3, p3 krmsr,krmso,kerr,kcps lpread ktime, "analyse.lpc" kcps = (kcps == 0 ? 220 : kcps) avoice buzz krmso, kcps, int(sr/880), 1 aunvoc rand krmso asig = (kerr < .1 ? avoice : aunvoc) aout lpreson asig out aout endin
Her var det mye rart! For det første bruker lpread en tidspeker, her kalt ktime, akkurat som pvoc. Slik kan man lage hastighetsendringer etc. lpread oppdaterer variablene krmsr (RMS av residualen, brukes sjelden), krmso (RMS av originalsignalet), kerr (andelen støy), og kcps (pitch-tracking). Dessuten oppdateres alle filterkoeffisientene som senere brukes av filteret lpreson.
I tilordningene brukes en syntaks som er kjent fra programmeringsspråket C. Den første tilordningen skal tolkes slik: "Hvis kcps er 0 så sett kcps til standardfrekvensen 220, ellers sett den tilbake til kcps". Den andre tilordningen tester på kerr for å bestemme om eksitasjonssignalet skal tas fra buzz eller rand. Dette tilsvarer omtrent en switch i Max.
LPC er en kraftig og morsom teknikk. Prøv f.eks. å la pitch være konstant (robotstemme), eller la pitch styres fra RMS-verdiene! Effekter som "snakkende orkester" etc. er også mulige. Ha imidlertid ikke for store forhåpninger til lydkvaliteten når du bruker LPC.
Additiv syntese kan gjøres med vanlige oscillatorer og kontrollfunksjoner som line, men det finnes en mer praktisk metode for komplekse tilfeller. Enhetsgeneratoren adsyn leser en egen kontrollfil, der amplityde og frekvens til opptil 50 deltoner spesifiseres til diskrete tidspunkter. adsyn interpolerer lineært mellom disse. Et eget grafisk brukergrensesnitt eksisterer for å editere adsyn-kontrollfiler. Start dette programmet med UNIX-kommandoen adsyn.
Kontrollfilen kan senere leses inn i et Csound-instrument, slik:
sr=32000 kr=32 ksmps=1000 instr 1 aout adsyn 1,1,1,"test.ads" out aout/2 endin
Divisjonen med 2 er bare for å unngå klipping. Man må kanskje justere litt her. Det er en feil i adsyn som gjør at den er ganske hårsår når det gjelder kontrollraten. ksmps=1000 later til å fungere.
Amplityder, frekvenser og tidspunkter kan skaleres med de tre første parametrene til adsyn (her er de alle skalert med identiteten).
Det separate programmet hetro kan gjøre en filterbankanalyse av en lyd der amplityde og frekvens til et antall deltoner spores og lagres i en adsyn kontrollfil. hetro krever en mono AIFF-fil (ikke AIFC), og programmet kjøres med UNIX-kommandoen "hetro innfil analysefil". Det er endel nyttige flagg til denne kommandoen, som er beskrevet i Csound-manualen. hetro er beryktet for sine klikk og annen støy.
Nå skulle du være i stand til å fortsette utforskingen av Csound på egenhånd, ved hjelp av Csound-manualen. Gå gjerne gjennom "tutorialene" til Richard Boulanger, appendix 2 i manualen. Filene finnes i /local/b/csound/tutorfiles.