Sei sulla pagina 1di 50

CSOUND Manual Pblico de Referncia

___________________________________________________________________________

Suplemento - Tutoriais
Barry Vercoe, Media Lab MIT e colaboradores

Editado por John Fitch, Richard Boulanger, Jean Pich, e David Boothe

1986 - 1992 Massachusetts Institute of Technology. Todos os Direitos Reservados.

Traduo: Carlos Eduardo Mello Depto. de Msica, Universidade de Braslia Reviso: Flvio Teixeira

Aviso de Direitos Autorais


________________________________________________________________
1986, 1992 Massachusetts Institute of Technology. Todos os Direitos Reservados. Desenvolvido por Barry L. Vercoe no Estdio de Msica Experimental, Media Laboratory, MIT, Cambridge, Massachusetts, com apoio parcial da System Development Foundation e da National Science Foundation - Grant # IRI-8704665. A permisso para usar, copiar ou modicar esses programas e sua documentao para uso educacional e ns de pesquisa apenas, sem custo, ca concedida por esta licena, desde que este aviso de direitos autorais e permisso de uso apaream em todas as cpias e documentao de apoio. Para outros usos deste software, na forma original ou modicada, incluindo mas no somente para a distribuio integral ou em partes, ser exigida a autorizao prvia e especca do MIT. O MIT no faz quaisquer indicaes sobre a adequao deste software para qualquer m. O programa fornecido como , sem nenhuma garantia, expressa ou implcita. A verso original em Hipertexto do Manual do Csound do MIT foi preparada para o formato da Internet por Peter J. Nix, do Departamento de Msica de Universidade de Leeds e por Jean Pich da Faculdade de Msica da Universidade de Montreal. Esta edio impressa, em formato PDF (Adobe Acrobat) mantida por David M. Boothe. Os Editores reconhecem os direitos dos autores da documentao e dos programas originais, como indicados acima, e requerem que este aviso aparea onde quer que este material seja publicado. ___________________________________________________________________________

-2-

Colaboradores
___________________________________________________________________________ Alm do cdigo principal desenvolvido por Barry Vercoe no MIT, uma grande parte do cdigo do Csound foi modicado, desenvolvido e estendido por um grupo independente de programadores, compositores e cientistas. Os direitos sobre este cdigo pertencem aos seus respectivos autores: Mike Berry Eli Breder Michael Casey Michael Clark Perry Cook Sean Costello Richard Dobson Mark Dolson Rasmus Ekman Dan Ellis Tom Erbe John ftch Bill Gardner Matt Ingalls Richard Karpen Victor Lazzarini Allan Lee David Macintyre Peter Neubcker Marc Resiois Gabriel Maldonado Hans Mikelson Paris Smaragdis Greg Sullivan Robin White

Este manual foi compilado das fontes ociais do Manual do Csound mantidas por John ftch, Richard Boulanger, Jena Pich e David Boothe.

-3___________________________________________________________________________

Nota do Editor
___________________________________________________________________________ Aprender a usar o Csound pode ser uma experincia difcil. Os tutoriais contidos neste volume oferecem um primeiro empurro neste processo, e foram escritos por pessoas envolvidas na programao, expanso e manuteno do prprio cdigo do programa. Este volume foi idealizado como um complemento do Manual Pblico de Referncia do Csound, o qual indispensvel para o usurio do programa. Conra as sesses apropriadas do Manual de Referncia na medida em que trabalhar com estes tutoriais. Tente os exemplos voc mesmo(a). Estes exerccios lhe traro um conhecimento slido e fundamental sobre o software de sntese gratuito mais potente e disponvel hoje em dia. O Manual de Referncia e exemplos de orquestras e partituras esto disponveis no mesmo local onde voc conseguiu este volume. A fonte denitiva de informao sobre o Csound o livro The Csound Book: Perspectives in Software Synthesis, Sound Design , Signal Processing and Programming editado por Richard Boulanger e prestes a ser publicado pelo MIT Press, em Janeiro de 2000. Outra fonte til de informaes o site do Csound no MIT (MIT Csound FrontPage) no endereo: http://mitpress.mit.edu/e-books/csound/frontpage.html Finalmente, todos os usurios de Csound esto convidados a se inscrever na lista de e-mail do programa. aqui que se encontram discusses em andamento sobre quaisquer assuntos relacionados aos usurios de Csound, avisos de bug, anncios de novas verses, etc. Se voc tiver um problema com o Csound que no consegue resolver, geralmente existe algum nesta lista que pode ajud-lo. Para instrues sobre como se inscrever, mande um e-mail para csound-request@maths.ex.ac.uk. Na primeira linha da mensagem escreva: subscribe nome@servidor.de.email Aps a mensagem ser processada (aprox. 5 minutos), voc receber uma resposta com mais instrues. Siga estas instrues adicionais e seu e-mail ser incluido na lista do Csound. Aproveite sua experincia com o Csound. David M. Boothe, Dallas, Texas USA, Abril de 1999

-4-

Contedo
__________________________________________________________________________ Aviso de Direitos Autorais Colaboradores Nota do Editor Contedo 1. Um Guia Inicial: Barry Vercoe 1.1 O Arquivo Orquestra 1.2 O Arquivo Partitura 1.3 O Comando do Csound 1.4 Mais sobre a Orquestra 2. Um TOOTorial de Design de Instrumentos: Richard Boulanger 2.1 Introduo aos tutoriais 2.2 Toot 1: Tocar uma nota 2.3 Toot 2: Campos-P 2.4 Toot 3: Envelopes 2.5 Toot 4: Criando Chorus 2.6 Toot 5: Vibrato 2.7 Toot 6: Gens 2.8 Toot 7: Crossfade 2.9 Toot 8: Soundin 2.10 Toot 9: Reverberao Global em Estreo 2.11 Toot 10: Ruido Filtrado 2.12 Toot 11: Carry, Tempo & Sort 2.13 Toot 12: Tables & Labels 2.14 Toot 13: Fuso Espectral 2.15 Quando as Coisas Soam Errado 2.16 Sugestes para Futuros Estudos 3. Um Tutorial de Sntese FOF: J. M. Clarke 2 3 4 5 6 6 10 12 14 16 17 20 21 22 23 24 25 27 28 30 32 34 39 41 43 44 45

-5-

1. Um Guia Inicial
por Barry Vercoe, Massachusetts Institute of Technology
___________________________________________________________________________

1.1

O Arquivo Orquestra

O programa Csound roda a partir de dois arquivos bsicos: um arquivo orquestra e um arquivo partitura. O arquivo orquestra um conjunto de instrumentos que dizem ao computador como sintetizar um som; o arquivo partitura informa ao computador quando. Um instrumento uma coleo modular de sentenas que geram ou modicam um sinal; sinais so representados por smbolos, os quais podem ser conectados de um mdulo a outro. Por exemplo, as duas sentenas abaixo iro gerar um tom senoidal de 440Hz e mand-lo para um canal de sada.
asig oscil 10000, 440, 1 out asig

A primeira linha aciona um oscilador cujos dados de entrada so uma amplitude de 10000, uma frequncia de 440Hz e o nmero da forma de onda, e cuja sada o sinal de udio asig. A segunda linha recebe o sinal asig e o manda para um canal (implcito de sada). As duas linhas podem ser encapsuladas por um outro par de sentenas as quais identicam o instrumento como um todo.
instr 1 asig oscil 10000, 440, 1 out asig endin

Em geral uma sentena num arquivo de orquestra consiste de uma ao seguida por um conjunto de variveis de entrada e precedida por um smbolo. Sua ao processar os dados de entrada e depositar o resultado no sinal indicado pelo smbolo. O signicado das variveis de entrada depende da ao requisitada. O nmero 10000 acima interpretado como uma amplitude porque ocupa o primeiro espao de entrada de uma unidade oscil; 440 signica a frequncia em Hz porque assim que uma unidade oscil interpreta seu segundo argumento de entrada; o nmero da forma de onda indica indiretamente uma tabela de funo armazenada. Antes de chamarmos este instrumento na partitura, preciso preencher esta tabela com alguma forma de onda. O resultado (output) das computaes do Csound no um sinal de udio real, mas uma sequncia de nmeros os quais descrevem tal sinal. Quando escritos num arquivo de udio, esses nmeros podem ser posteriormente convertidos em som por um programa independente; por agora, vamos pensar em variveis como asig como

sinais de udio tangveis. Vamos agora acrescentar alguns recursos extras a este instrumento. Primeiramente permitimos que a altura do som seja denida como um parmetro na partitura. Os parmetros da partitura so representados por variveis da orquestra, as quais assumem diversos valores em notas sucessivas. Essas variveis so nomeadas sequencialmente: p1, p2, p3 etc. As primeiras trs tm signicado xo (N.T.: veja O Arquivo Partitura mais abaixo), enquanto que as restantes so denidas pelo usurio. As variveis de parmetro de maior importncia nos exemplos abaixo so: p3 = durao da nota corrente (sempre em segundos) p5 = altura da nota corrente (em unidade compatvel com a partitura e a orquestra) Assim, em...
asig oscil 10000, p5, 1

o oscilador recebe a altura da nota (presumidamente em cps) do parmetro de partitura de nmero 5. Se a partitura enviar valores de altura em unidades diferentes de ciclos-por-segundo (Hz), esse valores tm que ser convertidos antes do processamento. Um mtodo conveniente de codicao da partitura combina a representao da classe de nota, ou pitch-class (00 para D, 01 para D# etc.) com a representao de oitava (8 para a oitrava central, 9 para a oitava acima, etc.), resultando em valores tais como 8.00, 9.03, 7.11, etc. Por exemplo, a expresso cpspch(8.09) converte a nota l (acima do D central) em seu valor de frequncia correspondente. Do mesmo modo, a expresso cpspch(p5) primeiro l um valor de de p5 depois coverte o mesmo do formato oitava-nota para cps. Esta expresso pode ser inserida em nossa sentena de orquestra como
asig oscil 10000, cpspch(p5), 1

para controlar a frequncia atravs da partitura como desejvamos. A seguir, suponha que queiramos moldar a amplitude de nosso som com um aumento linear de 0 a 10000. Isto pode ser feito com uma nova sentena:
amp line 0, p3, 10000

Aqui, amp assume valores que movem de 0 a 10000 no decorrer do tempo p3 (durao da nota em segundos). O instrumento ca ento:

-7-

instr 1 amp line 0, p3, 10000 asig oscil amp, cpspch(p5), 1 out asig endin

O sinal amp no algo que se possa ouvir diretamente. Na verdade uma varivel cujo propsito controlar a amplitude do oscilador de udio. Apesar do oscilador de udio exigir uma grande resoluo no tempo para assegurar a boa delidade do som, um sinal de controle frequentemente no requer tanta resoluo. Assim, podemos utilizar outro tipo de sinal para este controle de amplitude:
kamp line 0, p3, 10000

no qual o resultado um novo tipo de sinal kamp. Os nomes de sinal at este ponto tm sempre comeado com a letra a (signicando um sinal de udio); este outro comea com a letra k (de controle). Sinais de controle so idnticos a sinais de udio, diferindo apenas em sua resoluo no tempo, Um sinal de controle muda seus valores com menos freqncia que um sinal de udio, e por isso pode ser gerado mais rapidamente. Utilizando um desses sinais, nosso instrumento passa a ter a seguinte forma:
instr 1 kamp line 0, p3, 10000 asig oscil kamp, cpspch(p5), 1 out asig endin

Este instrumento provavelmente produzir um som idntico ao da verso anterior, porm ser processado em menos tempo. Em geral, instrumentos recebem valores de constantes e ou de parmetros, e utilizam clculos e processamento de sinal para gerar inicialmente sinais de controle e nalmente sinais de udio. importante lembrar deste uxo para se montar instrumentos ecientes e com execuo mais rpida. Estamos prontos para montar nosso primeiro arquivo orquestra. Digite o texto abaixo usando um editor de texto e d ao arquivo o nome intro.orc. Observe que possvel, aps um caracter de ponto-e-vrgula ( ; ), introduzir comentrios, que se estendem at o nal da linha. Podem haver tambm linhas em branco ou linhas consistindo exclusivamente de comentrios (N.T.: todos esses itens so ignorados no momento do processamento). Uma vez que o arquivo orquestra esteja salvo em disco, podemos ento considerar o arquivo partitura que ir toc-lo.

-8-

; intro.orc sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; ; ; ; velocidade de sampliamento - 44.1 KHz velocidade de controle - 4,41 KHz numero de amostras (samples) num periodo de controle (sr/kr) numero de canais na saida de audio

instr 1 kctrl line 0, p3, 10000 asig oscil kctrl, cpspch(p5), outs asig endin

; 1 ; ;

; inicio do instrumento contorno (envelope) da amplitude ; oscilador de audio enviar sinal a sada m do instrumento

-9-

1.2

O Arquivo Partitura

A nalidade do arquivo partitura dizer aos instrumentos quando tocar e com que valores de parmetro. A sintaxe da partitura diferente da sintaxe da orquestra, mas, assim como o arquivo orquestra, o arquivo partitura tambm permite uma sentena por linha e comentrios aps o ponto-e-vrgula. O primeiro caracter numa sentena da partitura chamado de opcode, e determina uma solicitao de ao; os dados restantes consistem de campos de parmetros numricos (campos-p - pelds) a serem utilizados por aquela ao. Suponhamos que se queira que um gerador de som senoidal toque uma escala pentatnica a partir do D sustenido acima do D central, com notas de meio segundo de durao. Criaramos para isso a partitura a seguir:
; uma tabela de onda senoidal: f1 0 256 10 1 ; uma i1 i1 i1 i1 i1 e escala pentatnica: 0.0 .5 0. 8.01 0.5 . . 8.03 1.0 . . 8.06 1.5 . . 8.08 2.0 . . 8.10

A primeira sentena cria e armazena um tabela senoidal. O protocolo para a gerao de tabelas de onda simples porm poderoso. Linhas com o opcode (comando) f interpretam seus parmetros da seguinte maneira: p1 - nmero da tabela de funo sendo criada p2 - tempo de criao, o momento em que a tabela se torna legvel (disponvel) p3 - tamanho da tabela (nmero de pontos), cujo valor tem que ser uma potncia de dois ou uma unidade a mais. p4 - subrotina de gerao, escolhida dentre uma lista pr-estabelecida (ver referncia - GENs) Aqui o valor 10 em p4 indica que esta partitura solicitou a subrotina GEN 10 para preencher esta tabela. a GEN 10 mixa harmnicos senoidais em fase, com a fora relativa de harmnicos consecutivos dada pelos campos de parmetros que a sucedem. Nossa partitura solicita apenas uma nica senoide. Uma sentena alternativa:
f1 0 256 10 1 0 3

-10-

produziria um ciclo de onda com o terceiro harmnico trs vezes mais forte que o primeiro. As sentencas i, ou sentenas de nota, invocam o instrumento p1 no momento p2, e o desliga aps p3 segundos; elas passam ao instrumento todos os seus campos-p. Os parmetros so separados por qualquer nmero de espaos ou tabs; a formatao dos campos em colunas interessante mas no necessria. Os pontos nos campos 3 e 4 nas ltimas 4 notas invocam o recurso de continuao (carry feature), pelo qual os valores so simplesmente copiados da nota imediatamente antecedente do mesmo instrumento. Uma partitura normalmente termina com o comando e. A unidade de tempo numa partitura de C-sound a pulsao. Na ausncia de uma sentena de tempo (t), uma pulsao corresponde a um segundo (MM = 60). Para dobrar a velocidade da escala pentatnica no exemplo anterior, poderamos modicar p2 e p3 em todas as notas da partitura, ou simplesmente acrescentar a linha
t 0 120

para especicar um tempo de 120 pulsaes por minuto. Dois aspectos ainda devem ser notados sobre a partitura. Primeiramente, nem as sentenas f nem as iniciadas pelo comando i precisam ser digitadas em ordem; o Csound ordena automaticamente a partitura antes de process-la. Em segundo lugar, permitido tocar mais de uma nota por vez com o mesmo instrumento. Para tocar, por exemplo, as mesmas notas da escala pentatnica acima como um acorde de 3 segundos criaramos a seguinte partitura:
; uma tabela de onda senoidal: f1 0 256 10 1 ; uma i1 i1 i1 i1 i1 e escala pentatnica: 0 3 0. 8.01 0 . . 8.03 0 . . 8.06 0 . . 8.08 0 . . 8.10

Agora volte ao seu editor de texto mais uma vez e crie seu prprio arquivo partitura. D a ele o nome intro.sco. A sesso seguinte descreve como invocar uma orquestra de Csound para tocar uma partitura de Csound.

-11-

1.3

O Comando Csound

Para solicitar que sua orquestra toque a partitura, digite o comando


csound intro.orc intro.sco

A execuo resultante se dar em tres fases: 1. ordenar o arquivo partitura cronologicamente. Se forem encontrados erros de sintaxe, estes sero mostrados no console (terminal) 2. traduzir e carregar a orquestra. O console ir sinalizar o incio da traduo de cada bloco de instrumento (instr) e relatar quaisquer erros. Se as mensagens de erro no tiverem sentido imediato, traduza novamente com a opo verbose ligada:
csound -v intro.orc intro.sco

3. preencher a tabela de onda e executar a partitura. Informaes sobre esta execuo sero exibidas ao longo do processo em mensagens do tipo
B 4.000 .. 6.000 T 3.000 TT 3.000 M 7929. 7929.

Uma mensagem neste formato vai aparecer para cada evento em sua partitura. Um evento denido como qualquer mudana de estado (como quando uma nova nota se inicia ou uma nota velha termina). Os dois primeiros nmeros se referem a pulsaes na sua partitura original, e eles delimitam o segmento corrente da sntese sonora entre eventos sucessivos (por exemplo da pulsao 5 pulsao 6). O segundo valor de pulsao ento reapresentado em segundos reais e reete o tempo da partitura. A isto se segue o tempo total percorrido em segundos para todas as sesses at ento. Os ltimos valores da linha mostram a amplitude mxima do sinal de udio, medida somente neste ltimo segmento de tempo, e mostrada separadamente para cada canal. As mensagens so apresentadas no terminal de modo a auxiliar na manuteno da sua partitura. Voc deve procurar se tornar um leitor inteligente desses relatrios do terminal. Quando comear a trabalhar com partituras mais longas e seus instrumentos no causarem mais surpresas, essas informaes podero ser suprimidas. Voc pode optar por receber mensagens abreviadas usando a opo -m do comando do Csound. Quando sua performance se completar, um arquivo de udio ter sido criado, com o nome test em sua pasta (diretrio) de arquivos de som. Agora ento voc pode ouvir seu som digitando -12-

play test

Se sua mquina for sucientemente rpida, e se o seu mdulo Csound incluir acesso de usurio ao dispositivo de udio (N.T.: placa de som), voc poder ouvir o som na medida em que for processado, usando um comando como este:
csound -o devaudio intro.orc intro.sco

-13-

1.4

Mais sobre a Orquestra

Suponha que agora queiramos introduzir um pequeno vibrato, cuja velocidade seja igual a 1/50 da frequncia da nota (i.e. o L 440 teria um vibrato de 8.8Hz). Para fazer isso, ns geramos um sinal de controle usando um segundo oscilador, e ento adicionamos este sinal frequncia bsica derivada de p5. Isto resultaria neste instrumento:
instr 1 kamp kvib a1 endin line oscil oscil out a1 0, p3, 10000 2.75, cpspch(p5)/50, 1 kamp, cpspch(p5) + kvib, 1

Aqui existem dois sinais de controle, um controlando a amplitude e o outro modicando a altura bsica do oscilador de audio. Para vibratos pequenos, este instrumento bastante prtico; entretanto ele contm um erro conceitual que merece ser mencionado. Este esquema adicionou um desvio senoidal no valor de ciclos por segundo do oscilador de udio. O valor 2.75 determina uma largura de vibrato em cps, e far com que um L 440 seja modicado aproximadamente 1/10 de semitom em cada direo (1/160 da frequncia em cps). Na realidade, um desvio em ciclos por segundo produz um intervalo diferente acima do que abaixo. Para vericar isto considere um desvio mais exagerado de 220 cps, o qual estenderia o L 440 uma 5a justa acima, mas uma oitava inteira abaixo. Para sermos mais corretos, deveramos primeiro converter p5 em uma oitava decimal real (no ciclos por segundo), de modo que um desvio de intervalo acima corresponda a um desvio semelhante abaixo. Em geral, modicaes na altura das notas devem ser feitas em unidades de oitava real ao invs de classe de nota (pitch-class) ou ciclos por segundo, e existe um grupo de conversores de altura para tornar esta tarefa mais fcil. O instrumento modicado caria assim:
instr 1 ioct kamp kvib a1 endin = line oscil oscil out a1 octpch(p5) 0, p3, 10000 2.75, cpspch(p5)/50, 1 kamp, cpsoct(ioct + kvib), 1

Este instrumento demonstra o uso de um terceiro tipo de varivel de orquestra, uma varivel i. A varivel ioct recebe seu valor na inicializao do instrumento, e no durante a vida desta nota. Podem haver muitos desses clculos de inicializao em um instrumento. Na medida em que cada nota da partitura encontrada, o espao de evento alocado, e o instrumento inicializado por um passo especial de pr-

performance. Variveis do tipo i (i-rate) recebem seus valores neste momento, e quaisquer outras expresses envolvendo somente constantes e variveis i sero avaliadas. Neste ponto tambm, mdulos como line preparam seus valores alvo (tais como pontos de incio e m da linha), e unidades como oscil organizam a fase e cuidam de outros detalhes em preparao para a performance. Uma descrio completa do tempo de inicializao e atividades pr-performance, entretanto, ser deixada para uma considerao geral sobre a sintaxe da orquestra.

-15-

Um TooTorial sobre Instrumentos

por Richard Boulanger, Berklee College of Music


___________________________________________________________________________

2. Um TOOTorial de Design de Instrumentos: Richard Boulanger 2.1 Introduo aos tutoriais 2.2 Toot 1: Tocar uma nota 2.3 Toot 2: Campos-P 2.4 Toot 3: Envelopes 2.5 Toot 4: Criando Chorus 2.6 Toot 5: Vibrato 2.7 Toot 6: Gens 2.8 Toot 7: Crossfade 2.9 Toot 8: Soundin 2.10 Toot 9: Reverberao Global em Estreo 2.11 Toot 10: Ruido Filtrado 2.12 Toot 11: Carry, Tempo & Sort 2.13 Toot 12: Tables & Labels 2.14 Toot 13: Fuso Espectral 2.15 Quando as Coisas Soam Errado 2.16 Sugestes para Futuros Estudos 3. Um Tutorial de Sntese FOF: J. M. Clarke

16 17 20 21 22 23 24 25 27 28 30 32 34 39 41 43 44 45

-16___________________________________________________________________________

2.1 Introduo Toot


___________________________________________________________________________ Instrumentos no Csound so criados em um arquivo orquestra. A lista de notas a serem tocadas escrita em um arquivo partitura separado. Ambos so criados usando um processador de texto comum. Quando voc roda o programa Csound em uma orquestra e uma partitura especca, a partitura organizada e ordenada no tempo, a orquestra traduzida e carregada, as tabelas de onda so computadas e preenchidas, e ento a partitura executada. A partitura conduz a orquestra dizendo aos instrumentos especcos quando e por quanto tempo tocar, e que parmetros usar no curso de cada evento de nota. Ao contrrio do que acontece com sintetizadores de hardware comerciais, os quais tm um conjunto limitado de osciladores, geradores de envelope, ltros e um nmero xo de possibilidades de interconexo desses componentes, o poder do Csound no limitado. Se voc quiser um instrumento com centenas de osciladores, mdulos de envelope e ltros, basta digit-los no arquivo. Mais importante a liberdade de interconectar os mdulos, e correlacionar os parmetros que os controlam. Assim como os instrumentos acsticos, os instrumentos do Csound podem ser sensveis ao contexto musical e exibir um nvel de inteligncia musical com a qual os sintetizadores de hardware podem apenas sonhar. J que a inteno deste tutorial familiarizar os iniciantes com a sintaxe da linguagem, vamos criar vrios instrumentos simples. Voc vai encontrar muitos instrumentos com a sosticao descrita acima nos vrios diretrios de Csound. Um estudo desses instrumentos revelar o verdadeiro poder do Csound. O arquivo de orquestra do Csound possui duas partes principais: 1. A seo de cabealho (header) denindo a velocidade de amostragem do udio, a velocidade de controle e o nmero de canais de sada. 2. Seo de instrumentos - na qual os instrumentos so construdos.

2.1.1 A Seo de Cabealho


Uma orquestra de Csound gera sinais em duas velocidades - uma velocidade de amostragem de udio e uma velocidade de amostragem de controle. Ambas podem representar sinais cuja frequncia seja no mximo metade de sua velocidade. Mas a distino entre sinais de udio e sinais de controle sub-udio til na medida em que permite que sinais que se movem mais lentamente utilizem menos tempo de computao. No cabealho abaixo, especicamos uma velocidade de amostragem de

44,1 KHz, uma velocidade de controle de 4410 Hz e ento calculamos o nmero de amostras em cada perodo de controle utilizando a frmula ksmps = sr / kr
sr kr ksmps nchnls = = = = 44100 4410 10 1

Nos arquivos de orquestra e partitura do Csound, o espaamento arbitrrio. importante ser consistente na organizao de seus arquivos e voc pode usar este espaamento para isso. No tutorial de instrumentos a seguir voc ir observar que adotamos uma conveno. O leitor pode escolher a sua prpria.

2.1.2 A Seo de Instrumentos


Todos os instrumentos so numerados e referenciados por esses nmeros na partitura. Os instrumentos do Csound so semelhantes aos timbres (patches) num sintetizador de hardware. Cada instrumento consiste de um conjunto de unidades geradoras, ou mdulos de software, os quais so reunidos por blocos de entrada/sada -- variveis do tipo i, k, ou a. Ao contrrio de um mdulo de hardware, um mdulo de software tem um nmero varivel de argumentos os quais o usurio regula para determinar seu comportamento. Os quatro tipos de variveis so: somente set-up variveis de tipo i - alteradas de acordo com a mudana das notas variveis de tipo k - alteradas de acordo com a velocidade dos sinais de controle variveis de tipo a - alteradas de acordo com a velocidade dos sinais de udio

2.1.3 Sentenas da Orquestra


Cada sentena ocupa uma nica linha e tem o mesmo formato bsico:
resultado ao argumentos

Para incluir, por exemplo, um oscilador em sua orquestra,voc pode especic-lo da seguinte maneira:
a1 oscil 10000, 440, 1

Os trs argumentos para este oscilador ajustam a sua amplitude (10000), sua frequncia (440Hz) e sua forma de onda (1) A sada colocada no bloco de e/s a1. Este smbolo para o bloco de sada especica a velocidade na qual este oscilador vai

gerar sua sada - neste caso, a velocidade de udio. Poderamos ter dado qualquer nome ao resultado (por exemplo asig ou asaida) desde que ele comece com a letra a.

2.1.4 Comentrios
Para incluir texto, na orquestra ou na partitura, que no vai ser interpretado pelo programa, preceda-o com ponto-e-vrgula (;). Isto permite que voc comente todo o seu cdigo. Em cada linha, qualquer texto aps o ponto-e-vrgula ser ignorado pelos tradutores da orquestra e da partitura.

-19___________________________________________________________________________

2.2 Toot 1: Tocar Uma Nota


___________________________________________________________________________ Para este e todos os exemplos de instrumentos, existe um arquivo de orquestra e de partitura no sub-diretrio tutorles que o usurio pode rodar para testar o som de cada novo recurso apresentado. O cdigo de instrumento mostrado abaixo na verdade precedido de um cabealho de orquestra semelhante quele mostrado acima. Se voc estiver rodando o programa num computador RISC, cada exemplo poder provavelmente ser ouvido em tempo real. Durante a execuo (tempo-real ou no) a velocidade de udio pode ser automaticamente modicada para se adaptar aos conversores de d/a (N.T.: digital para analgico). O primeiro arquivo orquestra, chamado toot1.orc contem um nico instrumento, o qual utiliza uma unidade oscil para tocar uma onda senoidal de 440Hz (denida pelo f1 na partitura) a uma amplitude de 10000.
instr 1 a1 out endin oscil 10000, 440,1 a1

Rode este instrumento com seu arquivo partitura correspondente, toot1.sco:


f1 i1 e 0 0 4096 4 10 1 ; usa GEN10 para computar uma onda senoidal ; roda o instr 1, a partir do tempo 0, por 4 segs ; m da partitura ("end")

-20___________________________________________________________________________

2.3 Toot 2: Campos-P


___________________________________________________________________________ O primeiro instrumento no foi muito interessante porque ele podia tocar apenas uma nota, em um nico nvel de intensidade. Podemos tornar as coisas mais interessantes permitindo que a altura e a amplitude sejam denidas pelos parmetros da partitura. Cada coluna na partitura constitui um campo de parmetro numerado a partir da esquerda. Os trs primeiros parmetros das sentenas comeadas por i tem funo reservada: p1 = nmero do instrumento p2 = incio da nota p3 = durao da nota Todos os outros parmetros so determinados pelo modo como o usurio dene seus instrumentos. No instrumento abaixo, o argumento de amplitude do oscilador substitudo por p4 e o argumento de frequncia por p5. Agora podemos mudar esses valores no tempo de nota, ou seja com cada nota da partitura. Os arquivos de orquestra e partitura cam, agora, assim:

==================================================== instr 2 a1 out endin ==================================================== f1 0 4096 10 1 ; onda senoidal oscil p4, p5,1 a1 ; p4 = amp, p5 = freq

;instr(p1) inicio(p2) dur(p3) amp(p4) freq(p5) i2 0 1 2000 880 i2 1.5 1 4000 440 i2 3 1 8000 220 i2 4.5 1 16000 110 i2 6 1 32000 55 e ====================================================

-21-

2.4

Toot 3: Envelopes

___________________________________________________________________________ Apesar de podermos controlar e variar, no segundo instrumento, a amplitude geral de cada nota, para um efeito mais musical, deveramos moldar a intensidade ao longo da durao da nota. Para fazer isso vamos precisar adicionar uma unidade geradora linen, a qual denida pelo Manual de Referncia do Csound como:
kr ar linen linen kamp, irise, idur, idec linen xamp, irise, idur, idec

um modicador de sinal, capaz de computar sua sada tanto como um sinal de controle quanto como um sinal de udio. J que planejamos utiliz-lo para modicar o envelope de amplitude do oscilador, vamos escolher a primeira opo. Trs dos argumentos de linen pedem variveis do tipo i. O quarto argumento espera em um caso uma varivel k (velocidade de controle) e no outro caso uma varivel x (signicando velocidade de udio ou qualquer coisa abaixo dela). Nosso linen receber sua amplitude de p4. A sada de linen (k1) inserida no argumento kamp de uma unidade oscil. Isto aplica um envelope no oscil. Os arquivos de orquestra e partitura cam ento assim:
=========================================================================== instr 3 k1 a1 out linen oscil a1 p4,p6, p3, p7 k1, p5,1 ; ; ; ; p4 p5 p6 p7 = = = = amplitude frequencia tempo de ataque da nota tempo de trmino da nota

endin =========================================================================== f1 0 4096 10 1 ; onda senoidal ;instr(p1) ini(p2) dur(p3) amp(p4) freq(p5) atq(p6) i3 0 1 10000 440 .05 i3 1.5 1 10000 440 .9 i3 3 1 5000 880 .02 i3 4.5 1 5000 880 .7 i3 6 1 20000 220 .5 e ==================================================== n(p7) .7 .1 .99 .01 .5

-22-

2.5

Toot 4: Chorus

___________________________________________________________________________ A seguir vamos animar um pouco o som bsico mixando-o com duas cpias ligeiramente desanadas dele mesmo. Empregaremos o conversor de valor cpspch do Csound, o qual nos permitir especicar alturas por oitava e classe de notas ao invs de freqncia, e usaremos o conversor ampdb para especicar as intensidades em dB (decibis) ao invs de linearmente. J que estamos somando a sada de trs osciladores, cada qual com o mesmo envelope de amplitude, vamos escalonar esta amplitude antes de mixarmos os sinais. Tanto iscale quanto inote so nomes arbitrrios para tornar o design um pouco mais fcil de ler. Cada um uma varivel do tipo i, avaliada quando o instrumento inicializado.
==================================================== instr 4 iamp = ampdb(p4) ; converter decibeis para amplitude linear iscale = iamp * .333 ; escalonar a amplitude ao inicializar inote = cpspch(p5) ; converter "oitava.nota" para cps k1 linen iscale,p6, p3, p7 ; p4 = amplitude a3 oscil k1, inote*.996,1 ; p5 = frequencia a2 oscil k1, inote*1.004,1 ; p6 = tempo de ataque da nota a1 oscil k1, inote,1 ; p7 = tempo de nalizacao da nota out a1+a2+a3 endin ======================================================================= f1 0 4096 10 1 ; onda senoidal

;instr(p1) ini(p2) dur(p3) amp(p4) freq(p5) atq(p6) n(p7) i4 0 1 75 8.04 .1 .7 i4 1 1 70 8.02 .07 .6 i4 2 1 75 8.00 .05 .5 i4 3 1 70 8.02 .05 .4 i4 4 1 85 8.04 .1 .5 i4 5 1 80 8.04 .05 .5 i4 6 2 90 8.04 .03 .1 e =======================================================================

-23___________________________________________________________________________

2.6 Toot 5: Vibrato


___________________________________________________________________________ Para acrescentar ao nosso instrumento com chorus um pouco de vibrato, iniciado aps o ataque da nota, utilizamos um outro oscilador para o vibrato e um gerador de segmento de linha, lineseg, como forma de controlar o atraso do vibrato. lineseg um gerador de sinal do tipo k ou a, o qual traa segmentos de linha reta entre qualquer nmero de pontos especicados. O manual do Csound o descreve como:
kr ar linseg linseg ia, idur1, ib [, idur2, ic [...]] ia, idur1, ib [, idur2, ic [...]]

Uma vez que pretendemos usar este gerador para aumentar lentamente a quantidade do sinal vindo do nosso oscilador de vibrato, escolheremos a verso do tipo k. As variveis de tipo i: ia, ib, ic etc so os valores para os pontos. As variveis de tipo i: idur1, idur2, idur3 etc ajustam a durao, em segundos, entre os segmentos.
========================================================================= instr 5 ; toot5.orc irel = .01 ; tempo de nalizacao do vibrato idel1 = p3 - (p10 * p3) ; calcula o atraso inicial do vibrato isus = p3 - (idel1 - irel) ; calcula a duracao restante iamp = ampdb(p4) ; p4 = amplitude iscale = cpspch(p5) ; p5 = frequencia k3 linseg 0, idel1, p9, isus, p9, irel, 0; p6 = tempo de ataque k2 oscil k3, p8, 1 ; p7 = tempo de nalizacao k1 linen iscale, p6, p3, p7 ; p8 = velocidade do vibrato a3 oscil k1, inote* .995 + k2, 1 ; p9 = profundidade de vibrato a2 oscil k1, inote * 1.005 + k2, 1 ; p10 = atraso do vibrato a1 oscil k1, inote + k2, 1 ; outs a1+a2+a3, a1+a2+a3 ; endin ; ========================================================================= f1 0 4096 10 1 ;ins ini dur amp freq atq n velVib profVib atrVib i5 0 3 86 10.00 .1 .7 7 6 .4 i5 4 3 86 10.02 1 .2 6 6 .4 i5 8 4 86 10.04 2 1 5 6 .4 =========================================================================

-24___________________________________________________________________________

2.7 Toot 6: Gens


___________________________________________________________________________ O primeiro caracter em uma sentena da partitura um opcode, determinando uma ao requisitada; os dados restantes consistem de campos de parmetros numricos (campos-p) para serem usados por aquela ao. At agora, estivemos lidando com dois opcodes diferentes em nossa partitura: f e i. Sentenas comeadas com i, ou sentenas de nota, invocam o instrumento p1 no tempo p2 e o desligam aps p3 segundos; todos os campos-p restantes so passados ao instrumento.

Sentenas f, ou sejam, linhas iniciadas com o opcode f, invocam subrotinas de desenho de funo chamadas GENS. No Csound existem atualmente 23 (vinte trs) rotinas GEN, as quais preenchem tabelas de onda de vrias formas. Por exemplo, GEN 01 transfere dados de um arquivo de udio; GEN 07 permite que voc construa funes com segmentos de linhas retas; e GEN 10, a qual temos usado em nossas partituras at agora, gera formas de onda compostas, construdas a partir de uma soma ponderada de senoides simples. Chamamos a funo de f1, invocando-a no tempo 0, denindo seu tamanho em 512 pontos, e instruindo GEN 10 a preencher sua tabela de onda com uma nica senoide cuja amplitude 1. Na verdade, GEN 10 pode ser usada para aproximar vrias outras formas, como ilustramos a seguir:

f1 f2 f3 f4

0 0 0 0

2048 2048 2048 2048

10 10 10 10

1 ; Seno 1 .5 .3 .25 2 .167 .14 .125 .111 ; Dente-de-Serra 1 0 .3 0 .2 0 .14 0 .111 ; Quadrada 1 1 1 1 .7 .5 .3 .1 ; Pulso

Para o opcode f, os quatro primeiros campos-p so interpretados assim:

p1 - nmero da tabela - Na orquestra voc referencia esta tabela pelo seu nmero; p2 - tempo de criao - o momento em que a funo gerada; p3 - tamanho da tabela - nmero de pontos da tabela (tem que ser uma potncia de 2 ou uma unidade a mais); p4 - sub-rotina de gerao - qual dos 23 GENS voc vai empregar; p5 --> p? - signicado depende da sub-rotina empregada.

No instrumento e partitura abaixo, acrescentamos trs funes adicionais partitura, e modicamos a orquestra para que o instrumento possa cham-las atravs de p11.

========================================================================= instr 6 ; toot6.orc ifunc = p11 ; selecionar forma de onda bsica irel = .01 ; denir nalizacao do vibrato idel1 = p3 - (p10 * p3) ; calcular atraso inicial isus = p3 - (idel1- irel) ; calcular duracao restante iamp = ampdb(p4) iscale = iamp * .333 ; p4=amplitude inote = cpspch(p5) ; p5=frequencia k3 linseg 0, idel1, p9, isus, p9, irel, 0 ; p6=tempo de ataque k2 oscil k3, p8, 1 ; p7=tempo de nalizacao k1 linen iscale, p6, p3, p7 ; p8=velociadade do vibrato a3 oscil k1, inote*.999+k2, ifunc ; p9=profundidade do vibrato a2 oscil k1, inote*1.001+k2, ifunc ; p10=atraso do vibrato (0-1) a1 oscil k1, inote+k2, ifunc out a1 + a2 + a3 endin ========================================================================= f1 0 f2 0 f3 0 f4 0 ;ins i6 i6 i6 i6 e 2048 10 2048 10 2048 10 2048 10 ini dur 0 2 3 2 6 2 9 3 1 1 .5 .3 .25 .2 .167 .14 .125 .111 1 0 .3 0 .2 0 .14 0 .111 1 1 1 1 .7 .5 .3 .1 amp frq atq rel vlVib pfVib 86 8.00 .03 .7 6 9 86 8.02 .03 .7 6 9 86 8.04 .03 .7 6 9 86 8.05 .03 .7 6 9 ; ; ; ; Senoide Dente-de-Serra Quadrada Pulso atrVib Onda(f) .8 1 .8 2 .8 3 .8 4

=========================================================================

-26-

2.8 Toot 7: Crossfade


___________________________________________________________________________ Agora vamos aprender a fazer um cruzamento (crossfade) linear entre quaisquer duas de nossas quatro formas de onda bsicas. Empregaremos nosso esquema de vibrato tardio para regular a velocidade do cruzamento.
========================================================================= instr 7 ; toot7.orc ifunc1 = p11 ; forma de onda inicial ifunc2 = p12 ; forma de onda para cruzamento ifad1 = p3 - (p13 * p3) ; calcular fade inicial ifad2 = p3 - ifad1 ; calcular duracao restante irel = .01 ; denir nalizacao do vibrato idel1 = p3 - (p10 * p3) ; calcular atraso inicial isus = p3 - (idel1- irel) ; calcular duracao restante iamp = ampdb(p4) iscale = iamp * .166 ; p4=amplitude inote = cpspch(p5) ; p5=frequencia k3 linseg 0, idel1, p9, isus, p9, irel, 0 ; p6=tempo de ataque k2 oscil k3, p8, 1 ; p7=tempo de nalizacao k1 linen iscale, p6, p3, p7 ; p8=velocidade do vibrato a6 oscil k1, inote*.998+k2, ifunc2 ; p9=profundidade do vibrato a5 oscil k1, inote*1.002+k2, ifunc2 ; p10=atraso do vibrato(0-1) a4 oscil k1, inote+k2, ifunc2 ; p11=onda inicial a3 oscil k1, inote*.997+k2, ifunc1 ; p12=onda cruzada a2 oscil k1, inote*1.003+k2, ifunc1 ; p13=tempo de fade a1 oscil k1, inote+k2, ifunc1 kfade linseg 1, ifad1, 0, ifad2, 1 afunc1 = kfade * (a1+a2+a3) afunc2 = (1 - kfade) * (a4+a5+a6) out afunc1 + afunc2 endin ========================================================================= ; toot7.sco f1 f2 f3 f4 0 0 0 0 2048 2048 2048 2048 10 10 10 10 1 1 .5 .3 .25 .2 .167 .14 .125 .111 1 0 .3 0 .2 0 .14 0 .111 1 1 1 1 .7 .5 .3 .1 ; Senoide ; Dente-de-Serra ; Quadrada ; Pulso

;ins ini dur amp frq atq n vlVib pfVib atrVib ondaIni ondaFin tmpCrz i7 0 5 96 8.07 .03 .1 5 6 .99 1 2 .1 i7 6 5 96 8.09 .03 .1 5 6 .99 1 3 .1 i7 12 8 96 8.07 .03 .1 5 6 .99 1 4 .1 e =========================================================================

2.9 Toot 8: Soundin


___________________________________________________________________________ Agora, ao invs de continuar a expandir esse mesmo instrumento, vamos criar um outro totalmente diferente. Vamos ler um arquivo de udio para dentro da orquestra, aplicar nele um envelope de amplitude e acrescentar um pouco de reverberao. Para isso, empregaremos os geradores soundin e reverb do Csound. O primeiro descrito da seguinte maneira:
a1 soundin ilecod[, iskiptime [, iformat]]

soundin deriva seu sinal de um arquivo pr-existente. ilecod pode ser o nome do arquivo entre aspas, ou um suxo inteiro (.n) acrescido ao nome soundin. Assim, o arquivo soundin.5 pode ser referenciado tanto pelo nome quanto pelo numero 5. Para ler a partir dos primeiros 500 milisegundos desse arquivo poderiamos dizer:
a1 soundin "soundin.5", .5

O gerador reverb do Csound na verdade composto de quatro ltros comb paralelos e dois ltros allpass em srie. Apesar de que poderiamos criar uma variante prpria utilizando essas primitivas, o reverb pr-setado e conveniente e simula uma resposta acstica natural atravs dos valores dos parametros internos. Apenas dois argumentos so necessarios: o sinal de entrada (asig) e o tempo de reverberao (krvt)
ar reverb asig,krvt

O instrumento de arquivo de udio com envelope articial e reverberao (incluida diretamente) ca assim:
========================================================================= instr 8 ; toot8.orc idur = p3 iamp = p4 iskiptime = p5 iattack = p6 irelease = p7 irvbtime = p8 irvbgain = p9 kamp linen iamp, iattack, idur, irelease asig soundin "soundin.aiff", iskiptime arampsig = kamp * asig aeffect reverb asig, irvbtime arvbreturn = aeffect * irvbgain out arampsig + arvbreturn endin

========================================================================= ;toot8.sco ;ins ini dur amp skip atk re tpoRvb intRvb i8 0 1 .3 0 .03 .1 1.5 .2 i8 2 1 .3 0 .1 .1 1.3 .2 i8 3.5 2.25 .3 0 .5 .1 2.1 .2 i8 4.5 2.25 .3 0 .01 .1 1.1 .2 i8 5 2.25 .3 . 1 .01 .1 1.1 .1 e =========================================================================

-29-

2.10 Toot 9: Reverberao Global em Estreo


___________________________________________________________________________ No exemplo anterior, voc deve ter notado que a fonte de entrada de udio cou cortada no nal das notas, porque o reverber estava dentro do prprio instrumento. melhor criar um instrumento de apoio, um instrumento de reverberao global, para o qual o sinal de origem possa ser enviado. Vamos tambm fazer isso em estreo. Variveis so clulas nomeadas que guardam nmeros. No Csound, elas podem ser locais ou globais; esto disponiveis continuamente e podem ser atualizadas em uma das quatro velocidades: de inicializao (setup), de nota (i-rate), de controle (k-rate) ou de audio (a-rate). Variveis locais (as quais comeam com as letras p, i, k ou a) so exclusivas de um instrumento em particular. Elas no podem ser lidas ou escritas por nenhum outro instrumento. Variveis globais so celulas que podem ser acessadas por todos os instrumentos. Trs dos quatro tipos esto disponiveis (i, k e a), mas estas letras so precedidas da letra g, para identic-las como globais. Variveis globais so usadas para transmitir valores gerais, para a comunicao entre instrumentos, e para mandar o som de um instrumento para o outro. O instrumento de reverberao instr99 abaixo recebe entrada de instr9 atraves da varivel global de udio garvbsig. Como instr9 soma a essa varivel global, varias cpias de instr9 podem fazer isso sem nenhuma perda de informao. A adio requer que garvbsig seja limpo antes de cada passe de controle (k-rate) atravs de qualquer instrumento ativo. Isto conseguido primeiramente com um comando init no cabealho da orquestra, dando ao instrumento de reverb um nmero maior que qualquer outro (os instrumentos so processados em ordem numrica), e ento limpando garvbsig dentro de instr99 uma vez que os dados tenham sido inseridos no reverb.
========================================================================= sr = 44100 ; toot9.orc kr = 4410 ksmps = 10 nchnls = 2 ; estreo garvbsig init 0 ; zera varivel global no tempo de init da orquestra

-30-

instr 9 idur = p3 iamp = p4 iskiptime = p5 iattack = p6 irelease = p7 ibalance = p8 ; estreo: 1=left, .5=center, 0=right irvbgain = p9 kamp linen iamp, iattack, idur, irelease asig soundin "soundin.aiff", iskiptime arampsig = kamp * asig outs arampsig * ibalance, arampsig * (1 - ibalance) garvbsig = garvbsig + arampsig * irvbgain endin

instr 99 irvbtime = p4 asig reverb garvbsig, irvbtime outs asig, asig garvbsig = 0 ; then clear it endin

; reverberao global ; coloca o sinal global no reverb

=========================================================================

Na partitura ligamos o reverb global no tempo 0 e o mantemos at o tempo irvbtime aps

a ltima nota.
========================================================================= ; ins strt dur rvbtime ; toot9.sco i99 0 9.85 2.6 ;ins ini dur amp skip atq n estereo(0-1) reverb i9 0 1 .5 0 .02 .1 1 .2 i9 2 2 .5 0 .03 .1 0 .3 i9 3.5 2.25 .5 0 .9 .1 .5 .1 i9 4.5 2.25 .5 0 1.2 .1 0 .2 i9 5 2.25 .5 0 .2 .1 1 .3 e =========================================================================

-31-

2.11

Toot 10: Rudo Filtrado

___________________________________________________________________________ O instrumento a seguir usa a unidade rand do Csound para produzir rudo e uma unidade reson para ltr-lo. A banda de freqncia de reson ser denida no tempo de nota (i-time), mas sua freqncia central ser varrida por uma unidade line atravs de um faixa de freqncias durante cada nota. Acrescentamos a isso a reverberao como no tutorial 9.

========================================================================= garvbsig init 0

instr 10 ; toot10.orc iattack = .01 irelease = .2 iwhite = 10000 idur = p3 iamp = p4 isweepstar = p5 isweepend = p6 ibandwidth = p7 ibalance = p8 ; estereo: 1 = esq., .5 = centro, 0 = dir. irvbgain = p9 kamp linen iamp, iattack, idur, irelease ksweep line isweepstart, idur, isweepend asig rand iwhite alt reson asig, ksweep, ibandwidth arampsig = kamp * alt outs arampsig * ibalance, arampsig * (1 - ibalance) garvbsig = garvbsig + arampsig * irvbgain endin instr 100 irvbtime = p4 asig reverb garvbsig, irvbtime outs asig, asig garvbsig = 0 endin =========================================================================

-32-

========================================================================= ;toot10.sco ;ins ini i100 0 i100 15 ;ins ini i10 0 i10 3 i10 5 i10 8 i10 8 i10 9 i10 11 i10 12 i10 13 i10 15 e dur 15 10 dur 2 1 2 2 .5 .5 .5 .5 .5 5 rvbtime 1.1 5 amp .05 .05 .05 .05 .05 .05 .05 .05 .05 .01 stswp 5000 1500 850 1100 5000 1000 500 2100 1700 8000 ndswp 500 5000 1100 8000 1000 8000 2100 1220 3500 800 bndwth 20 30 40 50 30 40 50 75 100 60 estereo(0-1) .5 .5 .5 .5 .5 .5 .4 .6 .5 .5 reverb .1 .1 .1 .1 .2 .1 .2 .1 .2 .15

=========================================================================

-33-

2.12

Toot 11: Carry, Tempo & Sort

___________________________________________________________________________ Desta vez vamos usar um instrumento de cordas dedilhadas para explorar alguns dos recursos de pr-processamento do Csound. J que o foco aqui na partitura, o instrumento apresentado sem maiores explicaes.
instr 11 asig1 pluck ampdb(p4) /2, p5, p5, 0 1 asig2 pluck ampdb(p4) / 2, p5* 1.003, p5 * 1.003, 0 1 out asig1+asig2 endin

A partitura pode ser dividida em sesses ordenadas no tempo atravs do comando s. Antes da performance, cada sesso processada por trs rotinas: carry, tempo e sort. A partitura toot11.sco possui mltiplas sesses contendo cada um dos exemplos abaixo, em ambos os formatos listados.

2.12.1

Carry

O recurso carry (carregar) permite que um ponto (.) num campo-p indique que o valor o mesmo do de cima, desde que se trate de duas linhas do mesmo instrumento. Assim, os dois exemplos abaixo so idnticos:
;ins i11 i11 i11 ini 0 1 2 dur 1 . . amp 90 . . freq 200 300 400 | | | | ; ins i11 i11 i11 ini 0 1 2 dur 1 1 1 amp 90 90 90 freq 200 300 400

Uma forma especial do recurso carry se aplica somente ao campo p2. Um + em p2 ter o valor de p2+p3 da linha de nota anterior. O + tambem pode ser carregado para frente por um ponto (.):
;ins i11 i. i. ini 0 + . dur 1 . . amp 90 . . freq 200 300 500 | | | | ; ins i11 i11 i11 ini 0 1 2 dur 1 1 1 amp 90 90 90 freq 200 300 500

O ponto do recurso carry pode ser omitido quando no h mais nenhum campo explcito naquela linha. -34-

;ins i11 i11 i11

ini 0 +

dur 1 2

amp 90

freq 200

| ; ins | i11 | i11 | i11

ini 0 1 3

dur 1 2 2

amp 90 90 90

freq 200 200 200

2.12.2

Ramping

Uma variante do recurso carry o ramping, o qual substitue uma sequncia de valores linearmente interpolados por um smbolo de ramp (<) entre quaisquer dois valores de um campo-p. Ramps funcionam somente em chamadas consecutivas ao mesmo instrumento, e no podem ser aplicados aos trs primeiros campos-p.
;ins i11 i . i . i . i . ini 0 + . . . dur 1 . . . 4 amp 90 < < < 70 freq 200 < 400 < 200 | | | | | | ; ins i11 i11 i11 i11 i11 ini 0 1 2 3 4 dur 1 1 1 1 4 amp 90 85 80 75 70 freq 200 300 400 300 200

2.12.3

Tempo

A unidade de tempo numa partitura Csound a pulsao - normalmente uma pulsao por segundo. Isto pode ser modicado por um comando de tempo (andamento) que permite que a partitura tenha seu tempo extendido ou contrado arbitrariamente. As pulsaes so convertidas para seu equivalente em segundos durante o pr-processamento da partitura em cada seo. Na ausncia de uma sentena com o comando de tempo, em qualquer seo, a seguinte sentena de tempo inserida:
t 0 60

Isto signica que na pulsao 0 o tempo de uma pulsao do Csound 60 (uma pulsao por segundo). Para ouvir a seo duas vezes mais rpida, temos duas opes: 1) cortar todos os p2 e p3 na metade e ajustar os incios de nota ou 2) inserir a sentena t 0 120 dentro da seo. A sentena de tempo tambm pode ser usada para mover diferentes andamentos durante a partitura, criando assim retardandos e acelerandos. As mudanas so lineares por tamanho da pulsao. A sentena abaixo far com que a partitura comece com o andamento 120, caia para o andamento 80 na pulsao 4, e depois acelere para 220 na pulsao 7.
t 0 120 4 80 7 220

-35-

Os arquivos abaixo so idnticos:


t 0 120 ;ins ini i11 0 i. + i. . i. . i. . ; Dobrando o andamento com Tempo dur amp freq | ;ins ini .5 90 200 | i11 0 . < < | i. + . < 400 | i. . . < < | i. . 2 70 200 | i. . dur 1 . . . 4 amp 90 < < < 70 freq 200 < 400 < 200

A partitura a seguir inclui um acelerando e ritardando. Note-se, entretanto, que o efeito de rampa aplicado aps a modicao do tempo, e portanto proporcional ao tempo cronolgico decorrido. Enquanto isto perfeito para graduaes de amplitude, rampings de frequncia no resultaro em alturas harmonicamente relacionadas durante as mudanas de tempo. Por isso as frequncias necessrias so indicadas explicitamente aqui:
t 0 60 4 400 8 60 ; Acelerando e Ritardando com Tempo ;ins start dur amp freq i11 0 1 70 200 i. + . < 500 i. . . 90 800 i. . . < 500 i. . . 70 200 i. . . 90 1000 i. . . < 600 i. . . 70 200 i. . 8 90 100

2.12.4

Sesses da Partitura

Esses recursos adicionais da partitura so extremamente teis no Csound. O comando s foi utilizado acima para dividir a partitura em Sesses para prprocessamento individual. J que cada sentena s estabelece um novo tempo 0 relativo, e todas as aes numa sesso so relativas a esse momento, ca mais conveniente desenvolver a partitura uma sesso de cada vez e conect-las em um todo mais tarde. Suponha que queiramos combinar os seis exemplos acima (chame-os de toot11a toot11f) em uma partitura. Uma maneira de faz-lo comecar com toot11a.sco, calcular sua durao total e somar aquele valor a cada incio de nota de toot11b.sco, e da ento adicionar a durao combinada aos incios de nota de toot11c.sco, etc. Alternativamente, podemos inserir um comando s entre cada sesso e rodar a partitura toda. O arquivo toot11.sco, o qual contem uma sequncia de todos os exemplos acima, faz exatamente isso.

2.12.5

Acrescentando Tempo Extra

A sentena f0, a qual cria um tempo de ao sem nenhuma ao associada, til para extender a durao de uma sesso. Dois segundos de silncio so acrescentados s duas primeiras sesses abaixo.
; ins i11 f0 s i11 i. i. f0 s i11 e start dur 0 2 4 0 + . 5 0 1 . . amp 90 freq 100 ; toot11g.sco ; a sentenca f0 ; a mudanca de sessao 90 . . 800 400 100

90

50

2.12.6

Sort

Durante o processamento de uma sesso da partitura, todas as sentenas de tempo de ao so ordenadas cronologicamente pelo valor de p2. Isto signica que as notas podem ser colocadas em qualquer ordem; que voc pode juntar arquivos ou trabalhar nos instrumentos como sesses temporariamente separadas, e depois t-las ordenadas automaticamente ao rodar o Csound no arquivo. O arquivo abaixo contem trechos desta sesso do captulo de ensaio e de instr6 do tutorial, combinando os dois da seguinte maneira:
========================================================================= ;ins i11 i. i. i. i. i. i. i. i. i. i. i. i. start 0 + . . . . . . . . . . . dur 1 . . . . . . . . . . . 8 amp 70 < < 90 < < 70 90 < < < 70 90 freq 100 < < 800 < < 100 1000 < < < < 50 ; toot11h.sco ; Score Sorting

-37-

f1 0 f2 0 f3 0 f4 0 ;ins i6 i6 i6 i6

2048 2048 2048 2048 ini 0 2 4 6

10 1 10 1 .5 .3 .25 .2 .167 .14 .125 10 1 0 .3 0 .2 0 .14 0 .111 10 1 1 1 1 .7 .5 .3 .1 dur amp frq atq rel 2 86 9.00 .03 .1 2 86 9.02 .03 .1 2 86 9.04 .03 .1 4 86 9.05 .05 .1

.111

vlVb 6 6 6 6

; Senoide ; Dente-de-Serra ; Quadrada ; Pulso pfVb atVb Onda 5 .4 1 5 .4 2 5 .4 3 5 .4 4

=========================================================================

-38-

2.13 Toot 12: Tables and Labels


___________________________________________________________________________ Este de longe nosso instrumento mais complexo. Nele construimos a habilidade de armazenar alturas numa tabela e ento index-las de trs maneiras diferentes: 1) diretamente, 2) atravs de um lfo, e 3) aleatoriamente. Como meio de alternar entre estes trs mtodos, usaremos os comandos e operadores lgicos e condicionais de controle de programa do Csound. ==============================================================
;toot12.orc instr 12 iseed = p8 iamp = ampdb(p4) kdirect = p5 imeth = p6 ilforate = p7 itab = 2 itablesize = 8 if (imeth == 1) igoto direct if (imeth == 2) kgoto lfo if (imeth == 3) kgoto random direct: kpitch table kdirect, itab kgoto contin lfo: kindex phasor ilforate kpitch table kindex * itablesize, itab kgoto contin random: kindex randh int(7), ilforate, iseed kpitch table abs(kindex), itab contin: kamp linseg 0, p3 * .1, iamp, p3 * .9, 0 asig oscil kamp, cpspch(kpitch), 1 ; audio osc out asig endin

; lfo and random ; index rate

; index "f2" via p5

; amp envelope

;toot12.sco f1 0 2048 10 1 f2 0 8 -2 8.00 8.02 8.04 8.05 8.07 8.09 8.11 9.00 ; method ; ins i12 i12 i12 i12 1 ini 0 .5 1 1.5 direct index of table values dur amp indice metodo lforate .5 86 7 1 0 .5 86 6 1 0 .5 86 5 1 0 .5 86 4 1 0 ; sine ; cpspch C major scale

rndseed 0

i12 i12 i12 i12 i12 i12 i12 i12 s ; method ; ins i12 i12 i12 i12 i12 s ; method ; ins i12 i12 i12 i12 i12 i12 i12 i12 i12 i12 i12 e

2 2.5 3 3.5 4 4.5 5 5.5

.5 .5 .5 .5 .5 .5 .5 2.5

86 86 86 86 86 86 86 86

3 2 1 0 0 2 4 7

1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0

2 ini 0 3 6 9 12

lfo index dur amp 2 86 2 86 2 86 2 86 2 86

of table indice 0 0 0 0 0

values metodo 2 2 2 2 2

lforate 1 2 4 8 16

rndseed 0

3 ini 0 3 6 9 12 15 18 21 24 27 30

random index of table values dur amp indice metodo lforate 2 86 0 3 2 2 86 0 3 3 2 86 0 3 4 2 86 0 3 7 2 86 0 3 11 2 86 0 3 18 2 86 0 3 29 2 86 0 3 47 2 86 0 3 76 2 86 0 3 123 5 86 0 3 199

rndseed .1 .2 .3 .4 .5 .6 .7 .8 .9 .9 .1

==============================================================

-40-

2.14 Toot 13: Fuso Espectral


___________________________________________________________________________ Para nosso ltimo instrumento, empregaremos trs mtodos de sntese distintos: Modelagem Fsica, Formantes e Distoro No-Linear. Trs das unidades geradoras mais poderosas do Csound - pluck, fof, e foscil, tornam esta tarefa complexa uma operao relativamente simples.O manual de referncia as descreve como:
ar pluck kamp, kcps, icps, ifn, imeth [, iparm1, iparm2]

pluck simula o som do decaimento natural de cordas dedilhadas preenchendo um buffer de decaimento cclico com rudo e depois lapidando ele no decorrer do tempo de acordo comum de vrios mtodos. A unidade baseada no algoritmo de KarplusStrong.
ar fof xamp, xfund, xform, koct, kband, kris, kdur, kdec iclaps, ifna,ifnb, itotdur [, iphs[, ifmode]]

fof simula o som da voz masculina reproduzindo um conjunto de harmnicos relacionados (uma regio formante) cujo envelope espectral pode ser controlado no tempo. uma forma especial de Sntese Granular, baseada no programa CHANT do IRCAM,criado por Xavier Rodet e outros.
ar foscil xamp, kcps, kcar, kmod, kndx,ifn [, iphs]

foscil uma unidade composta a qual reune dois osciladores em uma congurao FM simples, a sada de udio de um (o modulador) usado para modular a frequncia de entrada do outro (carrier). O plano para nosso instrumento fazer com que o ataque de corda dedilhada se dissolva numa sustentao de FM, a qual se transforma numa nalizao vocal. A orquestra e a partitura so as seguintes:

-41-

==============================================================
; toot13.orc instr 13 iamp = ampdb(p4) / 2 ; amplitude, re-escalonada ipluckamp = p6 ; % da amp total, 1=dB amp como em p4 ipluckdur = p7*p3 ; % da dur total, 1=entire dur of note ipluckoff = p3 - ipluckdur ifmamp = p8 ; % da amp total, 1=dB amp como em p4 ifmrise = p9*p3 ; % da dur total, 1=entire dur of note ifmdec = p10*p3 ; % da durao total ifmoff = p3 - (ifmrise + ifmdec) index = p11 ivibdepth = p12 ivibrate = p13 iformantamp = p14 ; % da amp total, 1=dB amp como em p4 iformantrise = p15*p3 ; % da dur total, 1=durao integral iformantdec = p3 - iformantrise kpluck linseg ipluckamp, ipluckdur, 0, ipluckoff, 0 apluck1 pluck iamp, p5, p5, 0, 1 apluck2 pluck iamp, p5*1.003, p5*1.003, 0, 1 apluck = kpluck * (apluck1+apluck2) kfm linseg 0, ifmrise, ifmamp, ifmdec, 0, ifmoff, 0 kndx = kfm * index afm1 foscil iamp, p5, 1, 2, kndx, 1 afm2 foscil iamp, p5*1.003, 1.003, 2.003, kndx, 1 afm = kfm * (afm1+afm2) kfrmnt linseg 0, iformantrise, iformantamp, iformantdec, 0 kvib oscil ivibdepth, ivibrate, 1 afrmnt1 fof iamp, p5+kvib, 650, 0, 40, .003, .017, .007, 4, 1, 2, p3 afrmnt2 fof iamp, (p5*1.001)+kvib*.009, 650, 0, 40, .003, .017,\\ .007, 10, 1, 2, p3 aformnt = kfrmnt * (afrmnt1+afrmnt2) out apluck + afm + aformnt endin

==============================================================
; toot13.sco f1 0 8192 10 1 f2 0 2048 19 .5 1 270 1 ;i st i130 i13+ i13 . dr 5 8 13 mp 80 80 80 frq 200 100 50 plkmp .8 . . ; sine wave ; sigmoid rise

plkdr fmp fmris fmdec indx vbdp vbrt frmp fris .3 .7 .2 .35 8 1 5 3 .5 .4 .7 .35 .35 7 1 6 3 .7 .3 .7 .2 .4 6 1 4 3 .6

============================================================== -42-

2.15 Quando as Coisas Soam Errado


___________________________________________________________________________ Quando voc cria seu prprio instrumento no Csound, voc pode ocasionalmente se surpreender com os resultados. H momentos em que voc computa um arquivo por horas e o playback s silncio, enquanto que em outros momentos voc pode receber mensagens de erro que impedem a partitura de ser executada, ou ainda, voc pode travar o computador e nada acontecer. O Csound tem um recurso completo de checagem de erro, o qual envia informaes para o terminal em vrias fases da performance: na ordenao da partitura, na traduo da orquestra, na inicializao de cada chamada de instrumento edurante a performance. Entretanto, se o seu erro for sintaticamente admissvel, ou se gerar apenas uma mensagem de advertncia, o Csound pode, inadvertidamente, lhe dar resultados indesejveis. Aqui est uma lista das coisas que voc deve checar em seus arquivos de orquestra e partitura: 1. Voc digitou a letra l ao invs do mmero 1. 2. Voc esqueceu de preceder um comentrio com o ponto-e-vrgula 3. Voc esqueceu um comando ou parmetro necessrio 4. Suas amplitudes no so sucientemente grandes ou so grandes demais 5. Suas freqncias no esto na faixa audvel - 2oHz a 20KHz. 6. Voc colocou o valor de um parmetro no campo-p de outro parmetro. 7. Voc esqueceu alguma informao crucial como a denio de uma funo. 8. Voc no respeitou as especicaoes de um GEN.

-43-

2.16 Sugestes para Futuros Estudos


___________________________________________________________________________ O Csound uma ferramenta to poderosa que s foi possvel tocar em alguns de seus recursos principais. Sugerimos que voc desmonte os intrumentos dos tutoriais, reconstrua-os, modique-os e integre os recursos de uns no design de outros. Para entender suas capacidades, voc deve compor pequenos estudos para cada um deles. No se surpreenda se voc acabar reunindo esses pequenos estudos na partitura de suas primeiras composies com Csound. Existem muitas fontes de informao sobre o Csound e sntese sonora. O livro mais completo sobre o Csound The Csound Book: Perspectives in Software Synthesis, Sound Design, Signal Processing and Programming, editado por Richard Boulanger, e publicado pela MIT Press. Nada vai aumentar sua compreenso sobre o assunto do que fazer msica com o Csound. A melhor maneira de descobrir a capacidade dessas ferramentas criar sua prpria msica com elas. Enquanto se aventura por um terreno novo e inexplorado, voc far muitas descobertas. Tenho a esperana de que atravs do Csound voc descobrir tanto sobre a msica quanto eu, e que esta experincia lhe trar muita satisfao. Richard Boulanger Boston, Massachussets USA March, 1991

-44-

3 Um Tutorial sobre Sntese FOF


___________________________________________________________________________ O gerador de sntese fof do Csound possui mais parmetros do que outros mdulos. Para ajudar o usurio a se familiarizar com esses parmetros, este tutorial utilizar um arquivo de orquestra simples, com apenas uma unidade geradora fof e demonstrar o efeito de cada parmetro por vez. Para produzir uma boa imitao vocal, ou sons de sosticao semelhante, uma orquestra contendo cinco ou mais geradores fof so necessrios, alm de outros renamentos. Os sons produzidos por essas exploraes iniciais sero muito mais simples, e consequentemente menos interessantes, mas elas ajudaro a mostrar com clareza os elementos bsicos da sntese fof. Este tutorial exige conhecimentos bsicos sobre o funcionamento do Csound. A especicao das unidades geradoras fof (como encontrada na sesso de referncia deste manual) :
ar fof xamp, xfund, xform, koct, kband, kris, kdur, kdec iclaps, ifna,ifnb, itotdur [, iphs[, ifmode]]

onde: xamp, xfund, xform - podem receber qualquer tipo de dados (constante, de controle ou de udio); koct, kband, kdris, kur, kdec - podem receber apenas constantes ou variveis de controle; iolaps, ifna, ifnb, itotdur - tm que ser valores xos na inicializao; iphs, ifmode - so opcionais, com valor padro 0. A orquestra a seguir contem um instrumento simples que utilizaremos para explorar um parmetro de cada vz. Em mquinas mais rpidas (DECstation, SparcStation, SGI Indigo) ele roda em tempo real.
sr = 44100 kr = 4410 ksmps = 10 instr 1 a1 fof 15000, 200, 650, 0, 0, .003, .02, .007, 5, 1, 2, p3 out a1 endin

-45-

Este instrumento deve ser rodado com a seguinte partitura:


f1 0 4096 10 1 f2 0 1024 19 .5 .5 270 .5 i1 0 3 e

O resultado bem bsico. O que no surpreende, visto que criamos apenas uma regio formante (uma imitao vocal precisaria de pelo menos cinco) e no temos nenhum vibrato ou variao randmica de parmetros. Variando um parmetro de cada vez, ajudaremos o leitor a aprender como a unidade geradora funciona. Cada uma das seguintes variaes comea por este modelo. Os parmetros no especicados continuam iguais. xamp - amplitude O primeiro parmetro controla a amplitude do gerador. At agora, nosso modelo possua amplitude constante. Isto pode ser mudado, de modo que a amplitude varie de acordo com uma funo de linha:
a2 a1 lineseg fof 0, p3 * .3, 20000, p3 * .4, 15000, p3 * .3, 0 a2, ..... (como antes) .....

A amplitude de um gerador fof precisa de cuidados. xamp no indica necessariamente a sada mxima, o que tambm pode depender do padro de elevao, da banda, e da presena de quaisquer sobreposies. xfund - freqncia fundamental Este parmetro controla a altura da fundamental da unidade geradora. Comeando novamente pelo modelo original, este exemplo vai demonstrar um vibrato exagerado:
a2 a1 oscil fof 20, 5, 1 15000, 200+a2, etc........

A sntese fof produz um rpida sucesso de vibraes ou gros (normalmente) com sobreposio. A fundamental na verdade a velocidade na qual novas excitaes so formadas. Se a fundamental muito grave, estas vibraes so ouvidas como gros separados. Neste caso, a fundamental no tanto uma altura mas uma velocidade de pulsao. A possibilidade de mover entre pulso e altura, entre timbre e textura granular um dos mais interessantes aspectos de fof. Para uma simples demonstrao experimente a seguinte variante. O efeito car particularmente perceptvel se a nota da partitura for aumentada em durao para aproximadamente

10 segundos.
a2 a1 expseg fof 5, p3*.8, 200, p3*.2, 150 15000, a2 etc........

koct - coeciente de oitava Pulando um parmetro, chegamos a um mtodo pouco usual de controlar a fundamental: oitavao (N.T.: na falta de traduo melhor). Este parmetro normalmente deixado com o valor 0. Para cada unidade incrementada em koct, a altura fundamental cai uma oitava. A mudana na altura no por meio de um glissando, mas pela dissipao gradual ou pela excitao alternada (deixando metade do nmero original). Experimente o seguinte (novamente com a durao mais longa):
k1 a1 linseg fof 0, p3*.1, 0, p3*.8, 6, p3*.1, 6 15000, 200, 650, k1, etc........

Isto produz uma queda de seis oitavas; se a nota for sucientemente longa, voc deve ser capaz de ouvir a dissipao de excitaes alternadas perto do nal.

xform - freqncia formante ifmode - mode formante (0 = estriado, no-0 = liso) A sada espectral de uma unidade geradora fof se assemelha de um gerador de impulso ltrado por um ltro de passagem de banda. um conjunto de harmnicos sobre a fundamental xfund com um pico espectral na freqncia formante xform. O movimento da formante pode ser implementado de duas formas. Se ifmode = 0, os dados mandados para xform tm efeito somente no incio de uma nova vibrao. Ou seja, cada vibrao recebe o valor atual deste parmetro no momento de sua criao e o mantem at o m da vibrao. Vibraes sucessivas com sobreposio podem ter diferentes freqncias formantes, criando um som rico. Este o modo do programa original CHANT. Se ifmode for um valor diferente de zero, a freqncia de cada vibrao varia continuamente de acordo com xform. Isto permite glissandos na freqncia formante. Para demonstrar essas diferenas, tomamos uma fundamental bem grave, de modo que os gros possam ser ouvidos separadamente e a frequncia formante seja audvel no como a frequncia central de uma banda, mas como uma altura em si mesma. compare o exemplo seguinte, em que apenas ifmode alterado:

-47-

a2 a1 a2 a1

line fof line fof

400, p3, 800 15000, 5, a2, 0, 1, .003, .5, .1, 3, 1, 2, p3, 0, 0 400, p3, 800 15000, 5, a2, 0, 1, .003, .5, .1, 3, 1, 2, p3, 0, 1

No primeiro caso, a freqncia formante move em degraus no incio de cada vibrao, enquanto que no segundo ela se modica continuamente. Uma diferena mais sutil percebida com freqncias fundamentais mais altas (Note que os ltimos parmetros fof foram alterados neste exemplo para aumentar a durao das vibraes de modo que suas alturas possam ser ouvidas mais claramente). xform tambm permite a modulao de freqncia na freqncia formante. Ao se aplicar FM num som j complexo, pode-se chegar a estranhos resultados, mas aqui vai um exemplo simples:
acarr line 400, p3, 800 index = 2.0 imodfr = 400 idev = index * imodfr amodsig oscil idev, imodfr, 1 a1 fof 15000, 5, acarr+amodsig, 0, 1, .003, .5, .1, 3, 1, 2, p3, 0, 1

kband - banda da formante kris, kdur, kdec - tempo de elevao, durao e tempo de decaimento (em segundos) do envelope de vibrao. Esses parmetros controlam a forma e tamanho dos gros fof. Eles so formados em trs segmentos: uma elevao, um decaimento central e um decaimento nal. Para fundamentais muito graves, eles so percebidos como um envelope de amplitude, mas com fundamentais mais agudas (acima de 30 Hz), os gros se fundem e esses parmetros modicam o timbre do som. Note que esses quatro parmetros inuenciam um novo gro somente no momento de sua inicializao e permanecem xos por toda a sua durao, mudanas posteriores afetam apenas os gros subsequentes. Comeamos nossa investigao com freqncias graves:
k1 a1 line fof .003, p3, .1 ; kris 15000, 2, 300, 0, 0, k1, .5, .1, 2, 1, 2, p3

Rode este exempo com uma durao de nota de 10 segundos. Repare como o ataque do envelope dos gros aumenta. A forma deste ataque determinada pela forma frontal de ifnb (aqui uma sigmoid). -48-

Agora experimente mudar kband:


k1 a1 linseg fof 0, p3, 10 ; kband 15000, 2, 300, 0, k1, .003, .5, .1, 2, 1, 2, p3

Aps sua elevao inicial, uma vibrao tem um decaimento exponencial e kband determina seu ritmo. quanto maior kband, mais ngreme o decaimento; zero signica nenhum decaimento. No exemplo acima, os gros sucessivos tm seu decaimento cada vez mais rpido.
k1 a1 linseg fof 3, p3, .003 15000, 2, 300, 0, 0, .003, .4, k1, 2, 1, 2, p3

Isto demonstra o funcionamento de kdec. J que um decaimento exponencial nunca alcana zero, ele precisa ser nalizado adequadamente. kdur a durao geral (em segundos a partir do incio da vibrao), e kdec a durao do decaimento nal. No exemplo acima, o decaimento nal comea muito cedo nos primeiros gros e ento se torna progressivamente mais tardio. Note que kband tem valor zero aqui para que somente o decaimento nal que evidente.
No prximo exemplo, o tempo de incio da terminao permanece constante, mas sua durao ca mais curta:
k1 a1 expon fof .3, p3, .003 15000, 2, 300, 0, 0, .003, .01 + k1, k1, 2, 1, , p3

Pode ser uma surpresa descobrir que, para fundamentais mais agudas, o envelope local determina a forma espectral do som. A msica eletrnica e computacional tem mostrado frequentemente como elementos da msica que normalmente consideramos independentes, tais como altura, timbre, e durao, so na verdade diferentes aspectos da mesma coisa. Em geral, quanto mais longo o segmento de envelope local, mais estreita a banda de harmnicos em torno daquela freqncia. kband determina a banda da regio formante em -6dB, e kris controla a largura de saia (skirt width) a -40dB. Aumentando kband, aumenta-se a velocidade de decaimento exponencial do envelope local, encurtando-o assim e aumentando a regio espectral de -6dB. Aumentando kris (o tempo de ataque do envelope) inversamente faz-se com que a regio espectral de -40dB se torne menor.

O prximo exemplo muda a primeira banda e depois a banda de saia. Voc deve perceber a diferena:
k1 k2 a1 linseg linseg fof 100, p3/4, 0, p3/4, 100, p3/2, 100 ; kband .003, p3/2, .003, p3/4, .01, p3/4, .003 ; kris 15000, 100, 440, 0, k1, k2, .02, .007, 3, 1, 2, p3

Na primeira metade da nota, kris permanece constante, enquanto kband ca mais larga e ento se estreita novamente. Na segunda metade, kband xa, enquanto kris aumenta (estreitando o espectro), e depois retorna. Note que kdur e kdec no moldam realmente o espectro, eles simplesmente ajustam o decaimento para evitar descontinuidades indesejadas, as quais distorceriam o som. Para imitaes vocais, esses parmetros so tipicamente ajustados em .017 e .007 e deixados xos. Com fundamentais agudas (soprano), possvel encurtar esses valores e reduzir o tempo de computao (reduzindo as sobreposies).

iolaps - nmero de espaos de sobreposio Os gros so criados na velocidade da freqncia fundamental, e novos gros so freqentemente criados antes que os anteriores tenham sido terminados, resultando em sobreposio. O nmero de sobreposies em qualque momento dado por xfund * kdur. Para uma nota grave tpica, o clculo pode ser 200 * .018 = 3.6, e para uma nota do soprano 660 * 0.15 = 9.9. fof precisa de pelo menos este nmero (arredondado para cima) de espaos nos quais possa operar. O nmero pode ser superestimado sem impacto na computao, e com apenas um pequeno impacto no espao. Se no houver espaos de sobreposio sucientes durante a operao, a nota ser terminada. ifna, ifnb - tabelas de funo armazenadas Nmeros de identicao de duas tabelas de funo (ver fof no volume de Referncia.) itotdur - durao total na qual todos os gros em uma nota devem ser completados Para que gros incompletos no sejam cortados ao nal de cada nota, fof no cria novos gros se eles no puderem se completar no tempo especicado. Normalmente, dado o valor de p3 (durao da nota), este parmetro pode ser alterado para um efeito especial; fof tem sada zero aps o tempo itotdur. iphs - fase inicial (opcional, valor padro = 0) Especica a fase inicial da fundamental. Normalmente zero, mas pode ser til fornecer valores diferentes de fase inicial a vrios geradores fof, para eveitar zeros no espectro. -50-

Potrebbero piacerti anche