Csound Lång historia, föregångare (Music 4), tidigt 60-tal programstyrda oscillatorer som sammankopplas till instrument i en orkester -fil (.orc) en notfil ( score.sco) anger när och hur instrumenten skall spelas allt i textformat, enkelt add redigera och generera alla detaljer synliga, grötig syntax, full frihet Csound exempel Enklast att titta på färdiga exempel och modifiera dem resten byggt på kapitel 1 i Richard Boulangers Csound Book, finns fritt på nätet alla exempel finns också nedladdningsbara gör föreslagna övningar och titta vidare på färdiga komplexa exempel 1
Instrument / orkester Instrument byggs upp av operatorer som har opcode -namn i orc-filen opcodes har insignaler (parametrar) 10000 är amplitud (32767 max) 440 är tonhöjd/frekvens f1 är den vågtabell som valts åt oscil de har en utsignal som namnges (a1) alla opcodes har varsin manualsida (finns online) Allt beskrivs i text: Instrument ; semikolon inleder kommentarer ; som csound struntar i ; Ur filen 101.orc: a1 oscil 10000, 440, 1 out a1 2
Instrument Det behövs lite runtomkring-information komplett orkesterfil1 101.orc med bara ett enda instrument sr = 44100 ; sample rate kr = 4410 ;control rate ksmps = 10 ;sample/control nchnls = 1 ;no of out channels instr 101 ;instr number a1 oscil 10000, 440, 1 out a1 ;instr end Notfil (score) Innehåller info om när instrument skall spela: fil 101.sco (samt ifyllnad definition av vågtabeller, inte så logiskt!) f 1 0 4096 10 1 ; fyll i vågtabell 1 vid tid 0 med en tabell ; med 4096 samples sinuskurva (10:an) ; endast grundtonen (1:an) ; inst start duration (tid i sekunder) i 101 0 3 3
Fler instrument - FM En frekvensmodulerad oscillator ger mycket övertoner billigt (samma noter och vågtabell som tidigare funkar) 1 är bärfrekvens (440 * 1) 2 är modulatorfrekvens (440 *2 ) 3 är modulationsindex 1 är vågtabellnummer instr 102 ;SIMPLE FM a1 foscil 10000, 440, 1, 2, 3, 1 out a1 Fler instrument: pluck Strängsimulering med Karplus-Strong algoritm Parentes: namnet på a-signalen kan heta vad somhelst men skall börja på a instr 104 asig pluck 10000, 440, 440, 2, 1 out asig Behöver mera krut i vågtabellen i scorefilen f 2 0 4096 10 1.5.333.25.2.166.142.125.111.1.09.083.076.071.066.062 i 104 0 3 4
Fler instrument: loscil En sample-spelare instr 106 ar loscil 10000, 440, 4 out ar Vågtabellen inläst från ljudfil f 4 0 0 1 "sing.aif" 0 4 0 i 106 0 2.3 Fler instrument: rand Helt slumpmässiga samples, ger vitt brus instr 1111 abrus rand 10000 out abrus Behöver ingen vågtabell i score-filen! i 1111 0 2 5
Exempel färdigt instrument: shaker Just detta instrument behöver ingen vågtabell, en del andra är helt beroende av dem instr 2222 a1 shaker 10000, 440, 8, 0.99, 7 out a1 Ingen vågtabell behövs i score-filen i 2222 0 2 Vågtabeller Vågtabeller används av instrumenten, men genereras i score-filer med f-satser funktionerna som genererar dem kallas traditionellt för GEN vilken GEN som används ges som fjärde parameter i f-satserna exempel GEN10 användes för sinus, GEN1 användes för ifyllnad från fil oftast bäst att titta på exempel 6
Parametrar från score-filen: p-fields Instrumentens parametrar kan ges värden från score-filen hittills har parametrarna varit statiska, samma hela tiden varje rad i score-filen numrerar sina kolumner i 1 0 3 440 8000 ; p1 p2 p3 p4 p5 p1, p2 och p3 har fast betydelse: instrument, starttid respektive duration, p4 och uppåt har fria betydelser, t ex kan p4 betyda tonhöjd Användning av p-fält i instrument Hur ett visst p-fält (p4 och uppåt) används måste man ta reda på genom att studera instrumentet p5 styr tonhöjd här p4 styr amplitud här instr 101 a1 oscil p5, p4, 1 out a1 7
Envelop Ett instrument har nästan alltid en envelop, dynamisk variation. instr 113 ; SIMPLE OSCIL WITH ENVELOPE k1 linen p4, p7, p3, p8 ; p3=dur, p4=amp, p7=attack, p8=release a1 oscil k1, p5, p6 ; p5=freq, p6=waveshape out a1 linen genererar en envelop som styr ljudstyrkan genom k1 till oscils amplitudingång i 113 2.5 2 10000 220 2.01 1.99 Envelopstyrning: linen linen är en enkel styrsignalgenerator k1 linen p4, p7, p3, p8 p4 p7 p3 p8 8
k- och a-signaler Signaler som börjar på a beräknas med ljudsamplefrekvens (oftast 44100 Hz) Styrsignaler (k-signaler) beräknas inte så ofta eftersom det är onödigt (ofta 4410 Hz) Det finns även i-signaler, beräknas endast vid varje tons start bra sätt att ge vettigare namn på parametrar Flera oscillatorer 120.orc 9
120.orc instr 120 idur = p3 iamp = ampdb(p4) ifrq = cpspch(p5) ifun = p6 iatk = p7 irel = p8 iatkfun= p9 kenv envlpx iamp, iatk, idur, irel, iatkfun,.7,.01 asig3 oscil kenv, ifrq*.99, ifun asig2 oscil kenv, ifrq*1.01, ifun asig1 oscil kenv, ifrq, ifun amix = asig1+asig2+asig3 out amix display kenv, p3 120.sco ;Function 2 uses the GEN10 subroutine to compute the first sixteen partials of ;a sawtooth wave ;Function 9 uses the GEN05 subroutine to compute an exponential Attack for use ;with envlpx ;Function 10 uses the GEN05 subroutine to compute an exponential Attack for use ;with envlpx f 2 0 4096 10 1.5.333.25.2.166.142.125.111.1.09.083.076.071.066.062 f 9 0 513 5.001 128.8 128.6 256 1 f 10 0 513 5.01 64 1 64.5 64.99 64.6 64.98 64.7 64.97 32.8 32 1 ;ins strt dur amp frq fn atk rel atkfn ;================================================== i 120 0 2 73 6.09 2.5 1 9 i 120 2 2 76 6.08 2.5 1 10 i 120 4 2 77 6.06 2.5 1 9 i 120 6 2 82 6.04 2.5 1 10 i 120 8 5 75 5.09 2.5 1 9 i 120 8.2 5 74 6.04 2.5 1 10 i 120 8.4 5 70 7.01 2.5 1 9 i 120 8.6 5 68 8.09 2.5 1 10 10
Hjälpfunktioner ampdb(decibel) konverterar från decibel till amplitudstyrka i Csound cpspch(not) omvandlar skalans noter till frekvens i Hz formater är oktav.halvtonsteg ettstrukna oktaven är nr 8, tonen C är 00 alltså är ettstrukna C = 8.00, ettstrukna C = 8.09 (=440 Hz) Filter Många opcodes handlar om att modifiera ljud: filtrera Exempel: skära bort/förstärka vissa frekvenser fördröjning rumseko 11
Filtrerat brus 128.orc Filtrera frekvenser 133.orc 12
Efterklang - enkelt eko Fördröj en signal och återkoppla den Eko-filter - comb 135.orc 13
Eko, med olika fördröjningar 135.orc instr 135 idur = p3 iamp = p4 igain = p5 iloopt = p6 kenv linen iamp,.01, idur,.01 ain diskin "hellorcb.aif", 1.1 acomb comb ain*kenv, igain, iloopt, 0 out ain+acomb Eko, med olika fördröjningar 135.sco ; ins st dur amp gain looptime resonant frq i 135 0 5.4 10.5 ; 1/.5 = 2 Hz i 135 5 5.3 5.25 ; 1/.25 = 4 Hz i 135 10 5.3 5.125 ; 1/.125 = 8 Hz i 135 15 5.2 2.0625 ; 1/.0625 = 16 Hz i 135 20 5.2 2.03125 ; 1/.03125 = 32 Hz i 135 25 5.2 2.015625 ; 1/.015625 = 64 Hz i 135 30 5.04 2.001 ; 1/.001 = 1000Hz 14
Rumsklang (reverb) En rumsklang skall normalt inte gälla inom instrumentet låt reverbet vara ett eget instrument som lyssnar på de andra instrumenten instrument kan skicka signaler mellan sig via globala signalnamn, börjar gå ga- gk- Rumsklang 137.orc 15
och hur jobbar man nu då? Låna och modifiera andras instrument Gör bara delar av ljud eller kompositioner i Csound Låt program generera score-filer enligt nåt system Använd front-end program, leta på nätet Nästa avdelning - PD rita och kombinera ljudobjekt och operationer, i stället för att skriva dem i text bekvämt på ett sätt, men lite mindre generellt ändra i realtid kort smakprovsdemo 16