Dette kapittelet presenterer endel enkle Csound-instrumenter som demonstrerer ulike syntesemetoder.
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 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 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
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
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-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