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