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