next up previous contents
Next: About this document Up: C-sound Previous: Synteseteknikker

Lydbehandling

Det finnes bokser i Csound som leser fra forhåndsproduserte lydfiler. Dette gjør at Csound er like velegnet til lydbehandling som til lydsyntese.

Kor

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

Global romklang

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

Fasevokoding

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

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.

Lineær-prediktiv koding

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.

Deltoneanalyse/additiv resyntese

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.

Videre

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.


next up previous contents
Next: About this document Up: C-sound Previous: Synteseteknikker

\yvind Hammer
Fri Feb 21 21:39:51 MET 1997