ANPPOM
ASSOCIAÇÃO NACIONAL DE PESQUISA E PÓS-GRADUAÇÃO EM MÚSICA

Composição:
Painel e Relato de Pesquisas


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

Download da versão .pdf deste texto

 

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.


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 om’s.
permutação - permuta dois ou mais om’s; manipula a disposição espacial dos om’s.
substituição - substitui um om; também utilizado para exclusão.
concatenação - agrupa seqüencialmente dois ou mais om’s.
desmembramento - desmembra um om em dois ou mais om’s distintos
arpejo - organiza dois ou mais om’s 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 om’s) 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

 

line-mus.gif (407 bytes)

Retorna

Back to Top