necSO - Uma Linguagem de Composição Implementada num
Sistema de Síntese e Processamento de Som do Tipo MUSIC V (Csound)(relato)1
Maurício Alves Loureiro
Introdução
Sistemas Musicais de Síntese e
Processamento de Som
Mesmo que compositores tenham usado o
computador para escrever música desde a década de 50, antes mesmo que o computador fosse
utilizado para para sintetizar sons, pode-se dizer que a origem da tecnologia e da
metodologia da computação musical moderna está relacionada com o desenvolvimento dos
primeiros sistemas de síntese e processamento digital de som para aplicações musicais: MUSIC
I a MUSIC V [Pope, 1993]. Estes programas pioneiros, escritos por Max Mathews
nos laboratórios da AT&T e da Bell, na segunda metade da década de 50, deram origem
a inúmeros outros, que ainda preservam as características dos 2 últimos da série, MUSIC
IV e MUSIC V [Mathews, 1993].
Este sistemas incluem um compilador, que
gera uma seqüência de números (amostras), que representa a forma de onda do
sinal de áudio, a partir de parâmetros de entrada especificados na linguagem própria do
compilador. Esta seqüência é armazenada num arquivo de som e pode ser
transformada num sinal de áudio por um conversor digital-analógico, que irá produzir o
som num sistema de amplificação. O princípio fundamental dos chamados compiladores
acústicos, se baseia na mesma estrutura modular dos sintetizadores analógicos, nos
quais sinais de áudio são criados e processados por unidades independentes, tais como
osciladores, filtros, amplificadores e moduladores, que podem ser interligados entre si,
com diferentes especificações de parâmetros para cada unidade. Os algorítmos de
síntese são portanto especificados como combinações dessas unidades geradoras,
configuráveis em blocos de sub-programas denominados instrumentos. Estes instrumentos
são acionados por um conjunto de comandos que informam o tempo de execução (instante de
início e duração do evento) e os parâmetros acústicos especificados na definição
dos instrumentos. A este conjunto de comandos é dado o nome de lista de notas.
Uma composição portanto, é representada nestes sistemas por uma lista de notas
relacionada a um ou mais instrumentos.
A grande vantagem de um compilador
acústico em relação a um sintetizador analógico, é que ele possibilita não só a
especificação precisa de timbres mas também do tempo de execução do evento acústico:
a nota. O compositor passa então a ter um maior controle sobre o processo de
síntese que pode estar relacionado a um determinado instante de execução, já que a
especificação do instante de início e fim de cada nota faz parte do conjunto de
parâmetros enviado aos instrumentos. A homogeneidade da estrutura
não-hierárquica deste sistema de especificação de eventos através de lista de
notas, possibilita o compositor definir e realizar qualquer tipo de som (desde que
seja capaz de ser produzido por um alto-falante) possuindo ainda o total controle temporal
desta realização.
Do MUSIC V, o mais eficiente da
série, derivaram um grande número de variantes, dentre os quais citamos o Music 360
escrito para o IBM 360 por Barry Vercoe do MIT - Massachussets Institute of Technology, o Music
11 escrito para o PDP 11 por Roger Hale e Carl Howe do MIT. Dentre as mais recentes
implementações do modelo, as mais conhecidas são o cmusic, escrito por Richard
Moore da Universidade da California San Diego [Moore, 1985], e o Csound, escrito
por Barry Vercoe do MIT [Vercoe, 1992], ambos implementados na linguagem C. Embora
cada um apresente diferentes características, incluindo inúmeros recursos adicionais de
processamento e síntese, todos eles ainda possuem as mesmas características do modelo do
MUSIC V.
CSound
O Csound recebe como entrada dois
arquivos ASCII, escritos na linguagem específica do compilador e gera apartir deles o arquivo
de som especificado. Aos arquivo de entrada do Csound, são dados os nomes de score
(*.sco) e orchestra (*.orc), os quais possuem o seguinte formato:
Arquivo .orc
sr = 16000
kr = 1000
ksmps = 16
nchnls = 1 |
instr 1
k1
a1
endin |
linenp
oscil
out |
4, p6, p3, p7
k1, p5, 1
a1 |
; p3 = duração da nota
; p4 = amplitude
; p5 = frequência
; p6 = ataque
; p7 = release |
Arquivo .sco
f1 0 4096 10 1
; senóide Ü
|
;ins
il
il
il
il
il
e |
strt
0
15
3
45
6 |
dur
1
1
1
1
2 |
amp(p4)
10000
10000
5000
5000
20000 |
freq(p5)
440
440
880
880
220 |
ataque(p6)
.2
.9
.02
.7
.5 |
relese(p7)
.7
.1
.99
.01
.5 |
Existem hoje sistemas mais eficientes tais como, Accelerando [Lent, Pinkston &
Silsbee, 1989], Kyma [Scaletti, 1991] e IRCAM Musical Workstation
[Lindermann et al. 1991], mas que no entanto são dedicados a hardware específico. Esstes
sistemas incluem interface gráfica que possibilita uma interação mais intuitiva na
especificação e edição de tabelas de onda, envelopes e espectro harmônico, além de
prover também recursos de controle em tempo real, mesmo que limitado. Pacotes mais
recentes como o MODE [Pope, 1991] incluem um ambiente gráfico para especificação
de instrumentos, mixagem e gravação de arquivos, além de inúmeras ferramentas para
geração de partituras (lista de notas).
Objetivos do Projeto
Tanto o Csound quanto o cmusic,
não apresentam qualquer tipo de interface gráfica, muito menos uma linguagem para
trabalhar em um nível mais alto da estrutura composicional, na qual aspectos puramente
musicais estejam enfatizados. Gareth Loy, um dos autores de CARL2,
10 anos depois de sua criação afirma:
"One way to think of the CARL
software is a signal processing package begging for a real user interface!"
(Uma maneira de se ver o CARL, é
como um pacote de programas para processamento de sinal (de áudio) implorando por uma
real interface com o usuário!) [Loy, 1993]
A necessidade de se especificar todas as
etapas do processo, torna a tarefa de compor mais complicada e dispendiosa. A
microestrutura do som, por exemplo, que tradicionalmente seria controlada pelo
intérprete, terá que ser especificada pelo compositor. Por outro lado, a própria
estrutura destes compiladores impõe a restrição de que o evento acústico tem que ser
uma nota. Mesmo que aparentemente ilimitada, a especificação de eventos através
de lista de notas funciona bem apenas para ocasiões em que as informações
necessárias para sua concepção é conhecida no instante em que ela é iniciada [Loy,
1989]. Além disso, por serem as notas nestes compiladores entidades independentes, a
tarefa de se manipular um grupo de notas de uma maneira global é às vezes dificultada.
O objetivo deste projeto é desenvolver
uma linguagem de alto nível para composição musical, utilizando conceitos de
Programação Orientada a Objetos, implementada num sistema musical de síntese e
processamento de som. O projeto apresentará como produto final um programa, intitulado necSO,
um ambiente para criação musical, que tem a finalidade de facilitar a utilização
de compiladores acústicos além de oferecer um ambiente intuitivo para a edição e
controle dos componentes da composição musical. necSO está sendo desenvolvido em
C++ e não depende da linguagem própria do compilador. Nesta versão
inicial, está sendo implementado no Csound, mas deverá expandir para outros
compiladores tais como o cmusic, e cmix.
necSO
Seguindo o modelo de outras linguagens
de alto nível existentes, a estrutura de necSO procura abstrair da noção de instrumentos
acionados por uma lista de notas, imposta pelo compilador do Csound,
mantendo transparente para o usuário esta estrutura baseada nos arquivos de entrada do
compilador, *.orc e *.sco. Para isso necSO possui um sistema de arquivos próprio e
um interpretador que gera aqueles arquivos de entrada do compilador, mas que será ativado
apenas na fase final do processo. Toda a especificação de instrumentos e listas
de notas está contida nos arquivos de necSO, dos quais o mais importante é o
arquivo *.om, que representa o objeto musical, elemento fundamental de necSO.
O objeto musical, estrutura
abstrata e uniforme que organiza todos os níveis da composição, desde a construção de
timbres até a composição da obra inteira, é construído e editado no Editor de
Objetos Musicais, a janela principal de necSO. Um objeto musical
pode ser um som indivisível, tal como uma lista de notas relacionada a um instrumento
ou se constituir de vários objetos musicais agrupados, podendo assim representar
qualquer componente de uma composição. Para processar relacionar e combinar os objetos
musicais, foram criadas as ferramentas de composição, que podem conter
funções para criar estruturas musicais específicas. necSO inclui uma série de ferramentas
de composição predefinidas, acessadas graficamente neste editor, e oferece também
ao compositor recursos para a criação de novas ferramentas.
Os Editores de necSO
O ambiente de necSO está baseado
em 3 editores e um sistema próprio de arquivos, gerado e gerenciado por estes editores:
Editor de Tabelas de Função
A fim de facilitar a especificação das
tabelas de função a serem utilizadas pelo compilador, necSO inclui um Editor
de Tabelas de Função que gera e edita arquivos .ft, que contêm informações
necessárias para gerar a linha de comando referente à tabela de função especificada
(primeira linha do arquivo .sco, indicada por uma seta (Ü) na figura
anterior). O editor fornece acesso gráfico às rotinas geradoras de tabela de função
(rotinas GENs do Csound). Selecionando-se uma rotina, o editor mostra uma lista de campos
para serem preenchidos com os parâmetros daquela GEN selecionado. A fim de tornar o
processo de construção da tabela mais interativo, o editor fornece recursos de
monitoração gráfica e auditiva. Um gráfico da função gerada é mostrado na parte
inferior do editor, podendo ser alternado entre domínio do tempo e domínio da
freqüência. Através de um comando toca, o usuário pode monitorar o som
"puro" da forma de onda construída.
![](images/Image1.gif)
Editor de Tabelas de Função - A
figura mostra a construção de uma tabela de função de 1024 posições, utilizando a
rotina de geração de tabelas GEN1; esta rotina transfere para a tabela a forma de onda
extraída de um determinado arquivo de som, a partir de um ponto especificado (no exemplo,
do início do arquivo d:\projetos\necso\fted\res\sine.wav).
Editor de Instrumentos
Para construir um ambiente para o Csound
sua estrutura básica de instrumentos acionados por listas de notas foi
preservada criando-se um Editor de Instrumentos, onde o usuário tem acesso
gráfico a todas as unidades geradoras do compilador e a recursos para conectá-las
graficamente. O editor contem uma área de trabalho para onde as unidades geradoras, representadas
por ícones, podem ser arrastadas. O usuário constrói e edita os instrumentos
visualmente, interligandos as unidades geradoras por linhas retas que conectam a
saída de uma à entrada de outra. O editor mostra os campos para preenchimento com
parâmetros de entrada da ug selecionada. A tabela de função a ser
utilizada, pode ser acessada cliquando-se no campo correspondente, o que faz abrir uma
janela mostrando as tabelas disponíveis (representadas por ícones), ou também
preenchendo o campo com o respectivo nome do arquivo *.ft. O Editor de Instrumentos
gera um arquivo *.ins, que será utilizado no Editor de Objetos Musicais,
de nível mais alto. Os arquivos *.ins são próprios do sistema, podendo ser editados e
reutilizados dentro do editor. Recursos de monitoração são também fornecidos neste
editor.
Editor de Objetos Musicais
Esta é a janela principal de necSO
onde o usuário cria e edita graficamente os objetos musicais, que podem ser
criados de duas maneiras:
1 - Do início, aplicando uma lista
de notas a um instrumento qualquer:
Para isso o editor fornece acesso a diretórios contendo arquivos *.ins, previamente
construídos, representados por ícones. Os instrumentos não podem ser modificados
neste editor. Eles são arrastados para a área de trabalho, a fim de serem utilizados na
construção de um objeto musical. O editor mostra então os campos para
preenchimento da lista de notas que acionará o instrumento selecionado.
2 - A partir de um ou mais objetos musicais que podem ser processados,
relacionados e combinados através das ferramentas de composição. Estas
ferramentas são funções que podem gerar estruturas musicais a partir de um ou mais objetos
musicais. Também representadas por ícones, elas podem ser arrastadas para a área de
trabalho. O editor mostra os campos para preenchimento dos parâmetros da função
definida pela ferramenta de composição selecionada.
Os arquivos .om gerados e editados no Editor
de Objetos Musicais, contêm as informações necessárias para o interpretador
gerar os arquivos de entrada do CSound (*.orc e *.sco) para a compilação do som.
Ferramentas de Composição
necSO inclui inúmeras ferramentas
de composição predefinidas e fornece recursos para que outras sejam criadas pelo
usuário. As ferramentas de composição estão divididas em categorias:
Relacionamento e Combinação, Transformação de Ritmo, Transformação de Altura,
Transformação de Timbre. Algumas delas representam implementações de funções do
Csound, outras foram criadas para o ambiente de composição.
Relacionamento e Combinação (Relacionam
e/ou processam diferentes objetos musicais (om), através de
um algoritmo específico)
soma - justapõe dois ou mais oms.
permutação - permuta dois ou mais oms; manipula a
disposição espacial dos oms.
substituição - substitui um om; também utilizado para exclusão.
concatenação - agrupa seqüencialmente dois ou mais oms.
desmembramento - desmembra um om em dois ou mais oms
distintos
arpejo - organiza dois ou mais oms numa ordem descendente ou
ascendente em relação a um parâmetro qualquer: altura, densidade, intensidade,
duração.
Transformação de Rítmo
quantização - ajusta valores de
durações a uma pulsação específica.
loop - repete um om ad infinitum
eco - repete um om, permitindo um controle do tempo de repetição e
da intensidade de cada repetição.
deslocamento - estabelece um deslocamento de tempo em relação ao tempo zero;
manipula a disposição espacial de um om.
ampliação - multiplica o valor da duração de um om por um fator
determinado, independente de qualquer mudança de altura.
Transformação de Altura
incrustração - a partir de uma
nota, gera um ou mais pares de notas eqüidistantes da nota original.
amplificação - amplia (ou reduz) o intervalo (altura) entre duas notas
diferentes, interpolando ou não um número especificado de notas intermediárias; permite
desenvolver estruturas intervalares a partir de estruturas mais simples.
perfil - A partir de um om, gera frases musicais indeterminadas ou
predeterminadas dentro de um limite estabelecido; este limite pode ser determinado
graficamente.
filtro - filtra freqüências específicas.
transposição - multiplica a freqüência de um om (ou grupo de oms)
por um fator determinado; permite mudança de altura independente de qualquer mudança de
duração.
Transformação de Timbre
gradiente - realiza uma transição
gradual de timbres entre 2 especificações de timbre (forma de onda), num período
determinado.
reverb - aplica reverberação a um om qualquer
vibrato - aplica vibrato a um om qualquer
Referências Bibliográficas
Lent, K.; Pinkston, R. & Silsbee, P.
"Accelerando: A Real-Time, General Purpose Computer Music System". Computer
Music Journal. 13(4): 54-64, 1989.
Lindemann, Eric; Dechelle, François; Smith Bennett and Starkier, Michel. "The
Architecture of the IRCAM Musical Workstation". Computer Music Journal,
15(3):41-49, Fall 1991.
Loy, G. "Composing with Computers - A Survey of Some Compositional Formalisms and
Music Programming Languages". In Mathews, Max V. and Pierce, John R. eds. Current
Directions in Computer Music Research. Cambridge: MIT Press, pp. 291-396, 1989.
Loy, G. "Tools for Music Processing. The CARL System at Ten Years". In Goffredo
Haus eds. Music Processing. Madison, WI: A-R Editions, Inc., pp. 267-300, 1993.
Mathews, Max V. The Technology of Computer Music. Cambridge: MIT Press, 1969.
Moore, F. Richard; Loy, D. Gareth and Dolson, Mark. CARL Startup Kit. San Diego:
Computer Audio Research Laboratory, June 1985.
Pope, Stephen Travis. "Introduction to MODE: The Musical Object Development
Environment". In Pope, Stephen Travis, ed. The Well-Tempered Object.
Cambridge: MIT Press, pp. 83-105, 1991.
Pope, Stephen Travis, "Machine Tongues XV: Three Packages for software Sound
Synthesis". Computer Music Journal, 17(2):23-54, Fall 1993.
Scaletti, Carla. "The Kyma/Platypus Computer Music Workstation". In Pope,
Stephen Travis, editor, The Well-Tempered Object. Cambridge: MIT Press, pp.
119-140, 1991.
Vercoe, Barry. Csound - A Manual for the Audio Processing System and Supporting
Programs with Tutorials. Cambridge, Massachussets: M. I. T., Experimental Music
Studio. Media Laboratory, 1992.
1 -
Projeto financiado pelo CNPq volta
2 - O sistema CARL (Computer Audio
Research Laboratory) se constitui em um pacote de programas para processamento e síntese
digital, que inclui o compilador cmusic.volta