Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
___________________________________________________________________________
Suplemento - Tutoriais
Barry Vercoe, Media Lab MIT e colaboradores
Editado por John Fitch, Richard Boulanger, Jean Pich, e David Boothe
Traduo: Carlos Eduardo Mello Depto. de Msica, Universidade de Braslia Reviso: Flvio Teixeira
-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
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
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-
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___________________________________________________________________________
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.
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___________________________________________________________________________
-20___________________________________________________________________________
==================================================== 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___________________________________________________________________________
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___________________________________________________________________________
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
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
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-
;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 =========================================================================
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-
-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
=========================================================================
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
___________________________________________________________________________ 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.
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
___________________________________________________________________________ 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-
ini 0 +
dur 1 2
amp 90
freq 200
ini 0 1 3
dur 1 2 2
amp 90 90 90
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-
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
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
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
=========================================================================
-38-
; 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
.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
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-
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-
-43-
-44-
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-
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
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-
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-