Sei sulla pagina 1di 8

Captulo 1 Primeiros Instrumentos

Csound tem uma capacidade de criao de sons apenas limitada pelo programador, e dada a abrangncia do programa iremos nesse captulo aprender sua estrutura e sintaxe, usando exemplos simples a partir de senides. Configurando o Sistema Explicaremos nessa seo como configurar o Csound para ser executado no Windows e no Unix. Antes de executar o Csound no Windows, as variveis de ambiente OPCODEDIR e OPCODEDIR64 devem estar definidas com o caminho das bibliotecas do Csound. Se o Csound est instalado por exemplo em c:\csound, tipicamente devem ser definidas as variveis de ambiente como:
O P C O D E D I R = c : \ c s o u n d \ p l u g i n s O P C O D E D I R 6 4 = c : \ c s o u n d \ p l u g i n s 6 4

Alm disso, o diretrio bin de Csound, no nosso exemplo c:\csound\bin, deve estar na varivel de ambiente PATH. Por exemplo, no Windows poderamos ter:
P A T H = % P A T H % ; C : \ c s o u n d 5 \ b i n

Para realizarmos essa configurao no Unix, devemos copiar o executvel csound para /usr/local/bin e as bibliotecas do Csound devem ser copiadas para /usr/local/lib. A Estrutura dos Arquivos-Fonte Csound tem uma estrutura em relao aos arquivos bastante verstil. Existem dois mtodos para se executar Csound, podemos usar o modelo de dois arquivos-fonte ou o modelo de um nico arquivo-fonte. Nesse primeiro contato com o programa, para entendermos melhor como ele funciona, iremos usar o modelo de dois arquivos-fonte separados. Nesse modelo so usados dois arquivos para que o Csound renderize um arquivo de sada de udio, esses dois arquivos so o arquivo de orchestra, que contm as definies dos instrumentos, e o arquivo de score, que contm a partitura da msica, com suas notas, duraes, intensidades, etc. O arquivo de sada do tipo .wav ou .aiff, para execues que no so em tempo real, ou a sada diretamente nos alto-falantes, quando no especificarmos um arquivo de sada. Convencionalmente quando vai-se executar o Csound com esses dois arquivosfonte, usado o mesmo nome para ambos, diferenciando-os pelas extenses .orc para o arquivo orchestra e .sco para o arquivo score. Por exemplo, se quisermos o arquivo de sada seno.wav a partir dos arquivos seno.orc e seno.sco, digitaremos algo como:
c s o u n d os e n o . w a vs e n o . o r cs e n o . s c o

Com a opo o dizemos qual arquivo de sada desejamos, nesse caso o arquivo de sada ser seno.wav , e em seguida dizemos qual o arquivo-fonte da orchestra, seno.orc, e o arquivo-fonte do score, seno.sco..

Primeiro exemplo: seno.wav Nesse primeiro exemplo queremos apenas produzir uma onda de seno na frequncia do L do diapaso, 440Hz, e atravs do exemplo poderemos ver como os arquivos de orchestra e score conversam entre si, para produzir o arquivo de sada. Aqui o arquivo score dir: 1. 2. 3. 4. A forma de onda inicial a ser usada, nesse caso uma senide. O instrumento a ser usado em cada nota O tempo de incio de cada nota A durao de cada nota

Como voc pode ver, o arquivo de score fornece os parmetros que o arquivo de orchestra usar, e o arquivo de orchestra define como esses parmetros sero usados para efetivamente gerar o som de sada. Aqui est o arquivo de score com sua sintaxe:
/ *s e n o . s c o* / ;T a b e l a# 1 :u m as i m p l e so n d ad es e n ou s a n d oG E N 1 0 . f101 6 3 8 41 01 ;T o c aoi n s t r u m e n t o# 1p o r2s e g u n d o s ,c o m e a n d oe m0s e g u n d o s i102 e / *s e n o . s c o* /

Fig. 1: seno.sco, o arquivo score para uma senide A sintaxe do arquivo score Na fig.1 temos os comentrios entre /* e */, ou aps ;. Na terceira linha temos o que chamado de f-table, ou function table, que uma tabela indicando a forma de onda que os instrumentos podero usar mais tarde. Nesse caso essa tabela conter os valores para a onda de seno. A sintaxe de uma f-table :
f n d i c e t e m p od ei n c i o t a m a n h o G E N # p a r m t r o 1p a r m e t r o 2. . .

Na Fig.1 temos essa sintaxe na linha:


f101 6 3 8 41 01

Ento olhando para a linha acima podemos ver que a f-table tem ndice 1, carregada aps 0 segundos, tem o tamanho de 16384 amostras (ou pontos), usa a rotina GEN10 para gerar a onda que ser armazenada na tabela, e tem o nmero 1 como primeiro parmetro para a GEN10. Todas as f-table como a acima so preenchidas com formas de onda gerada pelas rotinas GEN do Csound, que neste presente momento vo de GEN1 at GEN52, e para us-las basta especificar o seu nmero no quarto parmetro da declarao da f-table. Cada rotina GEN gera uma forma de onda diferente. As mais importantes, GEN1 e GEN10, respectivamente carregam um arquivo de udio ou senides em uma tabela. Estamos portanto usando a GEN10 no exemplo acima para preencher os 16384 pontos da f-table com os valores do seno. O parmetro 1 que vem aps o 10 diz que deve ser usada apenas uma onda de seno na tabela, e no vrios harmnicos sobrepostos. Vale ressaltar que o tamanho das f-tables so sempre em potncias de 2, i.e., 1024, 2048, 4096, 8192, 16384 pontos, etc. Aps as declaraes das f-tables temos a sintaxe da declarao de nota, que :

;p 1 p 2 p 3 p 4 p 5 in m e r od oi n s t r u m e n t o i n c i o d u r a o p a r m e t r o 1 p a r m e t r o 2 . . .

Novamente na Fig.1 temos essa declarao na linha:


i102

Portanto na sexta linha da Fig.1 temos que o instrumento 1 ser tocado por 2 segundos, comeando em 0 segundos, imediatamente no incio da msica. Finalmente a letra e indica que chegamos ao final do arquivo score. Vejamos agora como essas declaraes sero usadas no arquivo de orchestra, onde o som produzido. A sintaxe do arquivo orchestra Na fig. 2 temos a listagem do arquivo orchestra, que ser usado em conjunto com o arquivo score visto acima, para nosso primeiro instrumento:
/ *s e n o . o r c* / ;I n i c i a l i z aa sv a r i v e i sg l o b a i s . s r=4 4 1 0 0 k r=4 4 1 0 k s m p s=1 0 n c h n l s=1 ;I n s t r u m e n t o# 1 . i n s t r1 ;A m p l i t u d ed os i n a l k a m p=3 0 0 0 0 ;F r e q u n c i a k c p s=4 4 0 ;N m e r od af t a b l e . i f n=1 ;T o c ac o ma m p l i t u d e3 0 0 0 0ef r e q u n c i ad e4 4 0H zao n d ad os e n o ;a r m a z e n a d an at a b e l a1 . a 1o s c i lk a m p ,k c p s ,i f n ;M a n d aos o ma r m a z e n a d oe ma 1p a r aoa r q u i v od es a d a ,s e n o . w a v o u ta 1 e n d i n / *s e n o . o r c* /

Fig. 2 : seno.orc o arquivo orchestra para uma senide O cabealho no arquivo orchestra A listagem comea com o cabealho, presente em todo aquivo orchestra. Aqui declaramos as variveis globais sample rate (taxa de amostragem) como sr = 44100 amostras por segundo, kontrol rate (taxa de controle) como kr = 4410 amostras por segundo, e a razo sample rate dividido por control rate como ksmps = 10, e finalmente declaramos o nmero de canais como nchnls = 1, ou seja, o som ser mono. O Csound faz uma diferena entre taxa de amostragem sr e taxa de controle kr. A taxa de amostragem sr a quantidade de vezes por segundo que pontos de uma tabela so gerados para produzir o udio da onda contida nessa tabela. A taxa de controle kr a quantidade de vezes por segundo que uma onda modificada em um instrumento, tipicamente bem menor que a taxa de amostragem. Finalmente em ksmps temos a razo entre sr e kr.

Ento no precisamos que a cada ponto lido da tabela essa onda seja alterada, mas como no exemplo acima, essa onda pode ser modificada a cada 10 pontos lidos, j que a taxa de modificao kr a taxa de controle que 10 vezes menor que a taxa de amostragem, o que economiza em muito o processamento da onda e no afeta a percepo de quem ouve. Nomenclatura de Variveis As variveis usadas na orchestra podem ser estticas ou dinmicas, locais ou globais, dependendo do prefixo que possuem. Veremos em mais detalhes a seguir o que isso significa. No nosso aquivo orchestra temos o opcode oscil usado como:
a 1o s c i lk a m p ,k c p s ,i f n

No Csound as variveis podem ter qualquer nome, mas devem sempre comear com os prefixos k, a, i, ou g, e isto tem significado para o interpretador. As variveis com o prefixo i, como em ifn, tem espao para apenas um valor, isto , no so tabelas. uma varivel tradicional, como em outras linguagens de programao. Variveis com o prefixo k, como em kamp, so variveis dinmicas que so atualizadas automaticamente com a frequncia da taxa de controle, em nosso exemplo ela lida 4410 vezes por segundo, avanando um ponto na varivel a cada leitura. Essas variveis so ditas k-rate , pois seguem a taxa de controle, como no exemplo de kr = 4410. Tecnicamente essas variveis so simples tabelas, e Csound avana lendo kr pontos dessa tabela por segundo, e elas so criadas com tamanho suficiente para durar durante toda a nota, fornecendo novos pontos. So normalmente usadas para controlar e modificar parmetros de uma onda, como por exemplo alterando a amplitude dessa onda ao longo da durao da nota. Aqui kamp no tem um valor fixo, mas pode ser uma tabela com valores entre 0 e 30000. Ento o oscilador ir reproduzir uma onda que comea com amplitude 0 e cresce at a amplitude final 30000. Variveis com o prefixo a, como em a1, so variveis dinmicas do tipo arate , e so similares s variveis k-rate, mas so atualizadas segundo a taxa de amostragem, em nosso exemplo, na taxa de sr = 44100 vezes por segundo. Pela sua elevada fidelidade de som e alto custo computacional, so usadas apenas para sinais de udio, ou o sinal final que viremos a ouvir. Podemos ainda multiplicar, por exemplo, uma vrivel k-rate de 100 pontos por uma varivel a-rate de 1000 pontos, e elas geraro uma varivel a-rate como uma tabela de 1000 pontos modificada a cada 10 pontos. Todas essas vriveis so locais e existem apenas dentro do instrumento. Se quisermos que uma varivel seja global e vista por todos os instrumentos, devemos declar-la no cabealho da seo orchestra, e usar o prefixo g antes de qualquer outro prefixo. Nossas variveis usadas acima ficariam ento gifn, gkamp e ga1, e deveriam estar definidas no cabealho da orchestra. Declarao do Instrumento Logo depois do cabealho vem a declarao de incio do nosso primeiro instrumento com a palavra-chave instr seguida do nmero do instrumento, nesse caso 1.

Por questo de legibilidade usamos aqui uma boa prtica: definimos os parmetros kamp, kcps e ifn como variveis antes de us-los no opcode oscil. O opcode oscil tem como parmetros respectivamente a amplitude, a frequncia e a forma de onda a ser usada. Como vimos antes em oscil os parmetros kamp e kcps so variveis de controle, e ifn um parmetro de inicializao. No arquivo orchestra vemos que a amplitude foi definida como 30000, a frequncia como 440 Hz e a forma de onda indicada atravs do ndice 1 da f-table. Como j armazenamos no arquivo score uma senide na f-table 1, o opcode oscil aqui apenas processar essa forma de onda para ter amplitude 30000 e frequncia 440 Hz, uma nota de L no diapaso. No lado esquerdo a onda de sada armazenada na varivel a1. Na linha seguinte o opcode out grava a onda armazenada em a1 no arquivo de sada especificado na linha de comando, seno.wav , ou manda o sinal diretamente para as caixas de som, se nenhum arquivo de sada fr especificado na linha de comando. Finalmente no arquivo orchestra temos a declarao de fim de instrumento, endin. Ento ao executarmos esses dois arquivos obteremos um arquivo seno.wav que contm o som de uma senide a 440 Hz tocada por 2 segundos. Apesar da simplicidade desse primeiro exemplo, ele teve o propsito de esclarecer vrias questes em relao ao que feito no arquivo score e no arquivo orchestra. Note que o mesmo arquivo orchestra pode ser usado para vrios arquivos scores diferentes, um mesmo instrumento tocando vrias partituras diferentes. Parmetros de Performance e de Inicializao Como dito acima em oscil os parmetros kamp e kcps so dinmicos, isso quer dizer na terminologia do Csound que eles so parmetros de performance, ou seja, podem ser mudados em tempo de execuo. O outro tipo possvel de parmetros so os parmetros de inicializao, que podem ter apenas um valor e so definidos assim que a nota iniciada. No caso de oscil, o parmetro ifn de inicializao.

Integrando os arquivos orchestra e score: o arquivo unificado .CSD Falamos no incio do captulo que havia duas maneiras de executar o Csound: com dois arquivos-fonte orchestra e score separados, ou com um nico arquivo-fonte. Vamos ver agora a segunda maneira. primeira vista o uso de arquivos orchestra e score bastante intuitivo, pois so isolados as duas principais etapas de renderizao do Csound. Entretanto o uso constante do programa, fez com que fsse desenvolvido o formato de um nico arquivo, com sees para a orchestra e para o score, tornando-se assim um formato mais compacto e fcil de se organizar quando se tem muitos arquivos. Trata-se do formato .CSD, que contm em um s arquivo trs sees: CsOptions para opes de linha de comando, CsInstruments , para os instrumentos que eram armazenados no arquivo orchestra, e CsScore, a seo que conter o que era armazenado no arquivo score. Assim, nosso exemplo anterior seno.orc e seno.sco se tornariam um s arquivo CSD, como vemos na figura 3:
< C s o u n d S y n t h e s i z e r > < C s O p t i o n s >

os e n o . w a v < / C s O p t i o n s > < C s I n s t r u m e n t s > ;I n i c i a l i z aa sv a r i v e i sg l o b a i s . s r=4 4 1 0 0 k r=4 4 1 0 k s m p s=1 0 n c h n l s=1 ;I n s t r u m e n t o# 1 . i n s t r1 ;A m p l i t u d ed os i n a l k a m p=3 0 0 0 0 ;F r e q u n c i a k c p s=4 4 0 ;N m e r od af t a b l e . i f n=1 ;T o c ac o ma m p l i t u d e3 0 0 0 0ef r e q u n c i ad e4 4 0H zao n d ad os e n o ;a r m a z e n a d an at a b e l a1 . a 1o s c i lk a m p ,k c p s ,i f n ;M a n d aos o ma r m a z e n a d oe ma 1p a r aoa r q u i v od es a d a ,s e n o . w a v o u ta 1 e n d i n < / C s I n s t r u m e n t s > < C s S c o r e > ;T a b e l a# 1 :u m as i m p l e so n d ad es e n ou s a n d oG E N 1 0 . f101 6 3 8 41 01 ;T o c aoi n s t r u m e n t o# 1p o r2s e g u n d o s ,c o m e a n d oe m0s e g u n d o s i102 e < / C s S c o r e > < / C s o u n d S y n t h e s i z e r >

Fig.3: seno.csd, nosso primeiro arquivo csd, nesse caso a verso exata em seno.csd dos arquivos anteriores seno.orc e seno.sco. Note que alm da orchestra e do score ficarem encapsulados nas sees CsInstruments e CsScore , agora a nossa antiga opo de linha de comando -o seno.wav fica dentro da seo CsOptions , e nossa linha de comando para executar o arquivo se reduz para:
c s o u n ds e n o . c s d

Daqui para frente usaremos apenas arquivos CSD, mas tenham em mente que muitos usurios ainda usam os formatos orchestra e score, e esse formato compatvel com qualquer verso de Csound. Especificao de parmetros e converso de valores No arquivo anterior seno.csd as nicas informaes que passamos do score para a orchestra so o nmero do instrumento, o tempo de incio da nota e sua durao. Esses trs parmetros so obrigatrios em qualquer score, e so referenciados na seo

orchestra a respectivamente por p1, p2sendo e p3. executada, Assim se quisermos que uma varivel idur contenha durao da nota que est basta declarar dentro da seo orchestra a linha:
i d u r=p 3

Esses trs primeiros parmetros so reservados pelo Csound, assim p1 sempre o nmero do intrumento, p2 o tempo de incio da nota em segundos e p3 a durao em segundos. Mas podemos definir qualquer nmero de parmetros adicionais, comeando por p4. Em seno.csd definimos a frequncia do oscilador dentro da seo orchestra atravs da declarao kcps = 440. Seria melhor se nosso instrumento pudesse tocar qualquer frequncia, e pudssemos especificar essa frequncia na seo score, dando uma frequncia diferente a cada nota do instrumento. At aqui temos usado sempre a frequncia fixa de L 4, isto , 440 Hz, mas usaremos agora a frequncia como um parmetro dado pelo score. Se tornaria muito trabalhoso definir as notas musicais pela frequncia em Hertz, ento usaremos o conversor de valores cpspch, que tem como parmetro a nota em octave-point-pitchclass, que um formato intuitivo para definir notas. Nesse formato valores inteiros como 7.00, 8.00, 9.00 definem a oitava em que se est, e as duas casas decimais definem a nota dentro da oitava. Temos por exemplo que 7.00 o D central (C3), e que 7.01 o D sustenido nessa oitava (C3#), e 7.02 o R (D3), e etc. Assim cada centsimo a mais corresponde a um semitom acima, e portanto nesse exemplo para cobrir as doze notas dessa oitava haver a variao entre 7.00 e 7.11. Pode-se especificar tambm milsimos como 7.015 para a nota um quarto de tom entre C#3 e D3, em composies microtonais. Veja como ficar nosso arquivo cpspch.csd, usando essa notao para diferentes notas renderizadas pelo instrumento. Usando a notao octave-point-pitch-class tocaremos a escala de D Maior em nosso oscilador, e dentro da orchestra faremos a converso dessa notao em Hertz usando cpspch.

< C s o u n d S y n t h e s i z e r > < C s O p t i o n s > oc p s p c h . w a v < / C s O p t i o n s > < C s I n s t r u m e n t s > ;I n i c i a l i z aa sv a r i v e i sg l o b a i s . s r=4 4 1 0 0 k r=4 4 1 0 k s m p s=1 0 n c h n l s=1 ;I n s t r u m e n t o# 1 . i n s t r1 ;A m p l i t u d ed os i n a l k a m p=3 0 0 0 0 ;F r e q u n c i ae s p e c i f i c a d ap e l os c o r e k c p s=c p s p c h ( p 4 ) ;N m e r od af t a b l e . i f n=1 ;T o c ac o ma m p l i t u d e3 0 0 0 0ef r e q u n c i ad a d ap e l os c o r eao n d ad os e n o ;a r m a z e n a d an at a b e l a1 . a 1o s c i lk a m p ,k c p s ,i f n

; M a n d aos o ma r m a z e n a d oe ma 1p a r ao sa l t o f a l a n t e s o u t a 1 e n d i n < / C s I n s t r u m e n t s > < C s S c o r e > ;T a b e l a# 1 :u m as i m p l e so n d ad es e n ou s a n d oG E N 1 0 . f101 6 3 8 41 01 ;T o c aoi n s t r u m e n t o# 1c o mc a d an o t ad u r a n d ou md c i m od es e g u n d oe ;p e r c o r r e n d ot o d aae s c a l ad eD m a i o r . i100 . 18 . 0 0 i10 . 10 . 18 . 0 2 i10 . 20 . 18 . 0 4 i10 . 30 . 18 . 0 5 i10 . 40 . 18 . 0 7 i10 . 50 . 18 . 0 9 i10 . 60 . 18 . 1 1 i10 . 70 . 19 . 0 0 e < / C s S c o r e > < / C s o u n d S y n t h e s i z e r >

Fig. 4: cpspch.csd

Potrebbero piacerti anche