ver/abrir - Repositório do Departamento de Ciência da Computação

Transcrição

ver/abrir - Repositório do Departamento de Ciência da Computação
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Construção de Instrumentos Aditivos para a
Linguagem SOM-A
Diego Augusto Rodrigues Gomes
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Orientador
Prof. Dr. Aluizio Arcela
Brasília
2007
Universidade de Brasília – UnB
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Curso de Bacharelado em Ciência da Computação
Coordenador: Prof a.̄ Dr a.̄ Cláudia Nalon
Banca examinadora composta por:
Prof.
Prof.
Prof.
Prof.
Dr. Aluizio Arcela (Orientador) – CIC/UnB
Dr. Márcio da Costa Pereira Brandão – CIC/UnB
Dr. Pedro de Azevedo Berger – CIC/UnB
MSc João José Costa Gondim – CIC/UnB
CIP – Catalogação Internacional na Publicação
Gomes, Diego Augusto Rodrigues.
Construção de Instrumentos Aditivos para a Linguagem SOM-A / Diego Augusto Rodrigues Gomes. Brasília : UnB, 2007.
93 p. : il. ; 29,5 cm.
Monografia (Graduação) – Universidade de Brasília, Brasília, 2007.
1. Análise Espectral, 2. SOM-A, 3. Transformada Rápida de Fourier,
4. Instrumentos Musicais
CDU 004
Endereço:
Universidade de Brasília
Campus Universitário Darcy Ribeiro – Asa Norte
CEP 70910–900
Brasília – DF – Brasil
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Construção de Instrumentos Aditivos para a
Linguagem SOM-A
Diego Augusto Rodrigues Gomes
Monografia apresentada como requisito parcial
para conclusão do Bacharelado em Ciência da Computação
Prof. Dr. Aluizio Arcela (Orientador)
CIC/UnB
Prof. Dr. Márcio da Costa Pereira Brandão
CIC/UnB
Prof. Dr. Pedro de Azevedo Berger
CIC/UnB
Prof. MSc João José Costa Gondim
CIC/UnB
Prof a.̄ Dr a.̄ Cláudia Nalon
Coordenador do Bacharelado em Ciência da Computação
Brasília, 13 de dezembro de 2007
Dedicatória
Ao meu pai, Tércio Gomes, muita saudade.
Agradecimentos
Agradeço a Deus pela oportunidade de viver este momento e por ter me acompanhado
durante todos estes anos. Agradeço a todos da minha família, especialmente Papai,
Mamãe, Manão (pelo exemplo) e Duzão, que sempre me deram forças para vencer os
desafios e o suporte necessário nas dificuldades (BRAAP!).
Agradeço a Rosana pela sua paciência, compreensão e conselhos, e por saber ouvir
muitos dos problemas enfrentados. Agradeço aos meus amigos pelo incentivo nos
momentos difíceis desta trajetória. Ao pessoal do DF76 e da Sacramento que souberam
ser flexíveis diante da minha ausência. Ao Brazão, Minnie e Antônia, pelos momentos
de descontração e por me darem carinho incondicionalmente.
Ao professor Aluizio Arcela pela orientação constante. Aos meus colegas e amigos
de curso que estiveram presentes nos últimos cinco anos vencendo os mesmos desafios.
Aos meus colegas de trabalho pela compreensão e torcida.
Por fim, agradeço a todos aqueles que, de uma forma ou de outra, contribuiram
para o meu sucesso, torceram pela minha vitória e que rezaram por mim.
Resumo
A síntese de sinais musicais por meio do computador sempre foi um dos tópicos centrais na área de computação musical. Com o desenvolvimento desta área de pesquisa
foram-se solidificando conceitos ao mesmo tempo em que novos desafios foram surgindo. Dentre esses desafios, a construção matemática de instrumentos musicais. A
construção do som de um instrumento musical requer a análise espectral dos fatores
que influenciam na qualidade e na geração deste som por meio do computador. O fundamento no processo de análise de instrumentos sinfônicos é o conhecimento das série
e transformadas de Fourier. A análise de Fourier mostra o sinal como um somatório
de senóides de diferentes freqüências, amplitudes e fases. A linguagem SOM-A, por
se basear exclusivamente no processo de síntese aditiva, permite a execução de obras
tonais (apesar de não ter sido construída para este fim) por instrumentos definidos de
acordo com sua sintaxe. Neste trabalho é feito o projeto e implementação de uma
ferramenta que permite a extração de instrumentos musicais sinfônicos para a linguagem SOM-A a partir de um exemplar de sinal digital de um instrumento musical real.
Com isto, é possível construir uma orquestra de instrumentos aditivos. Este processo
conta com o algoritmo da transformada rápida de Fourier. Além disso, são realizados
testes e experimentos que verificam a qualidade do instrumento SOM-A gerado como
resultado.
Palavras-chave: Análise Espectral, SOM-A, Transformada Rápida de Fourier, Instrumentos Musicais
Abstract
The musical signals synthesis was always one of the main topics in computer music.
The development of this area of research had been solidifying concepts at the same time
that new challenges have emerged. Among these challenges, the mathematical building of musical instruments. The building of a musical instrument sound requires the
spectral analysis of the factors that influences the quality and the generation of sound
through the computer. The ground in the process of symphonic instruments analysis is
the knowledge of the Fourier series and the transforms. The Fourier analysis shows the
signal like a summation of sinusoidal of different frequencies, amplitudes and phases.
SOM-A language, relying exclusively in the process of additive synthesis, allows the
execution of tonal works (although it was not built for this purpose) by instruments defined according to its syntax. In this work the design and implementation of a tool that
enables the extraction of symphonic musical instruments for SOM-A language, from
a copy of digital signal of a real musical instrument, is done. It is possible to build
an orchestra of additive instruments by the use of the fast Fourier transform algorithm.
Moreover, tests and experiments are performed to check the quality of the SOM-A
instrument generated.
Keywords: Spectral Analysis, SOM-A, Fast Fourier Transform, Musical Instruments
Sumário
Lista de Figuras
10
Capítulo 1
13
Introdução
Capítulo 2 A Linguagem SOM-A
2.1 Histórico . . . . . . . . .
2.2 Descrição . . . . . . . . .
2.2.1 Elementos . . . . .
2.3 Operadores . . . . . . . .
2.3.1 VAL . . . . . . . .
2.3.2 INS . . . . . . . .
2.3.3 EXE . . . . . . . .
2.3.4 STP . . . . . . . .
2.3.5 FIM . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
16
16
17
17
18
19
19
20
Capítulo 3 Análise Espectral de Fourier
3.1 A série de Fourier . . . . . . . . . . . . . . . . . .
3.1.1 Séries de Fourier: representação complexa
3.1.2 Integral de Fourier . . . . . . . . . . . . .
3.1.3 Transformada Discreta de Fourier . . . . .
3.2 Transformada rápida de Fourier . . . . . . . . . . .
3.3 Análise espectral . . . . . . . . . . . . . . . . . .
3.3.1 Espectro dinâmico . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
22
23
24
25
25
27
27
Capítulo 4 A Matemática dos Instrumentos Musicais
4.1 Componentes . . . . . . . . . . . . . . . . . . . .
4.2 Envoltória . . . . . . . . . . . . . . . . . . . . . .
4.3 Instrumentos SOM-A . . . . . . . . . . . . . . . .
4.3.1 Motivação . . . . . . . . . . . . . . . . . .
4.4 Um método para analisar instrumentos musicais . .
4.4.1 “Enjanelamento”(Windowing) . . . . . . .
4.4.2 Aplicando a transformada rápida de Fourier
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
30
31
31
32
32
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Capítulo 5 INStractor: uma ferramenta de extração de instrumentos musicais para a linguagem SOM-A
35
5.1 Fluxo de funcionamento . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
.
.
.
.
.
.
.
.
.
37
39
40
40
40
40
41
41
41
Capítulo 6 Testes e Experimentos
6.1 Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Formas de ondas simples . . . . . . . . . . . . . . . . . . . .
6.1.2 Formas de ondas complexas: instrumentos musicais . . . . .
46
46
47
50
Capítulo 7
67
5.3
5.4
5.5
5.2.1 Empacotamento .
5.2.2 APIs externas . .
Estruturas de dados . . .
5.3.1 Vetor . . . . . .
5.3.2 Lista . . . . . .
5.3.3 Mapa . . . . . .
Algoritmos essenciais . .
Plataforma . . . . . . . .
5.5.1 Software . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conclusões e Trabalhos Futuros
Apêndice A Instrumentos SOM-A gerados nos testes
A.1 Senóide com amplitude constante . . . . . . . .
A.2 Senóide com amplitude variável . . . . . . . . .
A.3 Senóide com ângulo inicial de fase diferente de 0o
A.4 Dente-de-serra . . . . . . . . . . . . . . . . . . .
Apêndice B Envoltórias de instrumentos sinfônicos
B.1 Fagote . . . . . . . . . . . . . . . . . . . . .
B.2 Oboe . . . . . . . . . . . . . . . . . . . . . .
B.3 Trompete . . . . . . . . . . . . . . . . . . .
B.4 Trombone baixo . . . . . . . . . . . . . . . .
Referências
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
69
70
70
.
.
.
.
74
74
74
74
74
92
9
Lista de Figuras
2.1
Trecho do Concerto para Clarineta de Mozart (K 622) . . . . . . . . .
20
3.1
3.2
A onda não-senoidal e periódica 3 é obtida pela soma das ondas 1 e 2
Espectro variante no tempo de um tom puro a 440 Hz com envoltória
linear decrescente (efeito de fade out do início ao final do sinal). . . .
22
4.1
28
4.2
Envoltória da componente fundamental de um trombone baixo (sinal
disponibilizado pela Universidade de Iowa [28]). A nota tocada foi um
Dó 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Visão geral do processo da STFT. . . . . . . . . . . . . . . . . . . .
31
33
5.1
5.2
Modelo clássico do MVC. . . . . . . . . . . . . . . . . . . . . . . .
Modelo do MVC utilizado no INStractor. . . . . . . . . . . . . . . .
37
38
6.1
6.2
6.3
Sinal senoidal a 250 Hz sem variação em sua amplitude. . . . . . . .
Envoltória da onda senoidal a 250 Hz sem variação em sua amplitude.
Sinal senoidal a 250 Hz com variação linear decrescente em sua amplitude. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Envoltória da onda senoidal a 250 Hz com variação linear decrescente
em sua amplitude. Efeito fade out . . . . . . . . . . . . . . . . . . .
Forma de onda dente-de-serra de freqüência 250 Hz formada pelos primeiros 10 harmônicos. Os harmônicos ímpares possuem ângulo inicial
de fase igual a 0o e harmônicos pares possuem ângulo inicial de fase
igual a 180o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Onda quadrada formada pelos harmônicos 1, 3, 5, 7, 9, 11, 13 e 15,
com freqüência de 100 Hz . . . . . . . . . . . . . . . . . . . . . . .
Envoltória das componentes 1, 2, 3 e 4 de uma onda quadrada. . . . .
Envoltória das componentes 5, 6, 7 e 8 de uma onda quadrada. . . . .
Envoltória das componentes 9, 11, 12 e 13 de uma onda quadrada. . .
Envoltória das componentes 14 e 15 de uma onda quadrada. . . . . .
Dó 4 mf de uma clarineta. . . . . . . . . . . . . . . . . . . . . . . .
Envoltória dos harmônicos 1, 2, 3 e 4 de uma clarineta. . . . . . . . .
Envoltória dos harmônicos 5, 6, 7 e 8 de uma clarineta. . . . . . . . .
Envoltória dos harmônicos 9, 10, 11 e 12 de uma clarineta. . . . . . .
Dó 3 mf na corda Sol de um violoncelo. . . . . . . . . . . . . . . . .
Envoltória das componentes 1, 2, 3 e 4 do violoncelo. . . . . . . . . .
Envoltória das componentes 5, 6, 7 e 8 do violoncelo. . . . . . . . . .
Envoltória das componentes 9, 10, 11 e 12 do violoncelo. . . . . . . .
47
48
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.12
6.13
6.14
6.15
6.16
6.17
6.18
48
49
50
50
51
52
53
54
54
55
56
57
58
59
60
61
6.19
6.20
6.21
6.22
6.23
6.24
6.25
Envoltória das componentes 13, 15, 16 e 17 do violoncelo.
Envoltória das componentes 18, 19, 23 e 26 do violoncelo.
Envoltória das componentes 30, 33, 38 e 40 do violoncelo.
Dó 4 mf de um fagote. . . . . . . . . . . . . . . . . . . .
Fá 5 mf de um oboé. . . . . . . . . . . . . . . . . . . . .
Dó 4 mf de um trompete. . . . . . . . . . . . . . . . . . .
Dó 3 mf de um trombone baixo. . . . . . . . . . . . . . .
7.1
Sinal de clarineta sintetizado pelo SOM-A utilizando o instrumento
criado pelo INStractor. . . . . . . . . . . . . . . . . . . . . . . . . .
Sinal de violoncelo sintetizado pelo SOM-A utilizando o instrumento
criado pelo INStractor. . . . . . . . . . . . . . . . . . . . . . . . . .
7.2
B.1
B.2
B.3
B.4
B.5
B.6
B.7
B.8
B.9
B.10
B.11
B.12
B.13
B.14
B.15
B.16
B.17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Envoltória das componentes 1, 2, 3 e 4 do fagote. . . . . . . . . .
Envoltória das componentes 5, 6, 7 e 8 do fagote. . . . . . . . . .
Envoltória das componentes 9, 10, 11 e 12 do fagote. . . . . . . .
Envoltória das componentes 14, 15, 16 e 17 do fagote. . . . . . .
Envoltória das componentes 1, 2, 3 e 5 do oboé. . . . . . . . . . .
Envoltória das componentes 7, 9, 10 e 11 do oboé. . . . . . . . . .
Envoltória das componentes 1, 2, 3 e 4 de um trompete . . . . . .
Envoltória das componentes 5, 6, 7 e 8 de um trompete . . . . . .
Envoltória das componentes 9, 10, 11 e 12 de um trompete . . . .
Envoltória das componentes 13, 14, 15 e 16 de um trompete . . .
Envoltória das componentes 17, 18, 19 e 20 de um trompete . . .
Envoltória das componentes 1, 2, 3 e 4 de um trombone baixo . .
Envoltória das componentes 5, 6, 7 e 8 de um trombone baixo . .
Envoltória das componentes 9, 10, 11 e 13 de um trombone baixo
Envoltória das componentes 14, 15, 16 e 17 de um trombone baixo
Envoltória das componentes 19, 20, 22 e 24 de um trombone baixo
Envoltória das componentes 26, 28, 30 e 32 de um trombone baixo
11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
63
64
65
65
65
66
67
67
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Lista de Algoritmos
1
2
3
4
5
FFT-Iterativa (a) . . . . . . . .
Implementação da FFT . . . .
Inversão de bits . . . . . . . .
Criação da janela de Hamming
Criação do intrumento SOM-A
.
.
.
.
.
.
.
.
.
.
12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
41
41
41
42
Capítulo 1
Introdução
A construção de instrumentos musicais exige muita dedicação e conhecimento por
parte dos luthiers1 . A busca pelo timbre2 apropriado3 é constante e exige testes apurados, avaliações e refinamentos para se chegar ao timbre ideal de um determinado
instrumento musical. Reproduzir de forma fiel os instrumentos consagrados por grandes luthiers do passado (como os violinos de Antonio Stradivari, por exemplo) é um
constante desafio dos luthiers da atualidade.
Na computação musical este processo não é diferente. Apenas trocam-se as ferramentas de trabalho. Ao invés de se trabalhar com metais, madeira, cola, cordas, e
toda a metodologia de encaixe das peças, tem-se apenas o computador e arquivos com
amostras de instrumentos como base. Aqui, os instrumentos são construídos com base
na análise espectral.
O SOM-A [1], ferramenta criada para a composição algorítmica, por utilizar exclusivamente o processo de síntese aditiva de sinais, oferece a possibilidade de criação
e execução de composições tonais. Visando aumentar o número de contextos em que
o SOM-A possa ser utilizado, pensou-se no desenvolvimento de uma ferramenta que
permitisse a definição de instrumentos musicais na sintaxe da linguagem SOM-A. Assim, músicas tonais poderiam ser interpretadas com os instrumentos musicais para a
qual fora composta.
O objetivo deste projeto é desenvolver uma ferramenta capaz de definir instrumentos musicais para a linguagem SOM-A tendo como entrada sinais digitais de instrumentos musicais reais. A partir das análises realizadas e da definição de tais instrumentos, uma orquestra de instrumentos aditivos será formada e estará preparada para a
utilização pelo SOM-A.
Inicialmente, nos capítulos 2 e 3, conceitos básicos relacionados à linguagem SOMA e à matemática envolvida no processo de análise espectral (especialmente as transformadas de Fourier) são abordados. Tais conceitos são de extrema relevância para a
completa compreensão dos problemas e soluções encontradas no decorrer do projeto.
O capítulo seguinte é dedicado à apresentação dos fatores que levam a definição
1
Aqueles que fabricam, restauram ou consertam instrumentos musicais. Que realizam a prática da
luteria.
2
O timbre é uma qualidade que um som tem além de sua altura e intensidade [22]. É a característica
de um tom que pode distingui-lo de outros tons de mesma altura e intensidade [4]. Em outras palavras,
o timbre está relacionado à capacidade perceptiva de classificar sons em famílias [24].
3
Em que a relação dos intervalos é mantida.
13
de um bom timbre. Conceitos como componentes espectrais e envoltórias são introduzidos. Além disso, apresenta-se um método de análise de instrumentos musicais
utilizando-se do algoritmo da transformada rápida de Fourier janelada: o STFT4 .
Em seguida, no capítulo 5, apresenta-se o INStractor. Trata-se de um programa
desenvolvido no escopo deste trabalho para a extração de instrumentos na sintaxe da
linguagem SOM-A a partir de sinais digitalizados de instrumentos musicais reais.
No capítulo 6 aborda-se uma seqüência de testes, validações e experimentos utilizandose o programa INStractor e o SOM-A. Neste capítulo realizam-se testes com formas de
ondas simples com o intuito de validar os resultados retornados pelo INStractor. Em
seguida, experimentos com sinais digitais de instrumentos musicais reais são realizados. Submete-se o sinal ao INStractor e, em seguida, insere-se o intrumento SOM-A
gerado em uma carta espectral. A avaliação da qualidade do instrumento gerado é
realizada pela audição da execução desta carta.
4
Short Time Fourier Transform
14
Capítulo 2
A Linguagem SOM-A
Desde o início dos estudos em computação musical existe a preocupação de tornar
mais simples o processo de composição musical por meio do computador. Linguagens
de programação voltadas para a síntese de sinal sonoro são projetadas e melhoradas
visando atingir este objetivo. No processo evolutivo destas linguagens, cada uma manteve o foco desejado. Na maioria das vezes este foco estava voltado para atender aos
diversos tipos de síntese possíveis e registrados na literatura sobre o assunto. Porém,
esta metodologia fez com que tais linguagens possuíssem uma complexidade sintática grande quando comparadas com linguagens que implementam um único tipo de
síntese.
Tendo em vista o aumento da complexidade sintática das linguagens que implementam diversas técnicas de síntese, e tendo em vista que algumas destas não são capazes
de implementar cartas com muitas componentes espectrais (como o Music V [18], por
exemplo), necessitava-se de uma linguagem especializada no processo de síntese aditiva1 e que contemplasse o requisito de construir cartas espectrais2 com instrumentos
contendo um número qualquer de componentes espectrais e que estas fossem interpretadas com pleno êxito. Esta linguagem se chama SOM-A.
Este capítulo além de contar um pouco da história do desenvolvimento do SOM-A,
aborda os conceitos básicos relacionados à linguagem.
2.1
Histórico
O primeiro esboço da linguagem SOM-A surgiu em 1986 a partir de experiências utilizando o programa Music V criado por Max Mathews [18]. Tais experiências foram
realizadas na Universidade de Brasília pelo professor Aluizio Arcela e tinham o objetivo de interpretar composições algorítmicas baseadas nas árvores de tempo [25].
Havia a necessidade destas composições serem interpretadas através do processo
de síntese aditiva [1]. O método da síntese aditiva era o mais apropriado pelo fato das
árvores de tempo poderem ter uma grande quantidade de componentes espectrais.
1
Técnica de síntese de sons baseada no somatório de formas de ondas simples para a criação de
formas de ondas mais complexas.
2
Uma carta espectral é uma seqüência de instruções capazes de criar instrumentos e executar um
conjunto de notas simultaneamente (ou não) utilizando este instrumento, segundo uma ordem cronológica.
15
Devido a uma limitação3 do Music V na interpretação de instrumentos com muitas
componentes e, devido à necessidade de se reproduzir a estrutura musical em sua totalidade (ou seja, com todas as componentes espectrais necessárias), foi pensada uma
linguagem que permitisse a construção de um instrumento de qualquer tamanho (em
termos de número de componentes) e com uma única especialidade: a síntese aditiva
[2].
Tendo a simplicidade como sua maior característica (possuindo apenas 5 operadores e com sintaxe semelhante a de LISP), e com o propósito de oferecer a construção
de instrumentos sem limitações (em termos de números de componentes espectrais), e
ainda, tendo a especialidade da síntese aditiva, nasce a linguagem SOM-A.
A primeira implementação de SOM-A ocorreu em 1988 utilizando a linguagem
LISP [12]. Entretanto, gastava-se até 20 horas para processar uma carta espectral
com apenas 10 segundos de duração, o que era extremamente desencorajador. Este
tempo de processamento era limitado pelos recursos de hardware da época (Intel 286
10 MHz). Embora não se tenha coseguido executar peças com conteúdo espectral
denso em tempo aceitável, por meio desta implementação, ela cumpriu o objetivo de
especificação de uma linguagem para síntese aditiva.
Em seguida, vieram outras implementações do SOM-A utilizando outras linguagens. Em 1991, houve uma implementação em Sun Common LISP [23] com resultados muito superiores àqueles apresentados na primeira implementação para DOS. Em
1993 o SOM-A foi implementado em C [19], melhorando consideravelmente o problema de desempenho até então enfrentado. Em 1994 foi traduzido para C++ [6]. Uma
peça que antes, na implementação em LISP, era processada em 25 dias, gastou apenas
2 horas na nova implementação em C++.
Em 1998 dá-se a primeira implementação do SOM-A em Java [25].
2.2
Descrição
Uma carta SOM-A possui dois blocos principais:
1. O bloco de definição de instrumentos musicais (orquestra), onde são definidos
tais instrumentos.
2. O bloco de definição da partitura, onde as notas que compõem a partitura são
declaradas.
Escrever uma carta espectral é escrever uma orquestra de instrumentos SOM-A, seguida de uma seqüência de notas dispostas em ordem cronológica. O arquivo formado
é submetido ao interpretador SOM-A, que produzirá as amostras de som ou a música
descrita pelas cartas.
2.2.1
Elementos
O elemento central da linguagem SOM-A é a unidade-H. Ele é responsável pela geração de uma componente espectral no contexto da linguagem. A unidade-H, que é
3
As estruturas de dados estáticas do Music V, implementadas em FORTRAN, limitavam os instrumentos a poucas componentes espectrais [25].
16
o menor instrumento possível, é um algoritmo composto por um oscilador senoidal a
tabela em que a amplitude é controlada por um gerador de envoltória. Este algoritmo
tem como entrada um valor de freqüência que é multiplicado pela ordem de freqüência
da unidade-H.
A componente espectral assim definida é caracterizada por uma freqüência, um ângulo de fase inicial e por uma função de amplitude chamada de envoltória. As amostras
de saída de sinal deste dispositivo podem ser dirigidas a um canal de áudio x ou a um
canal y, dependendo do valor do parâmetro de estereofonia.
Uma vez que os instrumentos em SOM-A são concebidos em estruturas de dados
de alocação dinâmica (como listas e árvores, por exemplo), um instrumento aditivo
poderá ser construído a partir de um número qualquer de componentes espectrais com
comportamento bem definido. Para executar uma nota, utiliza-se um comando que faz
referência ao todo ou a um subconjunto de unidades-H do instrumento. Este subconjunto de unidades-H dá à linguagem a noção de subinstrumento, que é bastante útil na
composição musical que explora a elaboração algorítmica de timbres.
A partitura a ser executada é descrita em um bloco de execução de notas musicais.
Tais notas são caracterizadas pelo instrumento que as toca, o instante inicial, a duração,
a freqüência fundamental e a amplitude. Além disso, uma partitura é definida como
uma estrutura de dados composta de dois conjuntos de listas: uma que especifica os
instrumentos da orquestra e outra que define a partitura que será executada por estes
instrumentos. Uma partitura escrita em SOM-A é denominada carta espectral.
2.3
Operadores
A linguagem SOM-A além de possuir uma sintaxe semelhante a de LISP, possui apenas
cinco operadores (garantindo a simplicidade desejada para a linguagem): VAL, INS,
EXE, STP e FIM. Suas funções e características são descritas a seguir.
2.3.1
VAL
Obrigatoriamente é o primeiro comando de uma carta espectral. Possui o formato
seguinte:
(VAL t1 t2 FA A T N L)
t1 Instante inicial da partitura.
t2 Instante final da partitura.
FA Taxa de amostragem em Hz.
A Andamento: valor que multiplica os tempos e durações das notas. (valor padrão é
1)
T Transposição: valor que multiplica as freqüências das notas. (valor padrão é 1)
N Norma: valor que multiplica a amplitude das notas.
L Valor limite para as abscissas da envoltória. (valor padrão é 720)
17
Aqui, t1 e t2 são valores em segundos.
O exemplo (VAL 0 3 44100 1 2 40 720) significa que uma carta espectral tem três
segundos de duração (pois t1 = 0 e t2 = 3), é executada a uma taxa de amostragem de
44100 Hertz (logo, freqüências de 0 a 22050 Hz podem ser representadas - segundo o
critério de Nyquist4 ), possui andamento normal (valor igual a 1), está transposta a uma
oitava acima (a freqüência de todas as notas terá o dobro do seu valor original), possui
um ganho de 40 na amplitude de todas as notas.
2.3.2
INS
Define um instrumento de acordo com a sintaxe seguinte:
(INS <vigência> <nome-instrumento> <lista-unidades-H>)
<vigência> Instante (em segundos) em que o instrumento deixa de existir.
<nome-instrumento> Seqüência de caracteres obrigatoriamente iniciada por um literal e que represente o nome do instrumento. Este nome é referenciado no
momento da execução de uma nota.
<lista-unidades-H> Lista de unidades-H. Cada unidade-H é representada por uma
estrutura da forma:
(hi φi ei Λi )
hi Ordem de freqüência da i-ésima unidade-H (número real positivo). Representa um harmônico.
φi Ângulo de fase (em graus).
ei Envoltória. É uma lista de pares de coordenadas (<ordenada> <abscissa>).
Λi Grau de estereofonia. Valor entre 0 e 1 (inclusive) que corresponde ao balanço de saídas dos canais X(esquerdo) e Y (direito).
Um exemplo de definição de instrumento utilizando a linguagem SOM-A é mostrado
a seguir:
(INS 990.0 d1
(1.0 180.0 ((0.0 0) (26.0 8) (13.0 720)) 0.0)
(3.0 180.0 ((0.0 0) (52.0 8) (26.0 720)) 0.0)
(6.0 180.0 ((0.0 0) (36.0 8) (18.0 720)) 0.5)
(9.0 180.0 ((0.0 0) (20.0 8) (20.0 720)) 0.0)
(1.0 180.0 ((0.0 0) (30.0 8) (150.0 720)) 1.0)
(3.0 0.0 ((0.0 0) (52.0 8) (26.0 720)) 1.0)
(5.0 0.0 ((0.0 0) (90.0 8) (45.0 720)) 1.0)
)
Nota-se que algumas componentes espectrais transmitem seu sinal para apenas um
canal de saída específico. Todas as unidades-H que formam este instrumento possuem
apenas três pontos de quebra compondo sua envoltória. Além disso, o instrumento
d1 possui vigência de 990 segundos (16,5 minutos), ou seja, este instrumento pode
ser utilizado apenas nos primeiros 990 segundos de uma carta espectral. Após este
período, ele deixa de existir no contexto de execução da partitura.
4
Para que um sinal seja corretamente amostrado, sua maior freqüência deve ser menor do que a
metade da taxa de amostragem. [24]
18
2.3.3
EXE
Este operador é responsável por executar uma uma seqüência de notas entre dois instantes de tempo. Sua sintaxe é a seguinte:
(EXE ta tb ) [notas] (STP)
onde [notas] = (nota) (nota) . . . (nota)
Uma nota é especificada como:
(<instrumento> <instante-inicial> <duração> <freqüência> <amplitude>)
onde
<instrumento> = <nome-instrumento> | <subinstrumento>,
e
<subinstrumento> = (<nome-instrumento> (n1 n2 ... nj )),
e ni representa a i-ésima unidade-H do instrumento definido com nome <nome-instrumento>.
O instrumento que executa a nota é referenciado pelo seu nome (executando, assim,
o instrumento com todas as suas unidades-H) ou por um subconjunto de suas unidadesH.
Um exemplo de execução de notas por um determinado instrumento é mostrado a
seguir:
(EXE 0.0 24576.0)
(d3 0 256 349.2278 0.52755904)
(d3 256 384 466.1633 0.6614173)
(d3 640 128 587.32886 0.6692913)
(d3 768 128 587.32886 0.63779527)
(d3 896 128 523.25055 0.5590551)
(d3 1024 470 466.1633 0.52755904)
(d3 1536 384 349.2278 0.511811)
(d3 1920 128 466.1633 0.6456693)
(d3 2048 128 587.32886 0.6692913)
(d3 2176 128 698.4556 0.6535433)
(d3 2304 128 698.4556 0.5984252)
(d3 2432 128 622.2533 0.5590551)
(d3 2560 470 587.32886 0.56692916)
(d3 3072 384 523.25055 0.5511811)
(d3 3456 128 698.4556 0.6535433)
(d3 3584 128 587.32886 0.54330707)
(d3 3712 128 698.4556 0.5984252)
(d3 3840 342 523.25055 0.511811)
(d3 4224 128 698.4556 0.6771653)
(d3 4352 128 391.99506 0.46456692)
(d3 4480 128 587.32886 0.6535433)
(d3 4608 512 349.2278 0.48031497)
(STP)
O bloco de código SOM-A apresentado acima representa, fielmente, o trecho da
partitura apresentada na figura 2.1.
2.3.4
STP
Este operador encerra um bloco de execução de notas. As notas presentes no bloco
EXE são executadas até que o operador STP seja encontrado ou até que o instante de
execução t seja maior ou igual a tb especificado na declaração do operador EXE.
19
Figura 2.1: Trecho do Concerto para Clarineta de Mozart (K 622)
2.3.5
FIM
O operador FIM encerra uma carta espectral.
20
Capítulo 3
Análise Espectral de Fourier
A ciência da computação, como uma ciência exata, tem uma forte fundamentação matemática. Algumas áreas desta possuem uma forte base em conceitos da física (elétricos, térmicos, quânticos, por exemplo).
A computação musical, conceito dado à área da ciência da computação que estuda
a aplicação dos computadores em problemas musicais [20], é um campo de estudo bastante interdisciplinar. Além de ter sua fundamentação na matemática e na música, possui muitos conceitos ligados à psicologia, fisiologia e à física (principalmente devido
aos fenômenos ondulatórios e acústicos). Um exemplo disto é a divisão dos artigos do
Journal of the Acoustical Society of America em categorias tais como: "Underwater
Sound", "Music and Musical Instruments", "Psychological Acoustics" e "Physiological
Acoustics" [22].
Estudar a computação musical não significa apenas conhecer muito sobre música
e sobre computadores. Para se ter um aproveitamento maior nos estudos sobre este
tema e para produzir novos conceitos e novas idéias relacionadas a este assunto, é
necessário conhecer primeiramente os fundamentos físicos e matemáticos envolvidos.
Esta base se torna fundamental nas várias atividades que podem ser desenvolvidas na
computação musical como, por exemplo, as sínteses aditiva e subtrativa.
Conhecer apenas os números e fórmulas envolvidas neste processo também não
são suficientes para o desenvolvimento de um bom trabalho nesta área. É necessário
conhecer a relação entre os aspectos físicos do som e suas características perceptivas
[22].
O som é uma variação de pressão no ar (meio mais comum de transmissão do som)
durante um período de tempo [18]. Como este som se apresenta depende de como é
aplicada esta variação de pressão no ar.
Uma vez que o SOM-A é um programa de síntese aditiva, o primeiro passo da
síntese aditiva a ser dado para existir a síntese de um instrumento musical é buscar o
conteúdo espectral (as constituintes espectrais) que definem o timbre do instrumento.
É interessante ressaltar que cada instrumento tem suas próprias características de sonoridade e timbre. Portanto, as funções de onda que irão gerar este som são diferentes
para cada instrumento musical.
O processo de análise espectral é fundamental para a síntese de sons utilizando o
computador. É por meio deste processo que as componentes espectrais de um sinal de
áudio são extraídas, possibilitando, assim, a síntese deste sinal pelo computador.
Este capítulo aborda uma série de conceitos relacionados à matemática fundamen21
tal do processo de análise espectral. Por motivos de complexidade e extensão razoáveis sobre este assunto, apenas os conceitos básicos necessários ao entendimento do
processo de análise espectral são abordados. As informações matemáticas aqui apresentadas foram baseadas em [27] e [14]. Várias provas foram omitidas pois não fazem
parte do escopo deste projeto.
3.1
A série de Fourier
Jean-Baptiste Joseph Fourier definiu uma técnica matemática para analisar formas de
ondas periódicas através do princípio de superposição de ondas senoidais tendo amplitude, freqüência e fase apropriadas [22], no início do século XIX. A principal contribuição de seu trabalho foi demonstrar que uma forma de onda periódica pode ser
representada por um somatório de ondas senoidais, conforme ilustra a figura 3.1.
Figura 3.1: A onda não-senoidal e periódica 3 é obtida pela soma das ondas 1 e 2
De acordo com [27] e [14], as séries de Fourier são definidas da seguinte forma:
seja uma função f (t) periódica de período T . Define-se como série de Fourier a função
f (t) tal que:
f (t) =
a0
+ a1 cos ω0 t + a2 cos 2ω0 t + · · · + b1 sen ω0 t + b2 sen 2ω0 t + · · ·
2
(3.1)
isto é,
∞
a0 X
f (t) =
+
(an cos nω0 t + bn sen nω0 t)
2
n=1
22
(3.2)
onde ω0 = 2π
é a freqüência angular fundamental. ωn = nω0 é chamado de n-ésimo
T
harmônico da função, e o primeiro harmônico (ω0 ) é chamado de componente fundamental pois representa a freqüência angular fundamental. Este tipo de série é chamada
série trigonométrica de Fourier.
Com isto, pode-se imaginar que uma função não-senoidal, mas periódica, f (t) pode
ser formada por meio da soma de funções senoidais desde que se determinem os valores
dos coeficientes an e bn .
Multiplicando-se
os dois lados da equação 3.2 por cos mω0 t, integrando-os no in
e
tervalo − T2 , T2 e utilizando as relações de ortogonalidade seguintes (onde ω0 = 2π
T
T é o período da função), obtém-se
Z T /2
0
para m 6= n
cos(mω0 t) cos(nω0 t)dt =
(3.3)
T/2 para m = n 6= 0
−T /2
Z T /2
0
para m 6= n
sen (mω0 t)sen(nω0 t)dt =
(3.4)
T/2
para
m = n 6= 0
−T /2
Z T /2
sen(mω0 t) cos(nω0 t)dt = 0 para todo m e n
(3.5)
−T /2
isto é:
2
an =
T
T /2
Z
f (t) cos(nω0 t)dt
(3.6)
−T /2
são os coeficientes pares de Fourier da função f , onde n = 0, 1, 2, 3, · · ·
Da mesma forma, multiplicando-se
os dois lados da equação 3.2 por sen mω0 t,
T T
integrando-os no intervalo − 2 , 2 e utilizando as relações de ortogonalidade anteriores, encontra-se:
2
bn =
T
Z
T /2
f (t)sen(nω0 t)dt
(3.7)
−T /2
que são os coeficientes ímpares de Fourier da função f , onde n = 1, 2, 3, · · ·
Esta denominação de coeficientes pares e ímpares vem do conceito de funções
pares (quando f (−x) = f (x). Ex.: cos x) e funções ímpares (quando f (−x) = −f (x).
Ex.: senx). Desta forma, an são os coeficientes pares de Fourier da função f pois os
termos só aparecem em cossenos. Seguindo-se a mesma idéia, bn são os coeficientes
ímpares de Fourier da função f , pois os termos só aparecem em senos.
3.1.1
Séries de Fourier: representação complexa
Em algumas aplicações das séries de Fourier não é conveniente a utilização da representação trigonométrica. Torna-se necessário expressá-las por uma forma mais conveniente. Neste caso, em termos de exponenciais complexas (e±inω0 t ).
Sabendo que o cosseno e o seno podem ser expressos em termos de exponenciais,
1
cos(nω0 t) = (einω0 t + e−inω0 t )
2
23
(3.8)
1 inω0 t
(e
− e−inω0 t )
2i
é possível substituir os termos cos e sen na equação 3.2 e obter:
sen(nω0 t) =
(3.9)
∞
X
f (t) = c0 +
(cn einω0 t + c−n e−inω0 t )
= c0 +
n=1
∞
X
inω0 t
cn e
n=1
=
∞
X
+
−∞
X
cn einω0 t
n=−1
cn einω0 t
(3.10)
−∞
com cn = 21 (an −ibn ) e c−n = 12 (an +ibn ). Esta equação é chamada de forma complexa
da série de Fourier de f (t).
Partindo-se da equação cn = 21 (an − ibn ), e substituindo os valores de an e bn
por suas equações trigonométricas (apresentadas em 3.6 e 3.7), chega-se na seguinte
equação:
cn
1
=
T
Z
1
T
Z
=
3.1.2
T /2
f (t)e−inω0 t dt
−T /2
T
f (t)e−inω0 t dt
(3.11)
0
Integral de Fourier
A integral de Fourier é uma ferramenta fundamental para encontrar a transformada de
Fourier e é definida da seguinte maneira:
Z ∞
H(f ) =
h(t)e−j2πf t dt
(3.12)
−∞
onde t é o tempo e f é a freqüência. Desta forma, h(t) é uma função no domínio do
tempo e H(f ) é uma função no domínio da freqüência.
Geralmente, a transformada de Fourier é uma quantidade complexa e pode ser expressa da seguinte forma:
H(f ) = R(f ) + jI(f ) = |H(f )|ejθ(f )
(3.13)
onde R(f ) representa a parte real da transformada de Fourier; I(f ) representa a parte
imaginária desta transformada;
|H(f )| representa a magnitude da amplitude de H(f )
p
2
e é calculada como R (f ) + I 2 (f ); θ(f ) é o ângulo de fase da transformada de
I(f ) √
Fourier e é calculado como arctan R(f
;
e
j
=
−1 1 .
)
√
A letra j é utilizada para representar −1 pois no ambiente da engenharia a letra i (como é utilizada
na matemática) já é utilizada para representar a corrente elétrica.
1
24
Define-se a transformada inversa de Fourier como:
Z ∞
H(f )ej2πf t df,
h(t) =
(3.14)
−∞
e a condição
Z
∞
|h(t)|dt < ∞
(3.15)
−∞
é suficiente mas não é necessária para que uma transformada de Fourier exista.
3.1.3
Transformada Discreta de Fourier
A transformada discreta de Fourier1 é um membro da família de técnicas matemáticas
utilizadas para realizar a análise de Fourier.
As funções seno e cosseno utilizadas na DFT são geralmente chamadas de funções bases da DFT. A saída de uma DFT é um conjunto de números que representam
amplitudes de funções seno e cosseno [26].
Embora possa parecer simples, o cálculo de uma transformada discreta de Fourier
exige muito processamento computacional (envolve um número considerável de somatórios, integrações e substituições) e se torna inviável para o processo de análise
espectral de um sinal de áudio. A DFT configura uma correspondência de um-para-um
entre o número de amostras de entrada e o número de freqüências que ela resolve.
Em virtude desta complexidade, algoritmos de resolução da transformada discreta
de Fourier foram desenvolvidos e aperfeiçoados no decorrer do tempo. O algoritmo
mais conhecido de resolução desta transformada é conhecido como transformada rápida de Fourier2 . Com este método é possível calcular uma DFT, com seu algoritmo
de ordem de complexidade Θ(n2 ), com um algoritmo de ordem de complexidade igual
a Θ(n log n) [7].
3.2
Transformada rápida de Fourier
O algoritmo da transformada rápida de Fourier (FFT, do inglês Fast Fourier Transform)
foi apresentado em 1965 por J. W. Cooley e J. W. Tukey no artigo An algorithm for
the machine calculation of complex Fourier Series da Mathematics Computation. Sua
forma iterativa [7] é apresentada no algoritmo 1 e possui ordem de complexidade igual
a Θ(n log n):
Neste algoritmo n representa o número de amostras que são aplicadas ao algoritmo,
o valor ωm = e2πi/m é chamado de m-ésima raiz complexa principal de unidade. Uma
n-ésima raíz complexa de unidade é um número complexo ω tal que ω n = 1. As
n raízes complexas de unidade estão igualmente espaçadas em torno de um círculo
de raio unitário centrado na origem de um plano complexo. Todas as outras raízes
k
complexas de unidade são potências de ωm . O fator ωm
é conhecido como twiddle
factor para k = 0, 1, . . . , m/2 − 1. O bloco de código executado nas linhas de 8 a
1
2
DFT - Discrete Fourier Transform
FFT - Fast Fourier Transform
25
Algoritmo 1 FFT-Iterativa (a)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
. ocorre a inversão dos bits. Elementos de a para A
. n é uma potência de 2
n ← length[a]
for s ← 1 to lg n do
m ← 2s
ωm ← e2πi/m
for k ← 0 to n − 1 by m do
ω←1
for j ← 0 to m/2 − 1 do
t ← ωA[k + j + m/2]
u ← A[k + j]
A[k + j] ← u + t
A[k + j + m/2] ← u − t]
ω ← ωωm
end for
end for
end for
14 realiza a operação conhecida como operação borboleta da FFT. A idéia é tomar
os elementos em pares, computar a DFT3 de cada par usando uma operação borboleta
e substituir o par por sua DFT. O vetor então contém n/2 DFTs de dois elementos.
Assim, tomam-se estas n/2 DFTs em pares e calcula-se a DFT de quatro elementos do
vetor por meio da execução de duas operações borboleta, substituindo as DFTs de dois
elementos por uma de quatro elementos. O vetor passa a conter n/4 DFTs de quatro
elementos. Este processo é continuado até que se tenham duas DFTs de n/2 elementos.
Para isso é utilizado o vetor A[0..n − 1] que inicialmente contém os elementos do vetor
de amostras de entrada a ordenados de acordo com o algoritmo de inversão dos bits da
posição do vetor. Para facilitar a visualização deste processo é interessante imaginar
cada amostra do vetor como sendo a folha de uma árvore binária semi-completa4 . Com
isto em mente, a variável s representa o nível da árvore que é iterado de 1 até o valor da
altura da árvore: lg(n). A variável m ← 2s armazena o número máximo de elementos
presentes no nível s da árvore.
O bloco de código das linhas 6 a 15 combina as duas DFTs de 2s−1 elementos
em A[k..k + 2s−1 − 1] e A[k + 2s−1 ..k + 2s − 1] em uma DFT de 2s elementos em
A[k..k + 2s − 1].
O método da FFT utiliza a estratégia de dividir para conquistar. Divide-se a seqüência de entrada de N (N é potência de 2) pontos pela metade, gerando dois polinômios:
um formado pelos coeficientes pares, outro, pelos coeficientes ímpares5 [7].
Para que a seqüência de saída de uma FFT esteja na ordem crescente, a seqüência
de amostras de entrada deve ser armazenada em uma ordem definida através da inversão dos bits da representação binária dos índices destas amostras. Para uma amostra
contendo 8 pontos (N = 8), a inversão dos bits ocorre da seguinte maneira:
3
Discrete Fourier Transform
Todas as folhas estão no último ou penúltimo níveis.
5
Estes coeficientes representam a posição de cada ponto nesta amostra.
4
26
Índice Binário
0
000
1
001
2
010
3
011
4
100
5
101
6
110
7
111
Bits Invertidos Índice dos bits invertidos
000
0
100
4
010
2
110
6
001
1
101
5
011
3
111
7
O resultado da FFT é composto de uma estrutura de dados contendo as componentes que se inicia na freqüência zero e se encerra na freqüência igual à metade da taxa
de amostragem do sinal no tempo.
3.3
Análise espectral
A análise espectral consiste na captura e interpretação dos valores obtidos de uma
transformada de Fourier. O espectro de freqüências gerado pode ser representado graficamente, dentre outros, por dois tipos de gráficos: de linha (estático) e variante no
tempo (dinâmico). Para representar graficamente a análise espectral de instrumentos
musicais, utiliza-se o gráfico de espectro dinâmico.
3.3.1
Espectro dinâmico
Um espectro dinâmico é a representação do espectro de freqüências no decorrer do
tempo. Ou seja, para diferentes pontos no tempo tem-se espectros de freqüência diferentes.
É possível representar o espectro de freqüências de uma nota de um instrumento
musical por meio do espectro estático contendo apenas a amplitude máxima das ordens
de freqüências. Isto é útil mas não é o ideal para analisar este espectro em função do
tempo. Uma nota quando tocada, por exemplo, possui variações de amplitudes no seu
espectro durante o período de tempo em que é executada.
Um espectro variante no tempo mostra a alteração da mistura de freqüências na
duração de um evento. Pode ser desenhado como um gráfico tridimensional do espectro
versus o tempo. Estes gráficos alinham uma série de gráficos estáticos, um após o
outro. O gráfico montado com esta forma de representação do espectro é um gráfico
em três dimensões (freqüência versus tempo versus amplitude) semelhante ao gráfico
da figura 3.2.
27
Figura 3.2: Espectro variante no tempo de um tom puro a 440 Hz com envoltória linear
decrescente (efeito de fade out do início ao final do sinal).
28
Capítulo 4
A Matemática dos Instrumentos
Musicais
Instrumentos musicais são objetos construídos ou modificados com o propósito de produzir e interpretar música. Em outras palavras, tudo o que possa produzir som e ser
conduzido por uma pessoa pode ser considerado como um instrumento musical.
Vários são os tipos de instrumentos musicais: de cordas, de percussão, de sopro,
dentre outros. Cada tipo de instrumento possui características tímbricas diferentes e
cada um deles, dentro de seu grupo (ou família), tem suas próprias peculiaridades. A
diferenciação dos timbres se dá por vários fatores, dentre eles o conjunto de componentes que o formam e a envoltória de cada uma destas componentes.
Os instrumentos musicais são sintetizadores de sons complexos. Através da vibração de uma corda, do fluxo de ar ou da vibração de membranas, os instrumentos
produzem o que é chamado de som complexo. Os sons complexos (por vezes chamados de tons complexos) são sons compostos por uma mistura de tons simples1 com
variações de amplitudes e freqüências diferentes. E é o número, a freqüência e a variação de amplitude destas componentes parciais que determinam a qualidade de um
dado tom complexo [4].
4.1
Componentes
O conceito de componente está relacionado com a estrutura do som analisado. Cada
componente do som complexo possui uma ordem de freqüência, uma envoltória própria (ver seção 4.2) e um ângulo de fase inicial.
Na maioria dos instrumentos sinfônicos, a freqüência das componentes espectrais
são múltiplos da freqüência fundamental. Ou seja, se uma nota Lá 4 (440 Hz) é executada por um determinado instrumento musical, dependendo das suas características
tímbricas, tem-se que a componente fundamental deste tom complexo é 440 Hz. As
outras componentes são formadas por valores múltiplos da fundamental. Neste caso, a
segunda componente teria uma freqüência de 880 Hz, a terceira 1320 Hz e assim por
diante. Em outros casos, é possível que um som complexo não possua sua componente
fundamental mas tenha a presença de harmônicos desta fundamental ausente.
1
São sons representados por uma simples freqüência. Também chamados de tons puros.
29
Entretanto, esta idéia dos múltiplos da freqüência fundamental nem sempre é contemplada em sua totalidade. Instrumentos de sopro cuja extremidade do tubo é fechada,
por exemplo, produzem sons complexos formados apenas pelas componentes ímpares.
Em outras palavras, esta categoria de instrumentos produz sons que possuem apenas
as componentes fundamental f0 e os seus múltiplos ímpares: 3f0 , 5f0 , 7f0 , etc.
Geralmente a componente fundamental é a mais intensa dentre as componentes, ou
seja, é a que possui maior energia no espectro. Porém existem instrumentos, como o
trombone, por exemplo, em que o harmônico mais intenso não é a fundamental.
4.2
Envoltória
A envoltória é uma função de variação do valor da amplitude no domínio do tempo.
O timbre de um instrumento musical é fortemente dependente da existência de componentes espectrais e da variação da amplitude de cada componente no tempo que é
justamente essa envoltória. O som produzido por um instrumento musical não atinge
seu valor máximo instantaneamente nem cai instantaneamente para a intensidade zero
quando deixa de ser tocado.
A envoltória possui três estágios principais: ataque, sustentação e decaimento. O
estágio de ataque é o responsável por associar a característica do timbre a uma família
de instrumentos. Alguns instrumentos permitem que a nota seja sustentada por um
tempo antes de diminuir sua intensidade, porém não é obrigatório que ocorra. Este
estágio é chamado de sustentação [8].
1. Ataque: período de tempo entre o acionamento da nota e o instante que a envoltória atinge o seu ponto máximo.
2. Sustentação: nível de instensidade que a envoltória mantém no período em que
o instrumento sustenta a nota.
3. Decaimento: período de tempo entre o ponto final da sustentação e o ponto final
da nota.
São chamados de pontos de quebra os pontos no tempo onde oncorrem alterações
no valor da amplitude. A figura 4.1 mostra a envoltória da componente fundamental
de um trombone baixo tocando uma nota Dó 3 a partir de um sinal disponibilizado
pela Universidade de Iowa [28]. É possível caracterizar os estágios da envoltória nos
seguintes pontos aproximados:
Ataque: pontos de quebra de 0 até 125
Sustentação: pontos de 125 até 660
Decaimento: pontos de 660 até 720
30
Figura 4.1: Envoltória da componente fundamental de um trombone baixo (sinal disponibilizado pela Universidade de Iowa [28]). A nota tocada foi um Dó 3.
4.3
Instrumentos SOM-A
A linguagem SOM-A possui um mecanismo extremamente robusto para a definição
de instrumentos musicais (conforme visto em 2.3.2). Com ela, é possível criar instrumentos com um número qualquer de componentes espectrais (uma número qualquer
de harmônicos), cada uma contendo um comportamento espectral bem definido e individualizado.
A execução de notas musicais por este instrumento pode ocorrer de duas maneiras distintas. Em uma delas, todas as unidades-H da definição do instrumento são
executadas conjuntamente. Na segunda, apenas um sub-conjunto bem definido destas
unidades são selecionados para serem executados. Esta capacidade da linguagem permite a utilização do conceito de sub-instrumento [1], possibilitando a construção de
instrumentos com uma base semelhante de componentes.
Originalmente, o SOM-A foi projetado para a execução de peças algorítmicas com
a utilização de instrumentos matemáticos complexos. Tais instrumentos podem ser
formados por centenas ou até milhares [3] de unidades-H e geralmente eles têm a
característica de serem atonais. O fato de serem atonais inviabiliza a utilização dos
mesmos na execução de partituras tonais. Eles até poderiam ser utilizados, porém o
resultado final não é o esperado de uma música tonal.
4.3.1
Motivação
Aproveitando-se da capacidade do SOM-A em construir instrumentos com um número
qualquer de componentes utilizando-se o método da síntese aditiva, vislumbrou-se a
criação de uma ferramenta capaz de analisar sinais digitalizados de instrumentos musicais reais e a posterior definição destes na sintaxe da linguagem SOM-A.
Com isto, a utilização de instrumentos musicais reais na interpretação de cartas
espectrais que representam partituras tonais é facilitada.
31
4.4
Um método para analisar instrumentos musicais
A utilização da transformada de Fourier é essencial no processo de análise de instrumentos musicais. Entretanto, a aplicação desta, como ela é, diretamente sobre o sinal
de áudio não atinge o objetivo proposto.
Como foi visto nas seções anteriores, o timbre é definido pelo comportamento dinâmico das componentes espectrais, isto é, pela ação de suas envoltórias. Ao se aplicar
a transformada de Fourier ao sinal de entrada, consegue-se extrair as componentes
espectrais do instrumento analisado, porém não há a definição da envoltória de cada
uma destas componentes. Neste caso tem-se uma ótima resolução em freqüência mas
a localização temporal é prejudicada. Assim não há como determinar a variação no
valor da amplitude de cada componente espectral no tempo e, conseqüentemente, suas
envoltórias.
Para adaptar a análise de Fourier às situações mais comuns de análise de sinais de
áudio, usa-se uma seqüência de procedimentos chamada de Short-Time Fourier Transform ou STFT [24]. A STFT é composta pelas etapas seguintes:
1. Divisão do sinal de entrada em segmentos (janelas).
2. Multiplicação de cada segmento por uma função janela.
3. Aplicação da transformada de Fourier ao segmento resultante.
A figura 4.2 representa um resumo de todo o processo da STFT.
4.4.1
“Enjanelamento”(Windowing)
O processo de enjanelamento corresponde aos itens 1 e 2 citados em 4.4. Como a
terceira etapa da STFT é a aplicação da FFT ao segmento, é necessário que o número
de amostras do segmento seja uma potência de dois, conforme visto em 3.2.
Desta forma, divide-se o sinal de entrada em segmentos com um número de amostras equivalentes a uma potência de dois. Quando necessário, completa-se o último
segmento com zeros (zero padding). Geralmente o número de amostras por segmento
é 512, 1024 ou 2048. Esta divisão do sinal de entrada em segmentos é acompanhada de
uma sobreposição de janelas para evitar efeitos indesejados de aliasing2 , dentre outros.
O segundo passo deste processo é a multiplicação do sinal por uma função janela
para limitar o seu tempo de duração. Esta função janela é uma função matemática que
é diferente de zero somente sobre um intervalo de tempo.
Este processo é vantajoso pois facilita a visualização do espectro. Limitando-se a
análise a pequenos segmentos, é possível saber, de forma mais precisa, quando estas
freqüências ocorrem. Além disso, o enjanelamento mantém o uso de memória da máquina em um patamar aceitável (a memória não ocupa-se a memória inteiramente para
a realização destes cálculos) e, com isso, conseguem-se resultados mais rapidamente
sem sobrecarregar os recursos de hardware.
2
Distorção de freqüência causada pela utilização de uma taxa de amostragem incorreta.
32
Figura 4.2: Visão geral do processo da STFT.
A janela depende basicamente de dois parâmetros: o tamanho e a forma da janela.
O tamanho está diretamente relacionado à resolução de freqüência. Após a FFT, as
freqüências estarão espaçadas em múltiplos inteiros de
T
N
(4.1)
em que T é a taxa de amostragem do sinal e N é o número de amostras presentes na
janela. O desenho da janela está relacionado com a função matemática que a forma.
Alguns exemplos são:
• Retangular: j(n) = 1
1 n−(N −1)/2
)
σ(N −1)/2
• Gauss: j(n) = e− 2 (
, com σ ≤ 0.5
• Hamming: j(n) = 0.53836 − 0.46164 cos ( N2πn
)
−1
)
• Hann: j(n) = 0.5 1 − cos ( N2πn
−1
com j sendo a função de janela, e n um valor inteiro de 0 a N − 1. O programa
INStractor (capítulo 5) utiliza a janela de Hamming como função janela.
A multiplicação do segmento com a função de janela se dá de amostra em amostra,
ou seja, x[n]×j[n]. A multiplicação de um sinal por outro no domínio do tempo resulta
na convolução no domínio da freqüência [24].
33
4.4.2
Aplicando a transformada rápida de Fourier
O terceiro passo da STFT é submeter o segmento resultante da multiplicação com a
função de janela à transformada de Fourier. Para o cálculo desta transformada, utilizase o algoritmo da transformada rápida de Fourier (seção 3.2).
Cada bloco de dados gerado pela FFT é chamado de quadro. Cada quadro contém
um espectro de magnitude, que representa os valores de amplitude de toda componente
de freqüência, e um espectro de fase que fornece o valor inicial da fase de cada componente de freqüência ao longo da duração do sinal. Uma vez que a transformada de
Fourier é executada em sua forma complexa, obtém-se os valores de magnitude e fase
por meio das equações
p
M (x) = <(x)2 + =(x)2
(4.2)
e
P (x) = arctan
respectivamente.
34
=(x) <(x)
(4.3)
Capítulo 5
INStractor: uma ferramenta de
extração de instrumentos musicais
para a linguagem SOM-A
Tendo como motivação o que foi apresentado na seção 4.3.1, foi desenvolvido um programa chamado INStractor capaz de analisar o sinal digital de um instrumento musical
real e de retornar a definição deste instrumento na sintaxe da linguagem SOM-A.
O programa divide o sinal de entrada em segmentos, multiplica cada segmento por
uma função de janela e, em seguida, realiza a transformada de Fourier. Com isso,
consegue-se ter uma análise espectral do sinal (em função do tempo), onde cada segmento corresponde a um trecho do sinal de entrada. Em outras palavras, o programa é
a implementação do método descrito na seção 4.4.
5.1
Fluxo de funcionamento
Para sua correta execução, o programa exige a entrada de um arquivo de áudio em
constituído representando um sinal digitalizado que é obtida através da gravação, em
condições ideais1 , de um instrumento musical.
Após a entrada do arquivo, é verficado se o seu tipo é válido na API Java Sound.
Caso seja, o arquivo é aberto. Algumas informações referentes ao conteúdo do arquivo
são apresentadas, como, por exemplo, o número de canais utilizados, a taxa de amostragem, o número de bits por amostra, o tipo do arquivo (wave, aiff, au, dentre outros),
duração do sinal e tamanho do arquivo. Em seguida, é permitido ao usuário do INStractor extrair o instrumento na sintaxe SOM-A. Neste momento os seguintes passos
são executados:
• O programa lê as amostras de áudio do arquivo.
• O tamanho da janela da FFT é definido.
• É criado um buffer com os valores da função de janela escolhida.
1
Em uma sala especialmente preparada para este tipo de gravação e com equipamentos específicos,
de forma que não ocorram interferências externas nem ruídos.
35
• Para cada segmento do sinal de entrada contendo um número de amostras igual
ao tamanho da janela da FFT, executam-se:
– Multiplicam-se amostras do segmento do sinal de entrada por valores da
função de janela.
– Realiza-se a transformada rápida de Fourier. A FFT retorna um valor de
magnitude e um valor de fase para cada componente espectral no instante
de tempo analisado, dentro da resolução de freqüência (vide equação 4.1)
que se tem.
– Desloca-se um número pré-definido de amostras do sinal de entrada e,
toma-se então, um novo segmento (neste momento ocorre a sobreposição
de amostras para evitar efeitos de aliasing).
Durante o desenvolvimento do INStractor, percebeu-se que o número de amostras
do segmento a ser analisado afetava no cálculo dos valores de fase de cada componente
espectral. Ao pesquisar sobre este comportamento, foram encontradas referências ([9]
e [10]) que mencionavam explicitamente a relação entre valores de fase e número de
amostras por período. Quando não há um número inteiro de períodos de uma freqüência no intervalo de amostras analisado, ocorre o spectral leakage2 e, com isso, o cálculo
incorreto do valor de fase.
Para a obtenção dos valores corretos do ângulo de fase inicial de cada componente,
é feita uma segunda passagem no sinal de entrada, tomando-o com uma taxa de amostragem que seja um valor correspondente a uma potência de dois3 . Em seguida, é calculada a transformada de Fourier da primeira janela contendo um número de amostras
igual ao da taxa de amostragem (no caso, 32768 amostras). Um segundo de duração
do sinal contém um número inteiro de ciclos para qualquer freqüência presente neste
sinal e obtém-se o valor correto do ângulo de fase inicial das componentes espectrais.
Ao final deste procedimento de análise do sinal, as componentes espectrais são
identificadas a partir do valor das amplitudes de cada componente espectral4 , bem
como a envoltória de cada uma delas e os valores de fase inicial de cada componente.
Todos os valores de amplitude são normalizados para um valor máximo de 255 para facilitar a vizualização gráfica. De posse destes números, constrói-se um instrumento de
acordo com a sintaxe da linguagem SOM-A e são construídos gráficos da envoltória de
cada componente espectral em função do tempo (representado pelo valor da abscissa
dos pontos de quebra).
2
O spectral leakage ocorre devido à multiplicação das amostras do segmento por uma função de
janela. É caracterizado pelo "vazamento"de freqüências indesejadas no espectro. Em outras palavras, a
energia de qualquer freqüência no sinal é esparramada por todo o espectro de freqüências.
3
O arquivo pode ter sido gravado ou convertido para esta taxa. No caso do INStractor, este valor é
32768 Hz.
4
Os valores de amplitudes são ordenados decrescentemente e armazenados em um mapa com suas
respectivas freqüências. Assim as freqüências componentes mais intensas são as que formam o sinal de
entrada.
36
5.2
Arquitetura
O INStractor foi construído com base em princípios solidificados de padrões de projeto.
O programa utiliza o padrão arquitetural5 MVC (Model - View - Controller).
O MVC divide uma aplicação em três componentes principais. O Modelo contém o
núcleo de funcionalidades e dados. As Vistas mostram as informações para o usuário.
Elas são as telas da aplicação. Os Controladores manipulam as informações de usuário.
O conjunto de visões e controladores compõe a interface do usuário [5].
A separação dos componentes modelo, vista e controle permite múltiplas vistas do
mesmo modelo. Se o usuário altera o modelo por meio da vista (que está associada
ao módulo controlador), todas as vistas dependentes dos dados desse modelo devem
refletir as modificações. Os modelos notificam as visões quando suas informações são
alteradas e atualizam estas visões com os novos valores.
No INStractor, o padrão MVC não está implementado na maneira clássica onde as
vistas interagem diretamente com o modelo, e o controlador funciona apenas como um
mecanismo (figura 5.1) [11] que mapeia ações do usuário a modelos. Nele, o controlador está entre o modelo e a vista. A maior diferença entre estas duas implementações
de MVC é o fato de que nesta segunda, as alterações no estado do modelo são comunicadas para a vista por meio do controlador. O módulo de controle funciona como um
intermediário das comunicações entre modelo e vista (figura 5.2).
Figura 5.1: Modelo clássico do MVC.
5.2.1
Empacotamento
O programa possui uma hierarquia de pacotes que contempla desde o domínio do Brasil (br) até o domínio do próprio programa (instractor), passando pelos domínios da
universidade (unb), do departamento (cic) e do laboratório de computação multimídia
5
Ou arquitetônico.
37
Figura 5.2: Modelo do MVC utilizado no INStractor.
(lcmm). Esta organização se dá para evitar conflitos entre nomes de classes em implementações futuras ou até mesmo implementações paralelas de classes do mesmo
programa.
5.2.1.1
O pacote br.unb.cic.lcmm.instractor
Este pacote contém todas as classes e pacotes utilizados no domínio do INStractor.
Contém os sub-pacotes:
• constants: contém classes com atributos estáticos que representam constantes do programa. Um exemplo é a classe PreferencesConstants que contém
os valores padrão de configuração do programa.
• entities: agrupa objetos que têm função exclusiva de manter e transportar
informações entre classes de negócio e controladoras. São conhecidos como
POJO (Plain Old Java Objects)6 .
• entities.audiofile: contém entidades que guardam informações referentes ao arquivo de áudio dado como entrada.
• main: contém a classe principal pela qual o programa é inicializado.
• modules.business: contém classes responsáveis por executar operações
relacionadas ao negócio do programa. A classe PhaseBusiness, por exemplo,
é responsável por executar todas as regras de negócio relacionada ao cálculo e
definição de fases das componentes espectrais.
6
Objetos simplificados que não contém nenhuma funcionalidade específica.
38
• modules.business.filter: contém classes que representam filtros de
arquivos. Quando uma janela para abertura ou gravação de arquivo é aberta,
escolhem-se os tipos de arquivos que devem ser mostrados. Neste caso, apenas
o filtro para arquivos de instrumentos SOM-A (.ins) é utilizado.
• modules.charts.j2d: pacote que contém as classes responsáveis pelo desenho de gráficos em duas dimensões.
• modules.charts.j3d: pacote que contém as classes responsáveis pelo desenho de gráficos em três dimensões.
• modules.controller: pacote que contém as controladoras do padrão MVC.
• modules.model: pacote que contém as classes de modelo do padrão MVC.
• modules.spectralanalysis: contém as classes utilizadas para o cálculo
da transformada rápida de Fourier.
• modules.utils: contém classes utilitárias de todo o sistema.
• modules.utils.math: pacote composto por classes com operações matemáticas que podem ser utilizadas em todo o sistema.
• modules.validation: contém classes de validação de dados de entrada.
AudioFileValidation é uma classe que realiza a validação de um arquivo de
áudio.
• modules.view: contém as classes de visão do padrão MVC. Corresponde às
telas do programa.
• modules.view.swingutils: classes utilitárias para a manipulação de threads no Swing7 .
• test: pacote contendo classes de teste do programa.
5.2.2
APIs externas
O INStractor utiliza algumas APIs de terceiros no intuito de facilitar o desenvolvimento do programa e a execução de algumas tarefas. Ao invés de reimplementar uma
certa funcionalidade, utilizam-se bibliotecas prontas e testadas que realizam o mesmo
trabalho. Além disso, o fato destas APIs serem disponibilizadas gratuitamente e sob
licenças livres para a utilização, possibilita uma gama enorme de sugestões de melhorias e contribuições por parte dos usuários. A qualidade do código é assegurada pois
quanto mais estas bibliotecas são testadas e utilizadas, maiores são as oportunidades
de se encontrarem erros e maiores são as chances de solucioná-los.
As bibliotecas externas que foram utilizadas no desenvolvimento do INStractor são:
JFreeChart [15] e Sonogram [17].
7
API para construção de interfaces gráficas em Java.
39
5.2.2.1
JFreeChart
O JFreeChart é uma biblioteca Java para a construção de gráficos. É um software livre
distribuído sob os termos da GNU Lesser General Public License [13], que permite a
utilização em aplicações proprietárias. O projeto foi fundado em fevereiro do ano 2000
e atualmente conta com a contribuição de uma comunidade com muitos desenvolvedores.
Do JFreeChart foram utilizadas as classes para o desenho de gráficos em duas dimensões.
5.2.2.2
O software Sonogram
O Sonogram é um programa que contém os métodos da transformada rápida de Fourier (FFT), análise cepstral, transformações wavelets, dentre outros. Esse software
originou-se de um módulo de análise espectral do software de análise de informações
audiovisuais, Anvil [16], de Michael Kipp no German Research Center for Artificial
Intelligence (DFKI). O Sonogram está sob a licença Academic Free License versão 2.1
[21].
Do Sonogram foram utilizadas classes para o cálculo da FFT. Porém, por não realizar os cálculos dos valores de fase, algumas destas classes foram alteradas.
5.3
5.3.1
Estruturas de dados
Vetor
Após o cálculo da FFT para um segmento de amostras do sinal, tem-se como saída
deste procedimento, um vetor contendo os valores de magnitude para cada índice de
freqüência (obedecendo o teorema de Nyquist). Além deste vetor de magnitudes, temse um vetor para os valores de fase.
O primeiro segmento de amostras representa o primeiro instante de tempo, ou seja,
o tempo t0 . Desta forma, para ti (com i = 1, 2, 3, 4, ..., f onde f é o instante final do
sinal) tem-se um vetor de magnitude e fase para cada segmento. Tais vetores são armazenados em um estrutura de dados da linguagem Java chamada Vector que nada mais
é que uma classe com as mesmas características dos vetores, porém com a diferença
de que seu tamanho não é fixo, cresce a medida da necessidade do programa. Assim,
tem-se um Vector de vetores com valores de magnitude e outro Vector de vetores
com valores de fase.
5.3.2
Lista
Após o sinal ter sido totalmente processado, cria-se uma lista com os valores das componentes (os harmônicos) que o compõem.
5.3.3
Mapa
Um mapa é uma estrutura de dados caracterizada por uma chave e um valor. São
utilizados para agrupar informações sobre a envoltória de cada componente espectral
40
de um sinal com as chaves sendo representadas pela componente e o valor por outro
mapa com chave e valor representados pelo instante de tempo e valor da amplitude,
respectivamente.
5.4
Algoritmos essenciais
Nesta seção são apresentados alguns algoritmos essenciais para o funcionamento do
INStractor.
O primeiro é o algoritmo da FFT, que é implementado no INStractor pela classe
FastFourierTransform (algoritmo 2). A inversão dos bits ocorre na mesma classe
por meio do método do algoritmo 3.
Algoritmo 2 Implementação da FFT
Vide quadro 1.
Algoritmo 3 Inversão de bits
Vide quadro 2.
Algoritmo 4 Criação da janela de Hamming
Vide quadro 3.
Entretanto, antes de executar a FFT, ocorre a multiplicação de um segmento do
sinal por uma função de janela. O método que cria o vetor com os valores da função
de janela (de Hamming, neste caso) é apresentado pelo algoritmo 4 por meio da classe
WindowFunktion.
Os algoritmos apresentados são suficientes para o cálculo da FFT. É interessante
ressaltar que a FFT tem como resultado valores referentes ao espectro de magnitude e
de fase do segmento de amostras analisado. Após o cálculo da FFT de todos os segmentos do sinal, armazenam-se as informações de magnitude em um vetor bidimensional
(vide 5.3.1).
De posse deste vetor, constrói-se a estrutura de mapas apresentada em 5.3.3 e,
então, submete-se esta estrutura ao algoritmo de construção do instrumento SOM-A
(algoritmo 5). No INStractor os valores de fase utilizados são apenas os de fase inicial
de cada componente.
5.5
Plataforma
O programa foi construído sobre a seguinte plataforma:
5.5.1
Software
Linguagem: JavaTM 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05237) com suporte a Java3D e Java Media Framework.
41
Algoritmo 5 Criação do intrumento SOM-A
Vide quadro 4.
private
int
int
int
for
int bitrev(int j) {
j2;
j1 = j;
k = 0;
(int i = 1; i <= nu; i++) {
j2 = j1/2;
k = 2*k + j1 - 2*j2;
j1 = j2;
}
return k;
}
Quadro 2 - Algoritmo 3 - Inversão dos bits
Ambiente Integrado de Desenvolvimento: Netbeans IDE 6.0 Beta 2
Edição de Áudio: Amadeus II v3.8.6
c
Síntese Aditiva: SOM-A Version 6.40 Aluizio
Arcela
42
public class WindowFunktion {
public static float[] hammingWindow(int len) {
float[] hamming = new float[len];
for (int n=0;n<len;n++) {
hamming[n] = 0.54f-(float)(0.46*Math.cos(2.0*Math.PI*n/len));
}
return hamming;
}
}
Quadro 3 - Algoritmo 4 - Criação da janela de Hamming
43
public final class FastFourierTransform {
private int n, nu;
private double[] phase = null;
public final float[] doFFT(float[] x) {
PhaseBusiness pb = PhaseBusiness.getInstance();
n = x.length; // assume n is a power of 2
double ld = (Math.log(n)/Math.log(2.0));
if ((float)((int)ld)-ld != 0) {
System.out.println("The size of x must be a power of 2.");
return x;
}
nu = (int) ld;
int n2 = n/2, nu1 = nu - 1, k = 0;
float[] xre = new float[n], xim = new float[n], mag = new float[n2];
double[] phase = new double[n2];
float tr, ti, p, arg, c, s;
for (int i = 0; i < n; i++) {
xre[i] = x[i];
xim[i] = 0.0f;
}
for (int l = 1; l <= nu; l++) {
while (k < n) {
for (int i = 1; i <= n2; i++) {
p = bitrev (k >> nu1);
arg = 2 * (float) Math.PI * p / n;
c = (float) Math.cos (arg);
s = (float) Math.sin (arg);
tr = xre[k+n2]*c + xim[k+n2]*s;
ti = xim[k+n2]*c - xre[k+n2]*s;
xre[k+n2] = xre[k] - tr;
xim[k+n2] = xim[k] - ti;
xre[k] += tr;
xim[k] += ti;
k++;
}
k += n2;
}
k = 0;
nu1--;
n2 = n2/2;
}
k = 0;
int r;
while (k < n) {
r = bitrev (k);
if (r > k) {
tr = xre[k];
ti = xim[k];
xre[k] = xre[r];
xim[k] = xim[r];
xre[r] = tr;
xim[r] = ti;
}
k++;
}
// calculate Magnitude and Phase
mag[0] = (float) (Math.sqrt(xre[0]*xre[0] + xim[0]*xim[0]))/n;
phase[0] = pb.getPhase(xre[0], xim[0]);
for (int i = 1; i < n/2; i++) {
mag[i]= 2 * (float) (Math.sqrt(xre[i]*xre[i] + xim[i]*xim[i]))/n;
phase[i] = pb.getPhase(xre[i], xim[i]);
if (Double.isNaN(phase[i]))
phase[i] = 0d;
}
this.phase = phase;
return mag;
}
}
Quadro 1 - Algoritmo 2 - Implementação do algoritmo da FFT
44
public String buildSomAInstrument(String instrumentName,
TreeMap<Double, TreeMap<Double, Double>> envelopes,
TreeMap<Double, Double> phases) {
StringBuilder sb = new StringBuilder();
double factor = 0;
int cont = 0;
DecimalFormat decimal = new DecimalFormat("0.00");
StringBuilder sbEnv = new StringBuilder();
Set<Double> components = envelopes.keySet();
sb.append("(INS 990.0 ");
sb.append(instrumentName);
sb.append(" \n");
for (Double component : components) {
TreeMap<Double, Double> m = envelopes.get(component);
Double ph = phases.get(component);
factor = 720d/m.size();
cont = 0;
for (Double i : m.keySet()) {
sbEnv.append("(")
.append(decimal.format(m.get(i)))
.append(" ")
.append(Math.round(cont*factor))
.append(") ");
cont++;
}
sb.append("
(");
sb.append(Math.round(component.doubleValue()/components.iterator()
.next().doubleValue()));
sb.append(" ")
.append(decimal.format(ph))
.append(" ");
sb.append("(");
sb.append(sbEnv.toString());
sb.append("(0.0 720) ");
sb.append(") ");
sb.append("0.5");
sb.append(")\n");
sbEnv = null;
sbEnv = new StringBuilder();
}
sb.append(")");
return sb.toString();
}
Quadro 4 - Algoritmo 5 - Construção de um instrumento SOM-A
45
Capítulo 6
Testes e Experimentos
Este capítulo apresenta uma série de testes de análise de sinais de áudio.
Inicialmente são apresentadas análises de sinais de formas de ondas básicas como
uma onda senoidal pura e uma onda dente-de-serra. Em seguida, sinais complexos de
instrumentos musicais são experimentados e discutidos.
6.1
Experimentos
Os sinais digitais dos instrumentos musicais analisados foram obtidos do site da Universidade de Iowa (University of Iowa Musical Instrument Samples [28]). Tal projeto
foi criado em 1997 por Lawrence Fritts, Director of the Electronic Music Studios and
Associate Professor of Composition na Universidade de Iowa. Os instrumentos foram gravados na câmara anecóica no Wendell Johnson Speech and Hearing Center da
mesma universidade com os seguintes equipamentos:
Microfone: Condensador Neumann KM 84 Cardioid
Mixer: Mackie 1402-VLZ
Gravador: Panasonic SV-3800 DAT
As gravações consistem em escalas cromáticas em três níveis de dinâmica pp (pianíssimo), mf (mezzo-forte) e ff (fortíssimo). Cada nota possui aproximadamente dois
segundos de duração e são precedidas de silêncio. Alguns instrumentos foram gravados com e sem vibrato. Os instrumentos de corda, por sua vez, foram gravados com o
arco e pizzicato1 .
Todas os sinais, com exceção do piano, são mono, possuem 16 bits e foram gravados a uma taxa de mostragem de 44100 Hz no formato AIFF2 . Estes sinais digitais de
instrumentos musicais são disponibilizados gratuitamente e não há restrições quanto à
utilização deles.
Os testes seguem a ordem de complexidade da onda do sinal analisado. Desde uma
onda de baixa complexidade, uma senóide, até ondas mais complexas de instrumentos
musicais.
1
2
Modo de tocar instrumentos de corda pinçando as cordas com os dedos.
Audio Interchange File Format
46
6.1.1
Formas de ondas simples
Esta seção apresenta uma série de testes do INStractor com formas de ondas simples(puras, dente-de-serra e quadrada). O intuito é verificar que os cálculos realizados
e os resultados obtidos estão consistentes com o sinal de entrada e refletem todas as
suas características originais.
6.1.1.1
Senóide com amplitude constante
Seja uma onda senoidal formada por uma única freqüência f sem variações em sua
amplitude máxima A e fase inicial φ0 dada pela equação:
o(t) = Asen(2πf t + φ0 )
(6.1)
Para cada instante no tempo t, a função de onda o(t) possui um valor. Seja um sinal
digital que contemple a equação 6.1 com f = 250 Hz, φ0 = 0o e A = 127 (figura 6.1).
Analisando o arquivo de áudio com a API Java Sound e a uma taxa de amostragem
de 32768 Hz, têm-se os seguintes valores correspondentes ao primeiro período3 desta
função:
Figura 6.1: Sinal senoidal a 250 Hz sem variação em sua amplitude.
0.0, 0.0, 34.0, 6.0, 64.0, 12.0, 88.0, 18.0, 100.0, 24.0, 98.0, 30.0, 79.0, 36.0,
38.0, 42.0, -28.0, 47.0, -122.0, 53.0, 9.0, 59.0, 105.0, 64.0, -93.0, 69.0,
-76.0, 74.0, -103.0, 79.0, 79.0, 84.0, -44.0, 88.0, 36.0, 93.0, 62.0, 97.0,
30.0, 101.0, -61.0, 104.0, 42.0, 108.0, 82.0, 111.0, 56.0, 114.0, -37.0,
116.0, 58.0, 119.0, 82.0, 121.0, 35.0, 123.0, -85.0, 124.0, -22.0, 125.0, -33.0,
126.0, -118.0, 127.0, -23.0, 127.0, -3.0, 127.0, -58.0, 127.0, 68.0, 127.0,
119.0, 126.0, 96.0, 125.0, -2.0, 123.0, 84.0, 122.0, 98.0, 120.0, 41.0, 118.0,
-85.0, 115.0, -24.0, 112.0, -29.0, 109.0, -98.0, 106.0, 26.0, 103.0, 89.0, 99.0,
94.0, 95.0, 42.0, 91.0, -63.0, 86.0, 37.0, 82.0, 89.0, 77.0, 95.0, 72.0, 59.0,
67.0, -17.0, 61.0, 126.0, 56.0, -19.0, 50.0, 61.0, 45.0, 115.0, 39.0, -110.0,
33.0, -99.0, 27.0, -105.0, 21.0, -123.0, 15.0, 106.0, 9.0, 73.0
Para uma janela de 4096 amostras e o número máximo de componentes espectrais
configurado com o valor 1, o programa retorna o instrumento SOM-A apresentado
em A.1. Percebe-se que o ângulo de fase em 0o está correto pois o sinal analisado é
dado por uma função seno com os parâmetros informados anteriormente. Além disso,
percebe-se que a envoltória da componente espectral mantém-se aproximadamente no
valor máximo 255, como era de se esperar pelo fato de não ocorrerem variações na
amplitude do sinal. A envoltória é apresentada na figura 6.2.
3
Um período corresponde, neste caso, a 131,072 amostras do sinal. Tem-se 32768 amostras por
segundo e uma freqüência de 250 ciclos por segundo. Logo, 131,072 amostras por ciclo.
47
Figura 6.2: Envoltória da onda senoidal a 250 Hz sem variação em sua amplitude.
6.1.1.2
Senóide com amplitude variável
Seja agora uma onda senoidal nas mesmas condições do sinal da seção 6.1.1.1 mas
com a amplitude A variando linearmente do seu valor máximo a 0 no decorrer de toda
a duração do sinal (figura 6.3). Este efeito é chamado de fade out4 .
Figura 6.3: Sinal senoidal a 250 Hz com variação linear decrescente em sua amplitude.
O instrumento SOM-A gerado pelo INStractor é apresentado em A.2. Nele, novamente tem-se o valor de fase igual a 0o . A figura 6.4 apresenta claramente a variação
linear de amplitude linear decrescente obtida através do efeito de fade out.
6.1.1.3
Senóide com ângulo inicial de fase diferente de 0o
Seja uma onda senoidal nas mesmas condições do sinal da seção 6.1.1.1 mas com
ângulo de fase inicial igual a 90o . Agora tem-se uma função cosseno.
O instrumento SOM-A gerado pelo INStractor é apresentado em A.3. Nele, tem-se
o valor do ângulo de fase inicial igual a 90o , o que é correto pois trata-se da análise
de uma função cosseno (ou seno com φ0 = 90o ). A envoltória deste instrumento é
semelhante à do instrumento da fiigura 6.2.
4
Diminuição gradual do nível de intensidade de um sinal de áudio.
48
Figura 6.4: Envoltória da onda senoidal a 250 Hz com variação linear decrescente em
sua amplitude. Efeito fade out
6.1.1.4
Dente-de-serra
Uma onda dente-de-serra é uma onda não-senoidal formada pelos harmônicos de número 1, 2, 3, 4, 5, etc, e possuem amplitudes proporcionais a 1, 12 , 31 , 14 , 15 , etc. Quanto
maior o número de harmônicos presentes na formação do sinal, maior a convergência
do sinal para uma onda dente-de-serra.
Foi construída para fins de experimentação, uma forma de onda dente de serra
com 10 componentes espectrais. A fundamental tem freqüência de 250 Hz e todos
os harmônicos ímpares foram gerados com ângulo inicial de fase igual a 0o enquanto
todos os harmônicos pares, com ângulo inicial de fase igual a 180o . A figura A.4 mostra
o sinal de entrada.
Ao submeter o arquivo de áudio, contendo esta forma de onda, ao INStractor,
obtém-se o intrumento SOM-A listado em A.4. O INStractor está configurado, neste
caso, com uma janela de análise de 4096 amostras e está limitado a indentificar apenas
os 10 primeiros harmônicos presentes no sinal. A análise realizada pelo INStractor
retorna corretamente as componentes espectrais com os valores de fase inicial com a
qual foram criadas e com amplitude proporcional ao inverso do valor do harmônico.
6.1.1.5
Onda quadrada
Uma forma de onda quadrada é formada pelos harmônicos ímpares e, cada harmônico
possui amplitude proporcional ao inverso do seu valor ( 11 , 13 , 51 , 17 , 19 . . .).
Seja uma onda quadrada construída pelo SOM-A formada pelo somatório dos
harmônicos ímpares de 1 a 15 com amplitudes iguais a 10000, 3333, 2000, 1428,
1111, 909, 769 e 667. Ao submeter o arquivo de áudio formado por um sinal com esta
forma de onda e a uma freqüência de 100Hz por exemplo (figura 6.6), ao INStractor,
obtém-se as envoltórias e ângulos de fase mostrados nas figuras 6.7, 6.8, 6.9 e 6.10.
49
Figura 6.5: Forma de onda dente-de-serra de freqüência 250 Hz formada pelos primeiros 10 harmônicos. Os harmônicos ímpares possuem ângulo inicial de fase igual a 0o
e harmônicos pares possuem ângulo inicial de fase igual a 180o .
Figura 6.6: Onda quadrada formada pelos harmônicos 1, 3, 5, 7, 9, 11, 13 e 15, com
freqüência de 100 Hz
6.1.2
Formas de ondas complexas: instrumentos musicais
Nesta seção, são realizados experimentos com sinais digitalizados de instrumentos musicais. Os experimentos consistem em extrair o instrumento musical na sintaxe da linguagem SOM-A e testá-lo na execução de uma carta espectral. Todos os testes foram
realizados com base em uma janela contendo 1024 amostras.
6.1.2.1
Clarineta
O sinal de clarineta analisado (figura 6.11) corresponde ao sinal disponibilizado pela
Universidade de Iowa[28] referente a uma clarineta Mi bemol. Segue algumas características da gravação deste sinal:
Modelo da Clarineta: Selmer Y7608, Bocal Vandaren B44; Bonade Inverted Ligature; Vandoren Dó 6 Reed Strength 4
Distância para o microfone: 1,5 metros
A nota analisada corresponde a um Dó 4 (231 Hz aproximadamente) com dinâmica
mf. As envoltórias obtidas componentes espectrais são apresentadas nas figuras 6.12,
6.13 e 6.14.
O instrumento gerado na sintaxe da linguagem SOM-A foi aplicado à carta espectral do Concerto K 622 para Clarineta de Mozart e o resultado foi considerado
satisfatório. Além desta, outras obras em que a voz principal é a clarineta podem ser
executadas com este instrumento sintetizado, trazendo resultados satisfatórios.
50
Figura 6.7: Envoltória das componentes 1, 2, 3 e 4 de uma onda quadrada.
51
Figura 6.8: Envoltória das componentes 5, 6, 7 e 8 de uma onda quadrada.
52
Figura 6.9: Envoltória das componentes 9, 11, 12 e 13 de uma onda quadrada.
53
Figura 6.10: Envoltória das componentes 14 e 15 de uma onda quadrada.
Figura 6.11: Dó 4 mf de uma clarineta.
54
Figura 6.12: Envoltória dos harmônicos 1, 2, 3 e 4 de uma clarineta.
55
Figura 6.13: Envoltória dos harmônicos 5, 6, 7 e 8 de uma clarineta.
56
Figura 6.14: Envoltória dos harmônicos 9, 10, 11 e 12 de uma clarineta.
57
6.1.2.2
Violoncelo
Da mesma forma com que a clarineta foi analisada, foi com o violoncelo. Entretanto,
o sinal corresponde a um Dó 3 tocado na corda Sol (figura 6.15) com a dinâmica
mezzo-forte(mf ). Este exemplo foi editado para que o intervalo de ataque tivesse predominância em relação ao tempo de sustentação e decaimento da nota. A gravação
deste instrumento foi realizada com as seguintes características:
Figura 6.15: Dó 3 mf na corda Sol de um violoncelo.
R
Modelo do Violoncello: 1736 Antonius Stradivarius Cremen− is; Faciebat Anno 1736Alemanha
Distância para o microfone: 1,5 metros
O instrumento foi aplicado à Suite para Violoncelo número 1 de J.S. Bach5 . As
suites de Bach são aclamadas como algumas das maiores obras de solo em violoncelo.
O resultado da execução desta música pelo instrumento resultante do funcionamento
doprograma INStractor e percebe-se que o ataque é característico de um violoncelo.
As envoltórias das componentes espectrais do instrumento são apresentadas nas figuras
6.16, 6.17, 6.18, 6.19, 6.20 e 6.21.
6.1.2.3
Fagote
O sinal de fagote analisado (figura 6.22) está disponível no site da Universidade de
Iowa[28]. A nota analisada é um Dó 3 tocado com dinâmica mf. Seguem algumas
características do instrumento:
Modelo: Fox 601 #23385, Bocal-Heckel cc 2
Distância do microfone: 1,5 metros
As envoltórias das componentes espectrais extraídas após a execução do programa
INStractor sobre o arquivo contendo o sinal digitalizado de um fagote são apresentadas
nas figuras B.1, B.2, B.3 e B.4. O instrumento SOM-A gerado foi aplicado à carta
espectral do concerto para fagote de Mozart (K 191).
6.1.2.4
Oboé
O instrumento oboé foi analisado a partir de uma nota Fá 5 (mf ) de um arquivo disponibilizado em [28] (figura 6.23). O instrumento que foi utilizado para a gravação
possui as características seguintes:
5
Johann Sebastian Bach
58
Figura 6.16: Envoltória das componentes 1, 2, 3 e 4 do violoncelo.
59
Figura 6.17: Envoltória das componentes 5, 6, 7 e 8 do violoncelo.
60
Figura 6.18: Envoltória das componentes 9, 10, 11 e 12 do violoncelo.
61
Figura 6.19: Envoltória das componentes 13, 15, 16 e 17 do violoncelo.
62
Figura 6.20: Envoltória das componentes 18, 19, 23 e 26 do violoncelo.
63
Figura 6.21: Envoltória das componentes 30, 33, 38 e 40 do violoncelo.
64
Figura 6.22: Dó 4 mf de um fagote.
Figura 6.23: Fá 5 mf de um oboé.
Modelo: Howarth S5, full conservatory. 3rd octave key
Distância do microfone: 1,5 metros.
As envoltórias dos harmônicos encontrados no processo de análise espectral são
apresentadas nas figuras B.5 e B.6.
6.1.2.5
Trompete
O instrumento trompete foi analisado a partir de uma nota Dó 4 sem vibrato com
dinâmica mf (figura 6.24) e as envoltórias obtidas são apresentadas em B.3.
Figura 6.24: Dó 4 mf de um trompete.
6.1.2.6
Trombone baixo
O trombone baixo foi analisado a partir de uma nota Dó 3 com dinâmica mf (figura
6.25) e as envoltórias obtidas são apresentadas em B.4.
65
Figura 6.25: Dó 3 mf de um trombone baixo.
66
Capítulo 7
Conclusões e Trabalhos Futuros
No presente trabalho, foi implementado um programa capaz de extrair um instrumento
musical na sintaxe da linguagem SOM-A, permitindo assim, a criação de uma orquestra de instrumentos aditivos1 .
A implementação do método apresentado na seção 4.4 permitiu, com alto grau de
precisão, identificar a envoltória das componentes espectrais que determinam o timbre
de um instrumento musical. A partir destes valores encontrados, foi possível determinar em SOM-A um instrumento musical. O sinal sintetizado da clarineta é apresentado
na figura 7.1 e do violoncelo, na figura 7.2.
Figura 7.1: Sinal de clarineta sintetizado pelo SOM-A utilizando o instrumento criado
pelo INStractor.
Figura 7.2: Sinal de violoncelo sintetizado pelo SOM-A utilizando o instrumento criado pelo INStractor.
Apesar de haver a possibilidade de ouvintes de uma carta com um instrumento
gerado pelo INStractor conluirem que o instrumento que está executando não corresponde a amostra original, outros podem concordar que o instrumento é semelhante ao
original. Trata-se do fenômeno psico-acústico de percepção do som.
A criação de instrumentos SOM-A com base em sinais de áudio de instrumentos
sinfônicos originais obteve êxito para determinadas famílias de instrumentos, principalmente de sopro. A análise de instrumentos de percussão e cordas não gerou ins1
Baseados na síntese aditiva de componentes espectrais
67
trumentos SOM-A satisfatórios (com raras exceções). Entretanto, este fato se deve à
limitação do tempo disponível para o desenvolvimento do projeto.
Futuramente o programa pode ser evoluído e inserido como um módulo do SOM-A.
Além disso, ele pode ser utilizado para a análise de envoltórias de componentes espectrais de um sinal. Funcionalidades como a visualização do espectro de freqüências em
duas e três dimensões podem ser melhoradas permitindo, assim, uma melhor visualização do espectro de freqüências do sinal analisado. Além disso, há a possibilidade da
implementação utilizando wavelets e PEAQ2 .
2
Perceptual Evaluation of Audio Quality.
68
Apêndice A
Instrumentos SOM-A gerados nos
testes
A.1
Senóide com amplitude constante
(INS 990.0 expSin250
(1 0.00 ((254.84 0) (254.75 12) (255.00 24) (254.74 36) (254.85 48) (254.94 60)
(254.69 72) (254.94 84) (254.84 96) (254.75 108) (255.00 120) (254.74 132)
(254.85 144) (254.94 156) (254.69 168) (254.95 180) (254.84 192) (254.75 204)
(255.00 216) (254.74 228) (254.85 240) (254.94 252) (254.69 264) (254.94 276)
(254.84 288) (254.75 300) (255.00 312) (254.74 324) (254.85 336) (254.94 348)
(254.69 360) (254.95 372) (254.84 384) (254.75 396) (255.00 408) (254.74 420)
(254.85 432) (254.94 444) (254.69 456) (254.94 468) (254.84 480) (254.75 492)
(255.00 504) (254.74 516) (254.85 528) (254.94 540) (254.69 552) (254.95 564)
(254.84 576) (254.75 588) (255.00 600) (254.74 612) (254.85 624) (254.94 636)
(254.69 648) (254.94 660) (254.84 672) (254.75 684) (255.00 696) (254.74 708)
(0.0 720) ) 0.5)
)
A.2
Senóide com amplitude variável
(INS 990.0 expSin250FadeOut
(1 0.00 ((255.00 0) (250.81 12) (246.94 24) (242.58 36) (238.57 48) (234.55 60)
(230.22 72) (226.33 84) (222.11 96) (217.91 108) (214.01 120) (209.69 132)
(205.66 144) (201.63 156) (197.33 168) (193.40 180) (189.20 192) (185.02 204)
(181.09 216) (176.80 228) (172.75 240) (168.71 252) (164.43 264) (160.48 276)
(156.31 288) (152.13 300) (148.15 312) (143.90 324) (139.86 336) (135.80 348)
(131.57 360) (127.57 372) (123.39 384) (119.25 396) (115.27 408) (111.04 420)
(106.96 432) (102.90 444) (98.69 456) (94.65 468) (90.48 480) (86.34 492)
(82.31 504) (78.12 516) (74.03 528) (69.96 540) (65.78 552) (61.72 564)
(57.58 576) (53.45 588) (49.41 600) (45.25 612) (41.14 624) (37.05 636)
(32.91 648) (28.83 660) (24.72 672) (20.59 684) (16.50 696) (12.38 708)
(0.0 720) ) 0.5)
)
69
(INS 990.0 expCos250
(1 90.00 ((254.87 0) (254.97 12) (254.73 24) (254.97 36) (254.86 48) (254.76 60)
(255.00 72) (254.75 84) (254.87 96) (254.97 108) (254.73 120) (254.97 132)
(254.86 144) (254.76 156) (255.00 168) (254.76 180) (254.87 192) (254.97 204)
(254.73 216) (254.97 228) (254.86 240) (254.76 252) (255.00 264) (254.75 276)
(254.87 288) (254.97 300) (254.73 312) (254.97 324) (254.86 336) (254.76 348)
(255.00 360) (254.76 372) (254.87 384) (254.97 396) (254.73 408) (254.97 420)
(254.86 432) (254.76 444) (255.00 456) (254.75 468) (254.87 480) (254.97 492)
(254.73 504) (254.97 516) (254.86 528) (254.76 540) (255.00 552) (254.76 564)
(254.87 576) (254.97 588) (254.73 600) (254.97 612) (254.86 624) (254.76 636)
(255.00 648) (254.75 660) (254.87 672) (254.97 684) (254.73 696) (254.97 708)
(0.0 720) ) 0.5)
)
A.3
Senóide com ângulo inicial de fase diferente de 0o
A.4
Dente-de-serra
70
(INS 990.0 sawTooth250
(1 0.00 ((254.40 0) (254.52 8) (254.82 16) (254.80 23) (255.00 31) (254.67 39)
(254.46 47) (254.68 55) (254.99 63) (254.81 70) (254.78 78) (254.49 86)
(254.58 94) (254.94 102) (254.76 110) (254.92 117) (254.58 125) (254.52 133)
(254.82 141) (254.80 149) (255.00 157) (254.67 164) (254.46 172) (254.68 180)
(254.99 188) (254.81 196) (254.78 203) (254.49 211) (254.58 219) (254.94 227)
(254.76 235) (254.92 243) (254.58 250) (254.52 258) (254.82 266) (254.80 274)
(255.00 282) (254.67 290) (254.46 297) (254.68 305) (254.99 313) (254.81 321)
(254.78 329) (254.49 337) (254.58 344) (254.94 352) (254.76 360) (254.92 368)
(254.58 376) (254.52 383) (254.82 391) (254.80 399) (255.00 407) (254.67 415)
(254.46 423) (254.68 430) (254.99 438) (254.81 446) (254.78 454) (254.49 462)
(254.58 470) (254.94 477) (254.76 485) (254.92 493) (254.58 501) (254.52 509)
(254.82 517) (254.80 524) (255.00 532) (254.67 540) (254.46 548) (254.68 556)
(254.99 563) (254.81 571) (254.78 579) (254.49 587) (254.58 595) (254.94 603)
(254.76 610) (254.92 618) (254.58 626) (254.52 634) (254.82 642) (254.80 650)
(255.00 657) (254.67 665) (254.46 673) (254.68 681) (254.99 689) (254.81 697)
(254.78 704) (254.49 712) (0.0 720) ) 0.5)
(2 180.00 ((109.45 0) (109.27 8) (109.53 16) (109.72 23) (109.38 31) (109.49 39)
(109.24 47) (109.50 55) (109.41 63) (109.69 70) (109.53 78) (109.27 86)
(109.38 94) (109.47 102) (109.83 110) (109.48 117) (109.35 125) (109.27 133)
(109.53 141) (109.72 149) (109.38 157) (109.49 164) (109.24 172) (109.50 180)
(109.41 188) (109.69 196) (109.53 203) (109.27 211) (109.38 219) (109.47 227)
(109.83 235) (109.48 243) (109.35 250) (109.27 258) (109.53 266) (109.72 274)
(109.38 282) (109.49 290) (109.24 297) (109.50 305) (109.41 313) (109.69 321)
(109.53 329) (109.27 337) (109.38 344) (109.47 352) (109.83 360) (109.48 368)
(109.35 376) (109.27 383) (109.53 391) (109.72 399) (109.38 407) (109.49 415)
(109.24 423) (109.50 430) (109.41 438) (109.69 446) (109.53 454) (109.27 462)
(109.38 470) (109.47 477) (109.83 485) (109.48 493) (109.35 501) (109.27 509)
(109.53 517) (109.72 524) (109.38 532) (109.49 540) (109.24 548) (109.50 556)
(109.41 563) (109.69 571) (109.53 579) (109.27 587) (109.38 595) (109.47 603)
(109.83 610) (109.48 618) (109.35 626) (109.27 634) (109.53 642) (109.72 650)
(109.38 657) (109.49 665) (109.24 673) (109.50 681) (109.41 689) (109.69 697)
(109.53 704) (109.27 712) (0.0 720) ) 0.5)
(3 0.00 ((84.55 0) (84.65 8) (84.62 16) (85.03 23) (84.67 31) (84.47 39) (84.68 47)
(84.46 55) (84.67 63) (84.98 70) (84.59 78) (84.65 86) (84.55 94) (84.73 102)
(85.26 110) (84.72 117) (84.57 125) (84.65 133) (84.62 141) (85.03 149)
(84.67 157) (84.47 164) (84.68 172) (84.46 180) (84.67 188) (84.98 196)
(84.59 203) (84.65 211) (84.55 219) (84.73 227) (85.26 235) (84.72 243)
(84.57 250) (84.65 258) (84.62 266) (85.03 274) (84.67 282) (84.47 290)
(84.68 297) (84.46 305) (84.67 313) (84.98 321) (84.59 329) (84.65 337)
(84.55 344) (84.73 352) (85.26 360) (84.72 368) (84.57 376) (84.65 383)
(84.62 391) (85.03 399) (84.67 407) (84.47 415) (84.68 423) (84.46 430)
(84.67 438) (84.98 446) (84.59 454) (84.65 462) (84.55 470) (84.73 477)
(85.26 485) (84.72 493) (84.57 501) (84.65 509) (84.62 517) (85.03 524)
(84.67 532) (84.47 540) (84.68 548) (84.46 556) (84.67 563) (84.98 571)
(84.59 579) (84.65 587) (84.55 595) (84.73 603) (85.26 610) (84.72 618)
(84.57 626) (84.65 634) (84.62 642) (85.03 650) (84.67 657) (84.47 665)
(84.68 673) (84.46 681) (84.67 689) (84.98 697) (84.59 704) (84.65 712)
(0.0 720) ) 0.5)
(4 180.00 ((66.72 0) (66.66 8) (66.56 16) (67.00 23) (66.75 31) (66.68 39)
(66.60 47) (66.65 55) (66.74 63) (66.96 70) (66.56 78) (66.64 86) (66.72 94)
(66.63 102) (67.18 110) (66.61 117) (66.73 125) (66.66 133) (66.56 141)
(67.00 149) (66.75 157) (66.68 164) (66.60 172) (66.65 180) (66.74 188)
(66.96 196) (66.56 203) (66.64 211) (66.72 219) (66.63 227) (67.18 235)
(66.61 243) (66.73 250) (66.66 258) (66.56 266) (67.00 274) (66.75 282)
(66.68 290) (66.60 297) (66.65 305) (66.74 313) (66.96 321) (66.56 329)
(66.64 337) (66.72 344) (66.63 352) (67.18 360) (66.61 368) (66.73 376)
(66.66 383) (66.56 391) (67.00 399) (66.75 407) (66.68 415) (66.60 423)
(66.65 430) (66.74 438) (66.96 446) (66.56 454) (66.64 462) (66.72 470)
(66.63 477) (67.18 485) (66.61 493) (66.73 501) (66.66 509) (66.56 517)
(67.00 524) (66.75 532) (66.68 540) (66.60 548) (66.65 556) (66.74 563)
(66.96 571) (66.56 579) (66.64 587) (66.72 595) (66.63 603) (67.18 610)
(66.61 618) (66.73 626) (66.66 634) (66.56 642) (67.00 650) (66.75 657)
(66.68 665) (66.60 673) (66.65 681) (66.74 689) (66.96 697) (66.56 704)
(66.64 712) (0.0 720) ) 0.5)
71
(5 0.00 ((50.88 0) (50.88 8) (50.93 16) (51.13 23) (51.05 31) (51.09 39)
(51.09 47) (51.08 55) (51.03 63) (51.09 70) (50.96 78) (50.92 86) (50.90 94)
(50.90 102) (51.33 110) (50.89 117) (50.88 125) (50.88 133) (50.93 141)
(51.13 149) (51.05 157) (51.09 164) (51.09 172) (51.08 180) (51.03 188)
(51.09 196) (50.96 203) (50.92 211) (50.90 219) (50.90 227) (51.33 235)
(50.89 243) (50.88 250) (50.88 258) (50.93 266) (51.13 274) (51.05 282)
(51.09 290) (51.09 297) (51.08 305) (51.03 313) (51.09 321) (50.96 329)
(50.92 337) (50.90 344) (50.90 352) (51.33 360) (50.89 368) (50.88 376)
(50.88 383) (50.93 391) (51.13 399) (51.05 407) (51.09 415) (51.09 423)
(51.08 430) (51.03 438) (51.09 446) (50.96 454) (50.92 462) (50.90 470)
(50.90 477) (51.33 485) (50.89 493) (50.88 501) (50.88 509) (50.93 517)
(51.13 524) (51.05 532) (51.09 540) (51.09 548) (51.08 556) (51.03 563)
(51.09 571) (50.96 579) (50.92 587) (50.90 595) (50.90 603) (51.33 610)
(50.89 618) (50.88 626) (50.88 634) (50.93 642) (51.13 650) (51.05 657)
(51.09 665) (51.09 673) (51.08 681) (51.03 689) (51.09 697) (50.96 704)
(50.92 712) (0.0 720) ) 0.5)
(6 180.00 ((42.59 0) (42.55 8) (42.56 16) (42.70 23) (42.64 31) (42.66 39)
(42.67 47) (42.64 55) (42.64 63) (42.72 70) (42.53 78) (42.55 86) (42.60 94)
(42.62 102) (42.43 110) (42.61 117) (42.58 125) (42.55 133) (42.56 141)
(42.70 149) (42.64 157) (42.66 164) (42.67 172) (42.64 180) (42.64 188)
(42.72 196) (42.53 203) (42.55 211) (42.60 219) (42.62 227) (42.43 235)
(42.61 243) (42.58 250) (42.55 258) (42.56 266) (42.70 274) (42.64 282)
(42.66 290) (42.67 297) (42.64 305) (42.64 313) (42.72 321) (42.53 329)
(42.55 337) (42.60 344) (42.62 352) (42.43 360) (42.61 368) (42.58 376)
(42.55 383) (42.56 391) (42.70 399) (42.64 407) (42.66 415) (42.67 423)
(42.64 430) (42.64 438) (42.72 446) (42.53 454) (42.55 462) (42.60 470)
(42.62 477) (42.43 485) (42.61 493) (42.58 501) (42.55 509) (42.56 517)
(42.70 524) (42.64 532) (42.66 540) (42.67 548) (42.64 556) (42.64 563)
(42.72 571) (42.53 579) (42.55 587) (42.60 595) (42.62 603) (42.43 610)
(42.61 618) (42.58 626) (42.55 634) (42.56 642) (42.70 650) (42.64 657)
(42.66 665) (42.67 673) (42.64 681) (42.64 689) (42.72 697) (42.53 704)
(42.55 712) (0.0 720) ) 0.5)
(7 0.00 ((36.17 0) (36.22 8) (36.17 16) (36.45 23) (36.27 31) (36.22 39)
(36.15 47) (36.22 55) (36.28 63) (36.47 70) (36.20 78) (36.22 86) (36.15 94)
(36.18 102) (36.20 110) (36.16 117) (36.16 125) (36.22 133) (36.17 141)
(36.45 149) (36.27 157) (36.22 164) (36.15 172) (36.22 180) (36.28 188)
(36.47 196) (36.20 203) (36.22 211) (36.15 219) (36.18 227) (36.20 235)
(36.16 243) (36.16 250) (36.22 258) (36.17 266) (36.45 274) (36.27 282)
(36.22 290) (36.15 297) (36.22 305) (36.28 313) (36.47 321) (36.20 329)
(36.22 337) (36.15 344) (36.18 352) (36.20 360) (36.16 368) (36.16 376)
(36.22 383) (36.17 391) (36.45 399) (36.27 407) (36.22 415) (36.15 423)
(36.22 430) (36.28 438) (36.47 446) (36.20 454) (36.22 462) (36.15 470)
(36.18 477) (36.20 485) (36.16 493) (36.16 501) (36.22 509) (36.17 517)
(36.45 524) (36.27 532) (36.22 540) (36.15 548) (36.22 556) (36.28 563)
(36.47 571) (36.20 579) (36.22 587) (36.15 595) (36.18 603) (36.20 610)
(36.16 618) (36.16 626) (36.22 634) (36.17 642) (36.45 650) (36.27 657)
(36.22 665) (36.15 673) (36.22 681) (36.28 689) (36.47 697) (36.20 704)
(36.22 712) (0.0 720) ) 0.5)
(8 180.00 ((33.65 0) (33.58 8) (33.65 16) (33.90 23) (33.68 31) (33.61 39)
(33.71 47) (33.60 55) (33.69 63) (33.92 70) (33.65 78) (33.57 86) (33.64 94)
(33.57 102) (33.66 110) (33.59 117) (33.66 125) (33.58 133) (33.65 141)
(33.90 149) (33.68 157) (33.61 164) (33.71 172) (33.60 180) (33.69 188)
(33.92 196) (33.65 203) (33.57 211) (33.64 219) (33.57 227) (33.66 235)
(33.59 243) (33.66 250) (33.58 258) (33.65 266) (33.90 274) (33.68 282)
(33.61 290) (33.71 297) (33.60 305) (33.69 313) (33.92 321) (33.65 329)
(33.57 337) (33.64 344) (33.57 352) (33.66 360) (33.59 368) (33.66 376)
(33.58 383) (33.65 391) (33.90 399) (33.68 407) (33.61 415) (33.71 423)
(33.60 430) (33.69 438) (33.92 446) (33.65 454) (33.57 462) (33.64 470)
(33.57 477) (33.66 485) (33.59 493) (33.66 501) (33.58 509) (33.65 517)
(33.90 524) (33.68 532) (33.61 540) (33.71 548) (33.60 556) (33.69 563)
(33.92 571) (33.65 579) (33.57 587) (33.64 595) (33.57 603) (33.66 610)
(33.59 618) (33.66 626) (33.58 634) (33.65 642) (33.90 650) (33.68 657)
(33.61 665) (33.71 673) (33.60 681) (33.69 689) (33.92 697) (33.65 704)
(33.57 712) (0.0 720) ) 0.5)
72
(9 0.00 ((28.11 0) (28.19 8) (28.20 16) (28.39 23) (28.19 31) (28.24 39)
(28.17 47) (28.23 55) (28.18 63) (28.37 70) (28.19 78) (28.19 86) (28.14 94)
(28.16 102) (28.15 110) (28.16 117) (28.11 125) (28.19 133) (28.20 141)
(28.39 149) (28.19 157) (28.24 164) (28.17 172) (28.23 180) (28.18 188)
(28.37 196) (28.19 203) (28.19 211) (28.14 219) (28.16 227) (28.15 235)
(28.16 243) (28.11 250) (28.19 258) (28.20 266) (28.39 274) (28.19 282)
(28.24 290) (28.17 297) (28.23 305) (28.18 313) (28.37 321) (28.19 329)
(28.19 337) (28.14 344) (28.16 352) (28.15 360) (28.16 368) (28.11 376)
(28.19 383) (28.20 391) (28.39 399) (28.19 407) (28.24 415) (28.17 423)
(28.23 430) (28.18 438) (28.37 446) (28.19 454) (28.19 462) (28.14 470)
(28.16 477) (28.15 485) (28.16 493) (28.11 501) (28.19 509) (28.20 517)
(28.39 524) (28.19 532) (28.24 540) (28.17 548) (28.23 556) (28.18 563)
(28.37 571) (28.19 579) (28.19 587) (28.14 595) (28.16 603) (28.15 610)
(28.16 618) (28.11 626) (28.19 634) (28.20 642) (28.39 650) (28.19 657)
(28.24 665) (28.17 673) (28.23 681) (28.18 689) (28.37 697) (28.19 704)
(28.19 712) (0.0 720) ) 0.5)
(10 9.00 ((21.84 0) (21.83 8) (21.86 16) (21.79 23) (21.92 31) (21.84 39)
(21.85 47) (21.85 55) (21.94 63) (21.82 70) (21.87 78) (21.84 86) (21.83 94)
(21.83 102) (21.94 110) (21.82 117) (21.82 125) (21.83 133) (21.86 141)
(21.79 149) (21.92 157) (21.84 164) (21.85 172) (21.85 180) (21.94 188)
(21.82 196) (21.87 203) (21.84 211) (21.83 219) (21.83 227) (21.94 235)
(21.82 243) (21.82 250) (21.83 258) (21.86 266) (21.79 274) (21.92 282)
(21.84 290) (21.85 297) (21.85 305) (21.94 313) (21.82 321) (21.87 329)
(21.84 337) (21.83 344) (21.83 352) (21.94 360) (21.82 368) (21.82 376)
(21.83 383) (21.86 391) (21.79 399) (21.92 407) (21.84 415) (21.85 423)
(21.85 430) (21.94 438) (21.82 446) (21.87 454) (21.84 462) (21.83 470)
(21.83 477) (21.94 485) (21.82 493) (21.82 501) (21.83 509) (21.86 517)
(21.79 524) (21.92 532) (21.84 540) (21.85 548) (21.85 556) (21.94 563)
(21.82 571) (21.87 579) (21.84 587) (21.83 595) (21.83 603) (21.94 610)
(21.82 618) (21.82 626) (21.83 634) (21.86 642) (21.79 650) (21.92 657)
(21.84 665) (21.85 673) (21.85 681) (21.94 689) (21.82 697) (21.87 704)
(21.84 712) (0.0 720) ) 0.5)
)
73
Apêndice B
Envoltórias de instrumentos sinfônicos
B.1
Fagote
B.2
Oboe
B.3
Trompete
B.4
Trombone baixo
74
Figura B.1: Envoltória das componentes 1, 2, 3 e 4 do fagote.
75
Figura B.2: Envoltória das componentes 5, 6, 7 e 8 do fagote.
76
Figura B.3: Envoltória das componentes 9, 10, 11 e 12 do fagote.
77
Figura B.4: Envoltória das componentes 14, 15, 16 e 17 do fagote.
78
Figura B.5: Envoltória das componentes 1, 2, 3 e 5 do oboé.
79
Figura B.6: Envoltória das componentes 7, 9, 10 e 11 do oboé.
80
Figura B.7: Envoltória das componentes 1, 2, 3 e 4 de um trompete
81
Figura B.8: Envoltória das componentes 5, 6, 7 e 8 de um trompete
82
Figura B.9: Envoltória das componentes 9, 10, 11 e 12 de um trompete
83
Figura B.10: Envoltória das componentes 13, 14, 15 e 16 de um trompete
84
Figura B.11: Envoltória das componentes 17, 18, 19 e 20 de um trompete
85
Figura B.12: Envoltória das componentes 1, 2, 3 e 4 de um trombone baixo
86
Figura B.13: Envoltória das componentes 5, 6, 7 e 8 de um trombone baixo
87
Figura B.14: Envoltória das componentes 9, 10, 11 e 13 de um trombone baixo
88
Figura B.15: Envoltória das componentes 14, 15, 16 e 17 de um trombone baixo
89
Figura B.16: Envoltória das componentes 19, 20, 22 e 24 de um trombone baixo
90
Figura B.17: Envoltória das componentes 26, 28, 30 e 32 de um trombone baixo
91
Referências
[1] Aluizio Arcela. A linguagem SOM-A para síntese aditiva. I Simpósio Brasileiro
de Computação e Música, SBC, 1994.
[2] Aluizio Arcela. Fundamentos de computação musical. Apresentado na VI Escola
de Informática da Região Sul, Sociedade Brasileira de Computação, 1998.
[3] Aluizio Arcela and Rodolfo Bezerra Batista. Online additive synthesis by interfacing SOM-A to JavaSound. VI Simpósio Brasileiro de Computação e Música,
SBC, 1999.
[4] John Backus. The acoustical foundations of music. W. W. Norton And Company,
second edition, 1977.
[5] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal. Pattern-Oriented Software Architecture - A System of Patterns, volume 1. Wiley, 2001.
[6] Ricardo Ribeiro Farias Castro. Implementação de SOM-A em Borland C++ para
o ambiente MS-Windows. Technical report, Universidade de Brasília, LCMM,
1994.
[7] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
Introduction to Algorithms. The MIT Press, Cambridge, Massachusetts, second
edition, 2001.
[8] Ricardo de Sousa Ribeiro Nascimento. Editor gráfico de envoltórias espectrais
baseado em concordância geométrica de curvas. Master’s thesis, Universidade de
Brasília, 1990.
[9] Dew Research, http://www.steema.com/FFTProp/FFTProperties/FFTProperties.htm.
The basic tutorial on frequency analysis, December 2007.
[10] DSPRelated.com, http://www.dsprelated.com/showmessage/54345/1.php. Phase
of FFT compared to phase of Sinusoid, December 2007.
[11] Robert Eckstein. Java SE Application Design With MVC. Sun Microsystems,
March 2007.
[12] Vicente Nogueira Filho. Síntese aditiva modular – uma máquina espectral programável. Master’s thesis, Universidade de Brasília, 1988.
92
[13] Free Software Foundation. Gnu lesser public license, June 2007.
[14] Hwei P. Hsu. Análise de Fourier. Livros Técnicos e Científicos, 1972.
[15] JFree.org, http://www.jfree.org/jfreechart/api/javadoc/index.html.
API Documentation, December 2007.
JFreeChart
[16] Michael Kipp. Anvil 4.0 - Annotation of Video and Spoken Language. German
Research Center for Artificial Intelligence (DFKI).
[17] Christoph Lauer. Acoustical Frequency Analysis Tool, March 2003.
[18] Max V. Mathews. The Technology of Computer Music. The MIT Press, 1969.
[19] A. Meireles, O. Gioia, and R. Castro. SOM-A em C para Sun SparcStation.
Technical report, Universidade de Brasília, LCMM, 1993.
[20] E. M. Miletto, L. L. Costalonga, L. V. Flores, E. F. Fritsch, M. S. Pimenta, and
R. M. Vicari. Introdução à computação musical. IV Congresso Brasileiro de
Computação, 2004.
[21] Open Source Initiative - OSI. Academic Free License, 2.1 edition, 2003.
[22] John Robinson Pierce. The science of musical sound. W. H. Freeman and Company, 1983.
[23] Geber Lisboa Ramalho. SOM-A em Sun Common LISP para o ambiente
OpenWindows. Technical report, Universidade de Brasília, LCMM, 1991.
[24] Curtis Roads. The computer music tutorial. The MIT Press, 1996.
[25] Luiz Alves Rodrigues. Autômato SOM-A para síntese aditiva online. Master’s
thesis, Universidade de Brasília, 2000.
[26] Steven W. Smith. The Scientist and Engineer’s Guide to Digital Signal Processing.
[27] Murray R. Spiegel. Análise de Fourier. McGraw-Hill do Brasil, 1974.
[28] University of Iowa, http://theremin.music.uiowa.edu/MIS.html. University of
Iowa Musical Instrument Samples, December 2007.
93

Documentos relacionados