Binvnidos a sta introducción al lnguaj d síntsis sonora CSound. El objtivos d st documnto s facilitar los primros pasos con un lnguaj muy ficaz para la gnración y l procsado digital d sonido. Con st lnguaj s ralizarán las siguints prácticas d la part d sonido d la asignatura d Tcnología Multimdia. El documnto ofrc una guía muy dtallada d un jmplo n lnguaj CSound. Las parts qu no son indispnsabls pro qu ofrcn información complmntaria stán ncrradas ntr corchts y pudn sr omitidas a discrción. Dónd consguirlo http://csound.sourcforg.nt/#downloads La última vrsión (rcomndada) s la 5.07, (justo dl 1 d octubr d 2007). Hay documntación o un manual? Sí: http://csound.sourcforg.nt/#documntation Datos básicos CSound s un lnguaj spcializado d síntsis sonora. No s un lnguaj d propósito gnral y por tanto no s adcuado para otras taras. CSound compila fichros d tipo txto qu continn programas scritos n lnguaj CSound y produc sonido n timpo ral o un fichro d audio para su rproducción postrior. Cada fichro n lnguaj CSound contin las instruccions ncsarias para la gnración dl sonido rsultant y pud sr crado con cualquir ditor d txtos. Normalmnt, un fichro CSound contin instruccions para la dfinición d instrumntos d la orqusta y una lista o partitura d notas o vntos sonoros con los datos qu intrprtará la orqusta. CSound s multi-plataforma y stá disponibl para todos los sistmas oprativos, como Linux y Mac OS X, incluso para Windows. Un fichro n lnguaj CSound pud sr compilado n cualquir plataforma y producirá l mismo rsultado sonoro.
PRIMER EJEMPLO Un fichro CSound vacío sólo contin una sri d tiqutas XML qu marcan las distintas sccions: Listado: jmplo1.csd <CsoundSynthsizr> <CsOptions> </CsOptions> <CsInstrumnts> </CsInstrumnts> <CsScor> </CsScor> </CsoundSynthsizr> CSound: softwar libr d síntsis sonora Ahora irmos rllnando una a una las distintas sccions. Documntarmos con comntarios prcdidos por ; cada una d las línas qu añadamos 1) La scción d opcions nos prmit añadir bandras y datos para l momnto d la compilación. Podmos djarla n blanco sin problmas. [En nustro caso añadirmos simplmnt lo siguint: <CsOptions > ;salida a un archivo WAV d nombr jmplo1.wav -o jmplo1.wav </CsOptions > qu indica al compilador CSound qu guard l rsultado sonoro n un archivo llamado jmplo1.wav con l formato WAV d Microsoft.] [Vrmos qu n muchos casos los ajusts dl compilador CSound tndrán prioridad sobr las opcions qu figuran n sta scción] 2) La scción d instrumntos contin la codificación n lnguaj CSound d los procsos matmáticos qu vamos a ralizar para gnrar los sonidos. Para llo usarmos variabls y opcods qu s l nombr qu rcibn las funcions n CSound. <CsInstrumnts> ;sampl rat sr = 44100 ;control rat ksmps = 1 ;numbr of channls nchnls = 1 </CsInstrumnts> En primr lugar hmos añadido una cabcra qu asigna valors a trs variabls rsrvadas (sr, ksmps y nchnls) ncsarias para la compilación. sr significa sampl rat, frcuncia d mustro y nos indica cuántas mustras por sgundo s gnrarán. Normalmnt s usa l valor d 44100 qu corrspond con 2
la frcuncia d mustro dl CD y qu proporciona una buna rspusta n frcuncia* ksmps significa númro d mustras por bloqu d control, y da ida d la vlocidad d actualización dl cálculo d las variabls con prfijo k-. [Normalmnt y con los ordnadors actuals l valor s 1 qu significa qu las variabls k- s actualizan con cada mustra.] nchnls significa numbr of channls, númro d canals dl sonido rsultant: 1 = mono, 2 = stéro, tc. Ya stamos listos para crar nustro instrumnto gnrador d sonido. ;dfinición dl instrumnto 1 instr 1 ;asignamos a la variabl iamplitud l valor d p4 iamplitud = p4 ;asignamos a la variabl ifrquncy l valor d p5 ifrquncy = p5 ;asignamos a la variabl iphas l valor 0 iphas = 0 ;asignamos a la variabl asound la salida dl opcod oscils ;todos los parámtros d ntrada stán a la drcha ;las variabls d salida a la izquirda asound oscils iamplitud, ifrquncy, iphas ;nviamos asound a la salida out asound ;fin d la dfinición dl instrumnto ndin Finalmnt cramos una partitura con una sola nota: CSound: softwar libr d síntsis sonora <CsScor> ;p1 indica qu la nota s crará con l instrumnto ;p2 indica qu la nota mpzará para timpo=0 ;p3 indica qu la nota durará 5 sgundos ;p4 s 10000. El significado dpnd d la dfinición dl instrumnto 1 ;p5 s 440 ;la indica nd, fin d partitura </CsScor> 3
El rsultado unindo las distintas sccions s: Listado: jmplo1.csd <CsoundSynthsizr> <CsOptions > ;salida a un archivo WAV d nombr jmplo1.wav -o jmplo1.wav </CsOptions > <CsInstrumnts> ;sampl rat sr = 44100 ;control rat ksmps = 1 ;numbr of channls nchnls = 1 CSound: softwar libr d síntsis sonora ;dfinición dl instrumnto 1 instr 1 ;asignamos a la variabl iamplitud l valor d p4 iamplitud = p4 ;asignamos a la variabl ifrquncy l valor d p5 ifrquncy = p5 ;asignamos a la variabl iphas l valor 0 iphas = 0 ;asignamos a la variabl asound la salida dl opcod oscili asound oscils iamplitud, ifrquncy, iphas ;nviamos asound a la salida d audio out asound ;fin d la dfinición dl instrumnto 1 ndin </CsInstrumnts> <CsScor> ;l valor d p1 indica qu la nota s crará con l instrumnto 1 ;l valor d p2 indica qu la nota mpzará para timpo=0 ;l valor d p3 indica qu la nota durará 5 sgundos ;l valor d p4 s 10000 ;l valor d p5 s 440 ; indica fin d la partitura </CsScor> </CsoundSynthsizr> 4
LAS VARIABLES EN CSOUND Como s ha visto, todas las variabls n CSound van prcdidas d una o dos ltras. La ltra i indica qu la xprsión d la variabl s valuará una sola vz por cada nota qu s toqu con l instrumnto. En nustro primr jmplo, las variabls iamplitud ifrquncy son inicializadas con los parámtros p4 y p5 procdnts d la partitura. Las variabls qu mpizan por a s rcalculan con la frcuncia marcada por la variabl d sistma sr, s dcir tantas vcs por sgundo como indiqu su valor. En nustro jmplo la variabl asound srá rcalculada 44100 vcs cada sgundo y su valor s nviará a la salida 44100 vcs. Las variabls qu mpizan por k s usan para valors qu no rquirn sr actualizados tan a mnudo como las variabls con a pro qu ncsitan modificars durant la duración d la nota. Un jmplo sría l cálculo d la nvolvnt pro sto lo vrmos postriormnt. [Las variabls qu mpizan por gi, gk o ga son variabls globals compartidas por todos los instrumntos]. LA PARTITURA Como hmos visto la partitura contin la información d las notas qu s compilarán. En nustro primr jmplo sólo tnmos una nota: ;la indica fin d partitura Vmos qu sta nota contin 5 parámtros. Los trs primros tinn un significado fijo n CSound: l valor d p1 simpr indica l instrumnto con l qu s jcutará la nota, l valor d p2 simpr indica l timpo al qu mpzará la nota, l valor d p3 simpr indica la duración n sgundos. Nustra nota contin dos parámtros adicionals, p4 y p5 qu (tradicionalmnt) l instrumnto 1 asigna a la amplitud y a la frcuncia, pro no hay ninguna razón para qu no los asign a otro propósito. Vamos a añadir una nota adicional a la partitura: i1 5 5 5000 220 La sgunda nota s intrprtará con l instrumnto 1, a partir dl sgundo 5, o sa justo dspués d la primra nota, durará 5 sgundos y tndrá una amplitud d 5000 y una frcuncia d 220. 5
CSOUND ES UN PROGRAMA Y UN LENGUAJE CSound s tanto l programa qu compila los fichros CSound como l nombr dl lnguaj d los fichros CSound. CSound s un programa opn-sourc y como tal su código funt stá disponibl librmnt. Pro compilar l CSound s otra cosa... Nosotros simpr usarmos las vrsions ya compiladas para l sistma oprativo Microsoft Windows o para Linux. COMPILAR O COMPILAR? Por qué dcimos qu CSound compila? CSound produc fichros d audio (aunqu stos s rproduzcan n timpo ral) como rsultado d la compilación d código scrito n lnguaj CSound. Pnsmos por jmplo n l Acrobat Radr, o n un cualquir otro visor d fichros PDF, qu compila fichros scritos n lnguaj PDF (un subconjunto dl lnguaj Postscript) y ofrc como rsultado fichros bitmap (d mapa d puntos, color o blanco y ngro) visualizabls n pantalla imprimibls por imprsora. Igualmnt GraphViz compila fichros scritos n lnguaj DOT para producir hrmosos grafos (por jmplo n formato PDF...) Como ya dijimos al principio, CSound no s un programa d propósito gnral: Vr http://n.wikipdia.org/wiki/domain-spcific_programming_languag 6
PRÁCTICA 2.-Introducción 1) Dscargar instalar l programa CSound. 2) Copiar n cualquir ditor d txto l contnido dl jmplo1.csd. Guardar con la xtnsión.csd 3) Ejcutar l programa CSound 5 GUI. Est programa proporciona una intrfac gráfica muy simpl al motor d CSound, qu s jcuta n la trminal. 4) Hacr clic n l botón marcado con... arriba a la izquirda. Esto nos prmit cargar un fichro.csd. Habilitar la ntrada/salida n timpo ral dl sonido (Raltim I/O) Hacr clic n l icono d sinttizar (play) 5) Dshabilitar la ntrada/salida n timpo ral dl sonido (Raltim I/O). Sinttizar d nuvo y comprobar qu s ha gnrado un fichro d sonido (normalmnt d tipo Microsoft WAVE). Abrirlo n l Audacity y rproducirlo. 6) Crar 3 nuvos documntos.csd qu contngan modificacions o nuvas cracions. Sugrncias: -Varias notas al mismo timpo con distintas frcuncias muy crcanas -Varias notas al mismo timpo con frcuncias qu guardn proporcions armónicas (frcuncia = f, 2*f, 3* f, tc) con distintas amplituds. Abrir los rsultados n l Audacity y ralizar l análisis spctral. -Lo mismo pro ntrando las notas paulatinamnt n timpos distintos y acabando todas juntas. También s pudn usar pausas ntr las notas -Crar los sonidos límits d la audición humana -Crar una scala d 7 notas (Do, R, Mi, Fa, Sol, La, Si) o cromática [sólo para alumnos con conocimintos musicals]. Pista: la proporción ntr dos sonidos d frcuncia f1 y f2 sparados por un smitono s la raíz docava d 2 = 1,059463094359. Por jmplo La4 = 440 Hz, La#4 = 1.06 *440 = 466 Hz 7) Sinttizar los sonidos corrspondints y guardarlos n archivos WAVE (wav). 7 17/10/2007