Instrumentet i forrige kapittel kunne bare spille en fast frekvens med en fast lydstyrke. Det må vi fikse. Parametre i instrumentet kan styres fra verdier som vi oppgir i partiturfilen. Parametrene til i-kommandoene i partiturfilen heter p1, p2 osv. De tre første p-feltene har en fast betydning:
(se eksemplet i forrige avsnitt).
De resterende p-feltene (p4, p5 etc.) kan vi benytte som vi vil. Vi kan la p4 styre frekvens og p5 amplityde. Det finnes en funksjon som heter cpspch som gjør om fra formatet oktav.pitchklasse til en frekvens i Hz. Funksjonen ampdb gjør om fra en dB-verdi til en amplityde.
Orkesterfilen kan da skrives slik:
sr = 16000 kr = 1000 ksmps = 16 nchnls = 1 instr 1 a1 oscil ampdb(p5),cpspch(p4),1 out a1 endin
Og partiturfilen kan se slik ut (legg merke til at semikolon markerer en kommentar):
f1 0 4096 10 1 ; p2 (start) p3 (varighet) p4 (frekvens) p5 (styrke) i1 0 0.1 8.00 50 i1 0.2 0.1 8.00 55 i1 0.4 0.1 8.00 60 i1 0.8 0.1 8.04 65 i1 1.2 0.1 8.07 70 i1 1.6 1 9.00 70 i1 1.6 1 9.04 70 i1 1.6 1 9.07 70 e
Vi fortsetter å bygge ut instrumentet fra forrige avsnitt. For det første vil vi gjerne legge en omhyllingskurve (envelope) på hver tone. Vi blar litt i Csound-manualen, og finner "boksen" (enhetsgeneratoren) linen. Formatet er definert slik:
kr linen kamp,irise,idur,idec ar linen xamp,irise,idur,idec
Typisk Csound-kryptisk! Hva betyr dette? Det man forsøker å få fram er at linen kan produsere sin output enten med "kontrollrate" eller med "audio rate" (samplingfrekvensen). Attack-tiden ("rise") kan oppdateres med "initialiseringsrate", dvs. hver gang instrumentet kalles opp fra en i-kommando i partituret. Det sammet gjelder "dur" og "dec" (release-tiden). Amplityden kan oppdateres med kontrollrate eller langsommere dersom output oppdateres med kontrollrate. Hvis output oppdateres med audio rate, kan amplityden oppdateres med alle slags hastigheter (angitt med "x").
Vi velger k-versjonen, og sender output fra linen inn i amplityde-parameteren til oscillatoren. I tillegg lar vi kurveform-parameteren styres fra et nytt p-felt, slik at vi kan endre klangfargen for hver note:
sr = 16000 kr = 4000 ksmps = 4 nchnls = 1 instr 1 k1 linen ampdb(p5),0.05,p3,p3*0.4 a1 oscil k1,cpspch(p4),p6 out a1 endin
I partiturfilen definerer vi en funksjonstabell nummer 2 ved hjelp av GEN10, med et rikere spektrum (8 overtoner), og legger til et nytt p-felt p6. I tillegg utnytter vi en nyttig finesse i syntaksen, nemlig carry-tegnet punktum. Et punktum betyr at vi skal bruke samme verdi som i forrige linje. De siste punktum på en linje kan utelates. Det finnes flere andre carry-tegn, bl.a. pluss, som betyr at vi skal bruke p2+p3 fra forrige linje, dvs. tidspunktet for forrige notes slutt (brukes ikke her).
f1 0 4096 10 1 f2 0 4096 10 1 .6 .3 .1 .3 .6 .3 .1 ; p2 (start) p3 (varighet) p4 (frekvens) p5 (styrke) p6 (kurve) i1 0 0.1 8.00 50 1 i1 0.2 . . 55 i1 0.4 . . 60 i1 0.8 . 8.04 65 i1 1.2 . 8.07 70 i1 1.6 1 9.00 . 2 i1 . . 9.04 i1 . . 9.07 e