next up previous contents
Next: Lydbehandling Up: C-sound Previous: Flere triks

Synteseteknikker

Dette kapittelet presenterer endel enkle Csound-instrumenter som demonstrerer ulike syntesemetoder.

Ringmodulering

I dette eksemplet ser vi hvordan man kan gjøre ringmodulering, dvs. at vi multipliserer to lyder med hverandre. Vi velger å modulere en lyd med et rikt spektrum (carrier) med en sinustone hvor frekvensen varierer (modulator):

sr     =  32000
kr     =  2000
ksmps  =  16
nchnls =  1

instr 1
  kmodf linen   40,p3*0.4,p3,p3*0.4      ; Styrer frekvensen til modulator
  kcara linen   10000,p3*0.1,p3,p3*0.1   ; Styrer amplityden til carrier
  amod  oscil   10000,kmodf,1            ; Modulator
  acar  oscil   kcara,100,2              ; Carrier
        out     amod*acar/10000
endin

(Legg merke til at vi må skalere output ved å dividere med 10000, for å unngå klipping).

f1 0 4096 10 1
f2 0 4096 10 1 0.6 0.3 0.1 0.1 0.3 0.6 0.1
i1 0 20
e

FM-syntese

FM er lett å få til i Csound, f.eks. slik:

sr     =  32000
kr     =  2000
ksmps  =  16
nchnls =  1

instr 1
  kmodf linen   400,p3*.05,p3,p3*.95     ; Styrer amplityden til modulator
  kcara linen   10000,p3*.05,p3,p3*.95   ; Styrer amplityden til carrier
  amod  oscili  kmodf,100,1   
  acarr oscili  kcara,100+amod,2
        out     acarr
endin

Vi bruker her oscili istedenfor oscil, fordi dette minsker interpolasjonsstøyen.

Partiturfilen er den samme som i forrige eksempel.

Subtraktiv syntese

Subtraktiv syntese betyr filtrering av en lyd med et rikt spektrum. I orkesterfilen under bruker vi reson, som er et båndpassfilter med styrbar senterfrekvens og båndbredde.

For å holde lydstyrken på det opprinnelige nivået selv etter filtreringen, bruker vi balance, som her sørger for at afilt holdes på samme nivå som abuzz.

sr     =  16000
kr     =  2000
ksmps  =  8
nchnls =  1

instr 1
  kbuzz linen   10000,p3*.1,p3,p3*.1         ; Styrer amplityden
  kfilt linseg  2000,p3*0.5,0,p3*0.5,2000    ; Styrer senterfrekvens
  abuzz oscili  kbuzz,100,1                  ; Tonegenerator
  afilt reson   abuzz,kfilt,100              ; Filter
  abal  balance afilt,abuzz                  ; Automatisk gain-kontroll
        out     abal
endin

For å få et rikt spektrum på den opprinnelige lyden, bruker vi GEN11 i partiturfilen. GEN11 gir et flatt spektrum, og vi ber om å få med 50 harmoniske:

f1 0 8192 11 50
i1 0 20
e

Lydkilden kan byttes ut med en hvitstøygenerator, slik:

sr     =  16000
kr     =  2000
ksmps  =  8
nchnls =  1

instr 1
  knois linen   10000,p3*.1,p3,p3*.1         ; Styrer amplityden
  kfilt linseg  2000,p3*0.5,0,p3*0.5,2000    ; Styrer senterfrekvens
  anois rand    knois                        ; Tonegenerator
  afilt reson   anois,kfilt,100              ; Filter
  abal  balance afilt,anois                  ; Automatisk gain-kontroll
        out     abal
endin

Waveshaping

Følgende er basert på et instrument laget av Rob Waring. expseg lager en stykkevis eksponensiell funksjon. Parametrene til expseg er startverdi, tid til verdi 2, verdi 2, tid til verdi 3, etc.

tablei er en boks for tabelloppslag; overføringsfunksjonen er angitt i p6. Siden aosc i utgangspunktet varierer mellom -250 og +250, har vi brukt en variabeltilordning for å addere 256. På den måten får vi en peker inn i tabellen, som er 513 samples lang.

;waveshaping instrument

sr=32000
kr=3200
ksmps=10
nchnls=1

instr   1

kenv    linen   p4,.1,p3,.1
aenv    expseg  1,p3*p7,250,p3*p8,150,p3*p9,p10,p3*.5,.1
aosc    oscili  aenv,p5,1
aosc    =       aosc+256
atab    tablei  aosc,p6
        out     atab*kenv
endin

I partiturfilen har vi brukt GEN08 for å fylle tabellen. GEN08 lager en glatt, fin interpolering (spline) mellom de oppgitte punktene.

f1 0 2048 10 1
f2 0 513 8 -1 89 -.5 89 -.6 156 .6 89 .5 89 1
f3 0 513 8 -1 100 0 100 -.4 112 .4 100 0 100 1

i1    0      6     10000    275    3    .1     .05   .3   20
i1    0      6      5000    350    3    .1     .05   .3   20
i1    0      6      3300    425    3    .1     .05   .3   20
i1    0      9      2500    475    2    .06    .04   .4   70
i1    0      9      2000    525    2    .06    .04   .4   70
i1    0      9      1600    600    2    .06    .04   .4   70
i1    0      9      1400    675    2    .06    .04   .4   70

FOF

Det finnes en egen boks for FOF-syntese. fof er en ganske kompleks enhetsgenerator, og den har fått et helt appendix i Csound-manualen. Her er et instrument man kan prøve:

      sr = 32000
      kr = 2000 
      ksmps = 160

      instr    1
k1    oscil    2, 4, 1
k2    linseg   0, p3/2, 0, p3/2, 0.8
k3    expseg   1, p3/3, 1, p3, 0.001 
a1    fof      5000, p4+k1,  500*k3, k2, 120, .003, .017, .005, 10, 1, 2, p3
a2    fof      4000, p4+k1,  850*k3, k2, 120, .003, .017, .005, 10, 1, 2, p3
a3    fof      3000, p4+k1, 2500*k3, k2, 120, .003, .017, .005, 10, 1, 2, p3
a4    fof      2000, p4+k1, 3500*k3, k2, 120, .003, .017, .005, 10, 1, 2, p3
a5    =        a1 + a2 + a3 + a4
      out      a5
      endin

f1 0 4096  9 1 1 0
f2 0 1024 19 .5 .5 270 .5
i1 0 12 100
i1 1 11 133
i1 2 10 150
e

Karplus-Strong

Karplus-Strong-algoritmen har også en egen boks, som heter pluck. Se Csound-manualen for detaljene, men pluck er enkel å bruke:

      sr = 32000
      kr = 200 
      ksmps = 160

      instr    1
a1    pluck    ampdb(p5),cpspch(p4),cpspch(p4),0,1
a2    linen    a1,.01,p3,p3*0.3
      out      a2
      endin

I partiturfilen bruker vi en ny fidus, nemlig tempo-kommandoen t som justerer alle tidspunkter og varigheter. t 0 90 betyr at tempo skal settes til 90 beats pr. sek. istedenfor de vanlige 60, fra tidspunkt 0.

t 0 90
i1 0   0.25 6.04 70
i1 0.6 .    6.07
i1 1.2 0.9  6.09
i1 +   0.25 6.04
i1 2.7 .    6.07
i1 3.3 0.3  6.10
i1 +   1.0  6.09
i1 4.8 0.25 6.04
i1 5.4 .    6.07
i1 6.0 0.9  6.09
i1 +   .    6.07 75
i1 7.8 4.   6.04 70
i1 .   .    5.04
i1 .   .    5.09
e


next up previous contents
Next: Lydbehandling Up: C-sound Previous: Flere triks

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