Upload
tranduong
View
221
Download
0
Embed Size (px)
Citation preview
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
TRATAMENTO DE SINAIS SONOROS NO COMPUTADOR SIMULANDO PEDAIS VIRTUAIS
Área de Computação Musical
por
Daniel Krueger
Adhemar Maria do Valle Filho, Dr. Orientador
Itajaí (SC), junho de 2008
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE CIÊNCIA DA COMPUTAÇÃO
TRATAMENTO DE SINAIS SONOROS NO COMPUTADOR SIMULANDO PEDAIS VIRTUAIS
Área de Computação Musical
por
Daniel Krueger Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Adhemar Maria do Valle Filho, Dr.
Itajaí (SC), junho de 2008
ii
SUMÁRIO
LISTA DE ABREVIATURAS.................................................................. iv
LISTA DE FIGURAS.................................................................................v
LISTA DE TABELAS..............................................................................vii LISTA DE EQUAÇÕES .........................................................................viii RESUMO.................................................................................................... ix
ABSTRACT.................................................................................................x
1 INTRODUÇÃO......................................................................................1 1.1 PROBLEMATIZAÇÃO ..................................................................................... 1 1.1.1 Formulação do Problema................................................................................. 1 1.1.2 Solução Proposta ............................................................................................... 2 1.2 OBJETIVOS ........................................................................................................ 3 1.2.1 Objetivo Geral ................................................................................................... 3 1.2.2 Objetivos Específicos ........................................................................................ 3 1.3 METODOLOGIA................................................................................................ 3 1.4 ESTRUTURA DO TRABALHO ....................................................................... 4
2 FUNDAMENTAÇÃO TEÓRICA ........................................................5 2.1 COMPUTAÇÃO MUSICAL.............................................................................. 5 2.1.1 Som ..................................................................................................................... 6 2.1.2 DSP ..................................................................................................................... 9 2.1.3 Efeitos Digitais................................................................................................. 13 2.2 SOFTWARES SIMILARES............................................................................. 24 2.2.1 Guitar R.A. ...................................................................................................... 24 2.2.2 FX-Box ............................................................................................................. 25 2.2.3 Revalver ........................................................................................................... 26 2.3 BIBLIOTECAS DE SOM E LINGUAGENS DE PROGRAMAÇÃO ........ 28 2.3.1 DirectX ............................................................................................................. 28 2.3.2 SDL (Simple DirectMedia Layer) ................................................................. 28 2.3.3 PortAudio......................................................................................................... 28 2.3.4 OpenAL............................................................................................................ 29 2.3.5 VST................................................................................................................... 29 2.3.6 JUCE ................................................................................................................ 34 2.3.7 ASIO................................................................................................................. 34 2.4 CONSIDERAÇÕES .......................................................................................... 36
3 DESENVOLVIMENTO ......................................................................37 3.1 MODELAGEM DO SISTEMA........................................................................ 37 3.1.1 Levantamento de Requisitos .......................................................................... 37 3.1.2 Projeto do Sistema .......................................................................................... 38
iii
3.2 IMPLEMENTAÇÃO ........................................................................................ 53 3.2.1 Programa Host – DK Guitar.......................................................................... 54 3.2.2 Plugins .............................................................................................................. 60 3.3 TESTES E VALIDAÇÃO................................................................................. 78
4 CONCLUSÕES ....................................................................................80
REFERÊNCIAS BIBLIOGRÁFICAS ...................................................82
GLOSSÁRIO.............................................................................................85
iv
LISTA DE ABREVIATURAS
API Application Programming Interface ASIO Audio Stream Input/Output DFT Discrete Fourier Transform DSP Digital Signal Processing FFT Fast Fourier Transform JUCE Jules Utility Class Extensions MIDI Musical Instrument Digital Interface OPENAL Open Audio Library OPENGL Open Graphics Library PC Personal Computer SDK Software Development Kit SDL Simple DirectMedia Layer TCC Trabalho de Conclusão de Curso UML Unified Modeling Language UNIVALI Universidade do Vale do Itajaí VST Virtual Studio Technology VSTi Virtual Studio Technology Instrument
v
LISTA DE FIGURAS
Figura 1. Conexão Guitarra – Computador..........................................................................................2 Figura 2. Onda com freqüência de 3 Hertz ..........................................................................................7 Figura 3. Amplitude de uma onda........................................................................................................7 Figura 4. Duração de uma onda ...........................................................................................................8 Figura 5. Filtros Digitais: (a) Passa-baixas; (b) Passa-altas; (c) Passa-banda; (d) Rejeita-banda......10 Figura 6. Filtro Comb .........................................................................................................................10 Figura 7. Cancelamento de fases........................................................................................................11 Figura 8. Transformada de Fourier aplicada em uma onda simples ..................................................12 Figura 9. Transformada de Fourier aplicado em uma onda composta ...............................................12 Figura 10. (a) Pedaleira V-Amp2; (b) Pedal Digital Reverb; (c) Mesa de som Behringer ................13 Figura 11. Ligação de pedais em série ...............................................................................................14 Figura 12. Pedal de Chorus ................................................................................................................15 Figura 13. Onda sonora do efeito Chorus ..........................................................................................15 Figura 14. Pedal de Tremolo ..............................................................................................................16 Figura 15. Onda sonora do efeito Tremolo ........................................................................................16 Figura 16. Pedal de Delay ..................................................................................................................17 Figura 17. Onda sonora do efeito Delay ............................................................................................18 Figura 18. Pedal de Reverb ................................................................................................................19 Figura 19. Onda sonora do efeito Reverb...........................................................................................19 Figura 20. Pedal de compressão.........................................................................................................20 Figura 21. Onda sonora do efeito Compressor...................................................................................21 Figura 22. Pedal de equalização.........................................................................................................22 Figura 23. Onda sonora do efeito Equalizador...................................................................................22 Figura 24. (a) Pedal de Overdrive; (b) Pedal de Distorção ................................................................23 Figura 25. (a) Onda sonora do efeito Overdrive; (b) Onda sonora do efeito Distorção.....................24 Figura 26. Software Guitar R.A. ........................................................................................................25 Figura 27. Software Fx-Box...............................................................................................................26 Figura 28. Software Revalver.............................................................................................................27 Figura 29. Comunicação Host – VST ................................................................................................30 Figura 30. Interfaces do plugin e do Host ..........................................................................................31 Figura 31. (a) Interface do SynthEdit; (b) Interface do SynthMaker; (c) Interface do Quantum Fx .32 Figura 32. Bateria virtual EZ Drummer .............................................................................................33 Figura 33. (a) Placa M-AUDIO DELTA 1010 LT; (b) Placa Creative AUDIGY 2 ZS 7.1 ..............34 Figura 34. Tela de configuração do ASIO4ALL................................................................................35 Figura 35. Adaptador P10 x P2 ..........................................................................................................37 Figura 36. Diagrama de Casos de Uso ...............................................................................................39 Figura 37. Diagrama de Caso de Uso – Configurações .....................................................................40 Figura 38. Diagrama de Caso de Uso – Seleção de Efeitos ...............................................................41 Figura 39. Diagrama de Caso de Uso – Ajuste de Parâmetros ..........................................................42 Figura 40. Diagrama de Caso de Uso – Importação/Exportação .......................................................43 Figura 41. Diagrama de Classes de Negócio: Host ............................................................................44 Figura 42. Diagrama de Classes do Plugin VST................................................................................46 Figura 43. Diagrama de Classes de Projeto: Host ..............................................................................47 Figura 44. Diagrama de Seqüência ....................................................................................................49 Figura 45. Diagrama de Componentes...............................................................................................50 Figura 46. Protótipos de Tela: Tela Principal (TELA 01)..................................................................51
vi
Figura 47. Protótipos de Tela: Tela de Configurações (TELA 02) ....................................................52 Figura 48. Protótipos de Tela: Tela de Mensagem (TELA 03)..........................................................52 Figura 49. Protótipos de Tela: Tela de Diálogo (TELA 04) ..............................................................53 Figura 50. Diagrama de Classes do DK Guitar ..................................................................................55 Figura 51. Tela Principal ....................................................................................................................56 Figura 52. Menu de contexto dos plugins ..........................................................................................57 Figura 53. Tela de Configurações ......................................................................................................58 Figura 54. Menu Arquivo...................................................................................................................60 Figura 55. Código fonte do plugin Delay...........................................................................................62 Figura 56. (a) Interface do Delay; (b) Interface padrão do Delay no DK Guitar...............................63 Figura 57. Onda sonora do Delay.......................................................................................................63 Figura 58. Código fonte do plugin Overdrive ....................................................................................65 Figura 59. (a) Interface do Overdrive; (b) Interface padrão do Overdrive no DK Guitar .................66 Figura 60. Onda sonora do Overdrive ................................................................................................66 Figura 61. Diagrama Distortion no SynthEdit ...................................................................................67 Figura 62. Código fonte do plugin Distortion....................................................................................69 Figura 63. (a) Interface do Distortion; (b) Interface padrão do Distortion no DK Guitar .................70 Figura 64. Onda sonora do Distortion................................................................................................70 Figura 65. Código fonte do Plugin Tremolo ......................................................................................71 Figura 66. (a) Interface do Tremolo; (b) Interface do Tremolo no DK Guitar...................................72 Figura 67. Onda sonora do Tremolo...................................................................................................72 Figura 68. Diagrama Chorus no SynthEdit ........................................................................................73 Figura 69. (a) Interface do Chorus; (b) Interface padrão do Chorus no DK Guitar ..........................74 Figura 70. Onda sonora do Chorus ....................................................................................................74 Figura 71. Diagrama Reverb no SynthEdit ........................................................................................75 Figura 72. (a) Interface do Reverb; (b) Interface padrão do Reverb no DK Guitar ...........................76 Figura 73. Onda sonora do Reverb .....................................................................................................77 Figura 74. Código fonte do plugin Volume .......................................................................................77 Figura 75. Interface do Volume .........................................................................................................78 Figura 76. Onda sonora do Volume ...................................................................................................78 Figura 77. (a) Distortion no FL Studio; (b) Distortion no Sonar; (c) Distortion no Audacity...........79
vii
LISTA DE TABELAS
Tabela 1. Formas de ondas...................................................................................................................8 Tabela 2. Resumo dos Softwares Similares .......................................................................................27 Tabela 3. Peças da bateria virtual EZ Drummer ................................................................................33 Tabela 4. Botões e teclas de atalho do Software DK Guitar ..............................................................59 Tabela 5. Configuração dos computadores utilizados nos testes .......................................................78
viii
LISTA DE EQUAÇÕES
Equação 1 ...........................................................................................................................................64 Equação 2 ...........................................................................................................................................64 Equação 3 ...........................................................................................................................................68 Equação 4 ...........................................................................................................................................68
ix
RESUMO
KRUEGER, Daniel. Tratamento de Sinais Sonoros no Computador Simulando Pedais Virtuais. Itajaí, 2008. 101 f. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)–Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2008. A evolução da tecnologia em processamento de sinal de áudio tem possibilitado o desenvolvimento de vários softwares na área de Computação Musical que até então não eram possíveis. Este trabalho apresenta uma proposta de um software para produzir efeitos de guitarra através do processamento do sinal no computador, sem a necessidade de equipamentos externos. A solução proposta consiste em uma aplicação para rodar na Plataforma Windows que possibilita a simulação dos principais efeitos utilizados pelos guitarristas, na qual a guitarra é ligada diretamente em um computador. Esta monografia apresenta o desenvolvimento deste trabalho, discutindo conceitos estudados na pesquisa bibliográfica e descrevendo o projeto do software que foi implementado. No intuito de complementar o conhecimento obtido nas disciplinas do Curso de Bacharelado em Ciência da Computação da Universidade do Vale do Itajaí, foram pesquisados conceitos sobre Computação Musical, digital signal processing, pedaleiras virtuais, plugins VST (Virtual Studio Technology), ASIO (Audio Stream Input/Output) e soluções similares. O projeto do software foi desenvolvido seguindo os padrões da UML (Unified Modeling Language), com auxílio da ferramenta Enterprise Architect. Foram elaborados diagramas de caso de uso, classe, seqüência e componentes, além dos protótipos de telas. Para o desenvolvimento do software foi utilizado o ambiente de programação Visual Studio. Obteve-se uma aplicação robusta, simples e funcional, capaz de atender às necessidades levantadas. Além de possibilitar a reprodução de efeitos digitais sem a necessidade de equipamentos para este fim, foi adquirida competência no desenvolvimento de soluções em Computação Musical. Palavras-chave: Computação Musical. Pedaleira virtual. Efeitos digitais. Software para guitarra. Plugin VST.
x
ABSTRACT
The evolution of technology in audio signal processing has turned possible the development of
several software in the Computer Music area which until then they were not possible. This paper
presents a proposal of software for producing effects of guitar through the processing of the signal
on the computer without the necessity of external equipment. The proposed solution consists in an
application to run the software at Windows platform that enables the simulation of the main effects
used by the guitar players, in which the guitar is directly connected to a computer. This paper
presents the development of this work, discussing concepts studied during the bibliographic
research and describing the software project that was implemented. In order to improve the
obtained knowledge in disciplines of Computer Science course from the UNIVALI, concepts about
musical computing, digital signal processing, virtual guitar processors, VST (Virtual Studio
Technology), ASIO (Audio Stream Input / Output) plug-ins and similar solutions were searched.
The software project has been developed following the standards of UML (Unified Modeling
Language), with the aid of Enterprise Architect tool. Diagrams of use case, class, sequence and
components and prototypes of screens were prepared. For the development of the software the
environment of Visual Studio programming was used. It was obtained a functional, simple and
robust application that can be able to consider the listed necessities. Besides enabling the
reproduction of digital effects without the necessity of equipment for this purpose, competence in
the development of solutions in Musical Computer was acquired.
Keywords: Computer music. Virtual guitar processor. Digital effects. Guitar software. VST plugin.
1 INTRODUÇÃO
Com o grande avanço da informática nas últimas décadas, hoje é possível desenvolver
softwares para diversas áreas, entre elas, a música. Os músicos de hoje, podem se beneficiar de
soluções em software que antigamente não existiam. Muitos equipamentos que funcionavam apenas
com uma caixa amplificadora foram posteriormente ligados ao computador.
Segundo Wanderley (2006, p.1), “criou-se assim a possibilidade de utilização de
computadores pessoais na criação de sons de alta qualidade (com pelo menos 16 bits e 44.100
amostras/s) em modo de processamento nativo, isto é, sem a adição de placas de processamento
extras para o cálculo das amostras sonoras”.
Os teclados, guitarras e contrabaixos possuíam acessórios para modificar os sons
produzidos. Era um início de processamento, porém os dispositivos inicialmente eram muito caros.
Com o crescente avanço da tecnologia, hoje é possível substituir grande parte desse equipamento
por soluções em software.
Um bom exemplo são os multi-efeitos ou pedaleiras virtuais, que são softwares utilizados
em estúdios e até mesmo ao vivo, substituindo pedais e pedaleiras. Softwares na área de
computação musical são importantes por facilitar o processamento de áudio e pelo fato de
possibilitar um profissional da área trabalhar em qualquer lugar, apenas com um notebook, não
sendo necessário estar em um estúdio com vários equipamentos.
Por esse motivo, este trabalho consiste em um software que possui os principais efeitos de
pedais e pedaleiras utilizadas por guitarristas, como por exemplo, efeitos denominados Chorus,
Reverb, Delay, Overdrive e Distorção, que serão explicados na seção de Efeitos Digitais. O
funcionamento consiste em ligar a guitarra à entrada de microfone do computador, e o software
processa o som da guitarra, assumindo o papel de uma pedaleira.
1.1 PROBLEMATIZAÇÃO
1.1.1 Formulação do Problema
O uso de computadores para produções musicais está cada vez mais freqüente. Atualmente,
os estúdios musicais do mundo inteiro utilizam computadores para fazer algum tipo de
processamento no som, seja na mixagem, masterização, inclusão de efeitos, gravação ou até mesmo
em todas essas etapas.
2
Com a tecnologia atual, é possível criar músicas e trilhas sonoras sem nenhum instrumento
musical sequer, apenas com o computador. Existem instrumentos virtuais, que simulam os sons de
instrumentos musicais reais, e programas poderosos de síntese sonora, que criam diversos tipos de
sons. Mas esses softwares são extremamente caros, e difíceis de serem operados, o que requer um
alto nível de conhecimento e treinamento.
Desta forma, esse trabalho proporcionou a implementação de um software que simula os
efeitos de pedais e pedaleiras utilizados por guitarristas, na qual sua principal característica é a
simplicidade de operação. Atualmente, os efeitos mais conhecidos e utilizados pelos guitarristas
são: Chorus, Reverb, Delay, Overdrive e Distorção, que são o foco deste trabalho.
1.1.2 Solução Proposta
A solução proposta consiste em um software que processa o sinal de uma guitarra ligada a
um computador, simulando os sons dos principais efeitos utilizados pelos guitarristas.
A Figura 1 apresenta uma imagem de como é feita a conexão da guitarra, computador e
caixas de som.
Figura 1. Conexão Guitarra – Computador
Fonte: Adaptado de Gore (2007).
3
1.2 OBJETIVOS
1.2.1 Objetivo Geral
O objetivo geral desse trabalho é desenvolver um software capaz de adicionar efeitos
sonoros ao som de uma guitarra ligada ao computador, substituindo o uso de pedais e pedaleiras. O
software deverá possuir os principais efeitos de uma pedaleira ou pedais, como Chorus, Reverb,
Delay, Overdrive e Distorção, podendo estes serem usados individualmente, combinados ou
simultaneamente.
1.2.2 Objetivos Específicos
• Pesquisar conceitos sobre Computação Musical;
• Pesquisar softwares similares;
• Pesquisar e analisar bibliotecas de som e linguagens de programação utilizadas para o
desenvolvimento desse tipo de software;
• Compreender conceitos relacionados ao processamento de áudio digital;
• Realizar a modelagem do software;
• Implementar o software; e
• Testar e validar o software implementado.
1.3 Metodologia
Este trabalho inclui a execução das etapas previstas na proposta deste trabalho que são:
(i) pesquisa; (ii) modelagem; (iii) desenvolvimento; (iv) testes e validação e (v) documentação.
Na primeira etapa do trabalho, foram pesquisados softwares similares, conceitos de
Computação Musical, tecnologias de processamento sonoro e a teoria necessária para o
desenvolvimento do software proposto.
A segunda etapa, referente à modelagem e o projeto do software, foi desenvolvida seguindo
os padrões da UML 2.0, com auxílio da ferramenta case Enterprise Architect, que foi utilizada para
elaborar diagramas de casos de uso, classe, seqüência e componentes, além dos requisitos
funcionais e não funcionais.
4
Já na terceira etapa, desenvolvimento, a implementação do software foi colocada em prática
seguindo a modelagem realizada na etapa anterior. Nessa etapa foram desenvolvidos os plugins
VST e o software host..
Na etapa de validação e testes, foram realizados vários testes no software a fim de
diagnosticar possíveis problemas e corrigi-los, para garantir seu correto funcionamento.
Por fim, a etapa de documentação compreendeu o registro dos processos referentes às etapas
anteriores, seguindo as normas exigidas pela Coordenação de TCC.
1.4 Estrutura do trabalho
As páginas a seguir estão estruturadas em três capítulos adicionais: Fundamentação Teórica,
Desenvolvimento e Conclusões.
No Capítulo 2, Fundamentação Teórica, é apresentada uma revisão bibliográfica sobre
Computação Musical e tecnologias de processamento de áudio, assim como uma análise a respeito
de softwares similares. O Capítulo 3 apresenta detalhadamente o desenvolvimento do sistema,
incluindo sua especificação e sua modelagem em UML. Por fim, no Capítulo 4, são apresentadas as
conclusões do TCC.
2 FUNDAMENTAÇÃO TEÓRICA
Neste capítulo, serão abordados os principais conceitos ao entendimento e desenvolvimento
de aplicações para processamento de áudio, incluindo temas como: Computação Musical, softwares
similares, efeitos de guitarra e tecnologias utilizadas, com maior ênfase para VST. Também serão
apresentados conceitos e características sobre processamento de sinais digitais e os efeitos sonoros
que serão implementados.
2.1 Computação Musical
A Computação Musical é a área da Ciência da Computação dedicada ao estudo das
aplicações computacionais destinados a problemas musicais, investigando métodos, técnicas e
algoritmos para processamento e geração de música e sons, representações digitais e
armazenamento de informação sônica e musical (MILETTO et al., 2004).
Atualmente existem muitos softwares voltados à música, em áreas como produção musical,
processamento sonoro, informática na educação, gravação, entre outras. Empresas como Steinberg e
Cakewalk, possuem ótimos softwares para produção, gravação e seqüenciamento, que tornam o
computador um verdadeiro home estúdio. Como exemplo, é possível citar softwares como o Sonar,
Cubase e Cool Edit. Esses softwares são gravadores e seqüenciadores multi-pista, que oferecem
suporte a vários recursos e efeitos digitais, que tornam possível a produção de músicas inteiramente
pelo computador.
Uma tecnologia muito utilizada na Computação Musical para representação de música em
formato digital é o padrão MIDI (Musical Instrument Digital Interface). Pode-se encontrar uma
definição de MIDI em Miletto et al. (2004, p.22), na qual é citado que “O padrão MIDI usa
tecnologia digital, codificando eventos musicais em dados binários (bits) que são transferidos por
meio de uma linha física (cabo MIDI) de um equipamento para outro”.
Em Iazzetta (2000), é citado que MIDI não transmite áudio, apenas mensagens que
comandam aparelhos que sejam capazes de entendê-las, como se fosse um controle remoto muito
sofisticado. O MIDI surgiu no início da década de 80, para padronizar a comunicação entre
instrumentos eletrônicos, que logo se tornou um padrão mundial. Diferente de outros formatos de
áudio como wav e mp3, o MIDI não possui o áudio propriamente dito, e sim instruções para
6
reproduzi-lo, como se fosse uma partitura em formato digital. Dessa forma, o tamanho de arquivos
do tipo MIDI são extremamente pequenos, o que facilita sua transmissão e armazenamento.
2.1.1 Som
Segundo Miletto et al. (2004), o som é a vibração do ar, ou seja, variações na pressão do ar,
que são percebidas através do ouvido. Se essa pressão varia de acordo com um padrão repetitivo
dizemos que o som tem uma forma de onda periódica. Se não há um padrão perceptível no som este
é chamado de ruído.
Pode-se encontrar outra definição de som em Brito (2003, p 17), onde é afirmado que “som
é tudo que soa! Tudo o que o ouvido percebe sob a forma de movimentos vibratórios”. Esse autor
descreve que o som possui quatro qualidades ou parâmetros: altura, intensidade, timbre e duração.
2.1.1.1 Altura
A altura está relacionada com a freqüência do som, ou seja, define se o som é grave ou
agudo. Por exemplo: ao tocar um piano, percebe-se que quanto mais à direita estiver uma tecla,
mais alto ou agudo será o seu som, e quanto mais a esquerda, o som será mais baixo ou grave
(MILETTO et al., 2004).
Utilizando um osciloscópio1 para comparar sons com alturas diferentes, nota-se que o
número de ciclos por unidade de tempo se altera. Dessa forma, quanto mais agudo for o som, maior
será seu número de ciclos dentro de um intervalo de tempo.
O número de ciclos dentro do intervalo de um segundo é chamado freqüência, expresso em
unidades chamadas hertz (Hz). Desta forma, um som com 500 Hz, indica que a vibração ocorre com
uma freqüência de 500 ciclos por segundo. Ao dobrar a freqüência de um som, ele é elevado uma
oitava acima, ficando mais agudo (MILETTO et al., 2004).
Na Figura 2, está ilustrada uma onda com freqüência de 3 Hertz. Segundo Izecksohn (2005),
o ouvido humano é capaz de perceber sons de aproximadamente 20 Hz a 20.000 Hz, o que significa
que o som ilustrado na Figura 2 não é perceptível ao ouvido humano.
1 Instrumento de teste e medição que fornece uma representação visual de sinais elétricos.
7
Figura 2. Onda com freqüência de 3 Hertz
Fonte: Adaptado de Educom (2007).
2.1.1.2 Intensidade
Ao aumentar ou diminuir o som de um rádio ou uma televisão, a intensidade (também
denominada amplitude) do som é alterada. Denominações como “alto” e “baixo” devem ser
utilizadas apenas para se referenciar à altura do som, e não para a intensidade, como geralmente é
utilizada. Para se referenciar de forma correta à intensidade do som, devem ser utilizados os
adjetivos “forte” e “fraco” ou “mais” e ”menos”. A unidade utilizada para a medida da intensidade
de ondas sonoras e sinais de áudio costuma ser expressa em decibéis (dB) (MILETTO et al., 2004).
Ao comparar sons com intensidades diferentes em um osciloscópio, nota-se que a altura das
ondas é alterada. A altura de uma onda é denominada amplitude, portanto um som com maior
amplitude é um som mais forte.
Na Figura 3, é ilustrada a amplitude de uma onda sonora, na qual a onda
superior possui maior amplitude se comparada à onda inferior.
Figura 3. Amplitude de uma onda
Fonte: Adaptado de Educom (2007).
8
2.1.1.3 Timbre
Um violão e um piano não produzem um som com as mesmas características ao serem
tocados com a mesma altura e a mesma intensidade. Isso ocorre por existir outro fator além da
altura e da intensidade em um som. Esse fator é denominado timbre, que é a característica peculiar
de cada manifestação sonora. No caso de instrumentos relacionados com caixa acústica (como o
violão), temos características como produção sonora, tamanho e expansão sonora (MILETTO et al.,
2004).
Ao observar sons com timbres diferentes em um osciloscópio, é percebida a mudança no
formato da onda sonora. Na Tabela 1 são apresentadas três formas de onda, que são relacionadas
com seu timbre característico e instrumentos que se assemelham a cada caso.
Tabela 1. Formas de ondas
Forma de onda Timbre Instrumento
Suave, doce Flauta, assovio
Claro, brilhante Violino, trompete
Simples, “quente” Clarinete, oboé
Fonte: Adaptado de Miletto et al., (2004).
2.1.1.4 Duração
“Um som pode ser medido pelo seu tempo de ressonância e classificado como curto ou
longo. Exemplos: a madeira produz sons curtos, ao passo que metais produzem sons que vibram
durante um lapso maior” (BRITO, 2003, p. 18).
Na Figura 4, duas ondas sonoras são ilustradas, na qual a onda superior possui uma duração
maior que a onda inferior.
Figura 4. Duração de uma onda
Fonte: Adaptado de Educom (2007).
9
2.1.2 DSP
DSP (Digital Signal Processing) é o estudo de sinais em representação digital e de técnicas
utilizadas para o processamento desses sinais (SMITH, 1999).
O DSP é utilizado em várias áreas como matemática, engenharia elétrica, física, música,
entre outras. Na música, o DSP é muito utilizado para criação de efeitos digitais através de técnicas
denominadas filtros digitais.
2.1.2.1 Filtros Digitais
“No processamento de sinais o papel do filtro é de remover partes indesejadas do sinal, bem
como ruídos, ou simplesmente extrair partes importantes do mesmo, como componentes de uma
certa banda de freqüência.” (NUNES et al., 2007).
Para Scandelari (2007), um filtro digital é um sistema temporal discreto projetado para
passar o conteúdo de um sinal de entrada em uma determinada banda de freqüências, ou seja, a
função de transferência do filtro forma uma janela através da qual somente é permitida a passagem
da parte desejada do sinal de entrada. Segundo Nunes et al. (2007), existem vários tipos de filtros
digitais, entre eles destacam-se:
• Passa-baixas: filtro que impede a passagem de freqüências altas a partir de uma
freqüência de corte, permitindo apenas a passagem de freqüências baixas;
• Passa-altas: ao contrário do filtro Passa-baixas, esse filtro é utilizado para impedir a
passagem de freqüências baixas a partir de uma freqüência de corte, permitindo apenas a
passagem de freqüências que estão acima da freqüência de corte;
• Passa-banda: permite a passagem de uma gama limitada de freqüências, ou seja, possui
duas freqüências de corte, uma baixa e uma alta, na qual apenas as freqüências que
estiverem entre as duas freqüências de corte passarão; e
• Rejeita-banda: bloqueia a passagem de uma gama limitada de freqüências.
Na Figura 5, pode-se ver graficamente como os filtros atuam no sinal de entrada.
10
(a) (b) (c) (d)
Figura 5. Filtros Digitais: (a) Passa-baixas; (b) Passa-altas; (c) Passa-banda; (d) Rejeita-banda
Fonte: Adaptado de Valenzuela (2005).
Outro filtro muito utilizado para a implementação de efeitos digitais é o filtro Comb. O filtro
Comb adiciona uma parte levemente defasada do próprio sinal, o que gera cancelamentos de fase.
Segundo Mendes (2007), os filtros Comb são utilizados para remover uma freqüência particular e
seus harmônicos. A resposta em freqüência de um filtro Comb consiste de uma série de picos
regularmente espaçados, de modo que ele parece um pente, conforme a Figura 6.
Figura 6. Filtro Comb
Fonte: Adaptado de Elliott (2006).
O cancelamento de fase ocorre quando duas ondas se cancelam. Conforme Iazzetta (2000),
para duas ondas de mesma freqüência e amplitude, mas defasadas em 180º, as amplitudes estão
exatamente opostas, cancelando-se totalmente, como pode-se notar na Figura 7.
11
Figura 7. Cancelamento de fases
Fonte: Adaptado de Iazzetta (2000).
2.1.2.2 Modulação
Modulação é o processo de variação de altura, intensidade, timbre ou duração de uma onda
sonora. Para a implementação da modulação, uma técnica muito utilizada é o LFO (Low Frequency
Oscilator), ou oscilador de baixa freqüência em português (AUDIOCOURSES, 2007).
LFO é uma técnica utilizada em síntese e amostragem sonora para criação de muitos tipos
diferentes de efeitos. Ao contrário dos osciladores convencionais, o LFO não é utilizado como fonte
geradora de sons, e sim como uma forma de modulação de parâmetros como freqüência e
intensidade (AUDIOCOURSES, 2007).
Ao utilizar um LFO na intensidade de um sinal por exemplo, obtém-se o efeito Tremolo. O
LFO também é muito utilizado na freqüência de sinais de áudio, a fim de obter efeitos como
Chorus, Flanger e Vibrato.
2.1.2.3 Transformada de Fourier
Segundo Neyra-Araoz (2007) a Transformada de Fourier é uma técnica largamente
empregada em processamento de sinais, como processamento de sons e processamento de imagens.
Denominada assim em homenagem ao físico francês Jean Baptiste Joseph Fourier (1768-1830), a
Transformada de Fourier é um procedimento matemático utilizado para transformar um sinal que
está amostrado no domínio do tempo para o domínio das freqüências (MSP, 2008).
A Transformada de Fourier pode ser classificada de diversas maneiras, mas para a utilização
em computadores é empregada a DFT (Discrete Fourier Transform). Em 1965 J.W. Cooley e J.W.
Tukey conseguiram uma revolução no tratamento digital de sinais com a publicação da
Transformada Rápida de Fourier, a FFT (Fast Fourier Transform) (MSP, 2008)
12
Segundo Oliveira (2007), “A FFT não é um tipo diferente de transformada e sim uma
técnica que possibilita avaliar DFT de forma mais rápida e econômica”, possibilitando o
processamento de sinais digitais em tempo real.
A Figura 8 ilustra o que ocorre ao aplicar a Transformada de Fourier em uma onda sonora.
Figura 8. Transformada de Fourier aplicada em uma onda simples
Fonte: Adaptado de MSP (2008).
A onda mais à esquerda, possui uma amplitude de 10 decibéis e uma freqüência de 5 Hertz.
Ao aplicar a Transformada de Fourier, a amostragem da onda é transferida do domínio do tempo
para o domínio das freqüências, ilustrando apenas a freqüência contida na onda sonora.
Da mesma forma, com a Transformada de Fourier pode-se analisar ondas sonoras compostas
por mais de uma freqüência, conforme ilustra a Figura 9, composta por duas freqüências, sendo elas
de 5 e 10 Hertz.
Figura 9. Transformada de Fourier aplicado em uma onda composta
Fonte: Adaptado de MSP (2008).
13
2.1.3 Efeitos Digitais
Efeitos digitais são algoritmos que utilizam técnicas de DSP para processar o som,
alterando-o de alguma forma. Essa alteração pode ser feita na intensidade do som, no timbre, na
altura, na duração, enfim, existem várias técnicas e métodos de processamento sonoro. Esses
diferentes efeitos proporcionados pelo processamento do som são nomeados e divididos em
categorias (HARMONY CENTRAL, 2007).
Atualmente, os efeitos digitais podem ser encontrados em forma de pedais, pedaleiras, racks
de efeitos, mesas de som, softwares para computador, teclados, etc. Existem parâmetros para cada
efeito, que podem ser ajustados pelo usuário. A Figura 10 ilustra alguns equipamentos da marca
Behringer2 que possuem algoritmos DSP.
(a) (b) (c)
Figura 10. (a) Pedaleira V-Amp2; (b) Pedal Digital Reverb; (c) Mesa de som Behringer
Fonte: Adaptado de Behringer (2007).
Na Figura 10a, é ilustrada uma pedaleira chamada V-Amp2. Essa pedaleira possui vários
efeitos como Chorus, Reverb, Distorção, Delay, etc. Esses efeitos podem ser utilizados
individualmente, ou simultaneamente. Já na Figura 10b, é ilustrado um pedal cujo único efeito é o
Reverb. No caso da utilização de pedais com apenas um efeito, eles geralmente são ligados em
conjunto, no qual a saída de som de um pedal é conectada na entrada de som de outro, formando
uma ligação em série, ilustrada na Figura 11.
2 Mais detalhes disponíveis em http://www.behringer.com
14
Figura 11. Ligação de pedais em série
Fonte: Adaptado de Senfonimuzik (2007).
Nas próximas subseções, serão abordados os principais efeitos digitais utilizados por
guitarristas, entre eles o Chorus, Delay, Reverb, Distorção e Overdrive. Serão explicados conceitos,
características, funcionamento e qual sua utilização.
2.1.3.1 Chorus
Chorus é um efeito que pode ser utilizado em vários instrumentos, como guitarras, baixos,
violões, etc. Chorus, que significa coro, é um efeito que duplica o som original, dando a impressão
de ter mais de um instrumento sendo tocado ao mesmo tempo. Por exemplo, ao tocar uma guitarra
ligada a um pedal de Chorus, tem-se a impressão de que outra guitarra está sendo tocada
simultaneamente. No caso de utilizá-lo na voz (através de um microfone ligado a um efeito de
Chorus), a impressão é de que existe mais de uma pessoa cantando (HARMONY CENTRAL,
2007).
Para dar essa impressão de duplicidade ou coro, o som não é apenas duplicado, mas
propositalmente atrasado e é acrescentada uma pequena modulação em relação ao som original.
Essas alterações são mínimas, para que o som não perca suas características originais. Na Figura 12
é ilustrado um pedal de Chorus da marca Danelectro.
15
Figura 12. Pedal de Chorus
Fonte: Adaptado de Danelectro (2007).
Os parâmetros mais encontrados em pedais de Chorus são:
• Rate: ajusta o oscilador do efeito Chorus; e
• Depth: ajusta a intensidade do efeito.
Na Figura 13 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito Chorus
aplicado.
Figura 13. Onda sonora do efeito Chorus
2.1.3.2 Tremolo
Tremolo é um efeito que altera a intensidade do som em curtos períodos de tempo
(geralmente menor que um segundo), dando a sensação para o ouvinte de que o som está oscilando.
16
Segundo Behringer (2007), o efeito Tremolo é obtido através da modulação periódica da
intensidade sonora do sinal. Para tal, é produzida uma troca contínua entre os sinais altos e baixos,
originando um som Tremolo. Na Figura 14 é ilustrado um pedal de Tremolo.
Figura 14. Pedal de Tremolo
Fonte: Adaptado de Behringer (2007).
O Tremolo possui três parâmetros principais:
• Rate: ajusta o oscilador ou velocidade do efeito Tremolo;
• Wave: altera o formato de onda sonora; e
• Depth: ajusta a intensidade do efeito.
Na Figura 15 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito Tremolo
aplicado.
Figura 15. Onda sonora do efeito Tremolo
17
2.1.3.3 Delay
O efeito Delay, também conhecido como eco, acrescenta um atraso ao som original. O
Delay é um efeito muito utilizado pelos guitarristas para dar mais “vida” à guitarra, fazendo com
que o som não fique tão “seco” cantando (HARMONY CENTRAL, 2007).
Assim como o Chorus, o Delay também pode ser utilizado em outros instrumentos como
violão, voz, teclados, etc. Na Figura 16, é ilustrado um pedal de Delay da marca Behringer.
Figura 16. Pedal de Delay
Fonte: Adaptado de Behringer (2007).
Geralmente existem três parâmetros principais nos efeitos de Delay:
• Level: é a intensidade do efeito em relação ao som original. Com esse parâmetro, é
possível fazer o Delay soar mais fraco do que o som original (que é o que geralmente
acontece), para não “embolar” o som;
• Feedback: está relacionado com o número de repetições do som original. Esse parâmetro
permite ajustar o Delay para que repita o som 1 ou 10 vezes por exemplo; e
• Time: é o intervalo de tempo entre uma repetição e outra. Esse intervalo geralmente é
muito pequeno (na unidade de micro segundos), mas que pode chegar até 2,5 segundos
aproximadamente.
18
Na Figura 17 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito Delay
aplicado.
Figura 17. Onda sonora do efeito Delay
2.1.3.4 Reverb
É o efeito que adiciona ambientação ou reverberação ao som. Por exemplo, ao falar dentro
de uma sala pequena, a voz não irá se propagar por muito tempo, o que não acontece dentro de uma
Igreja. Esse efeito é muito utilizado nas gravações em estúdio.
Em Iazzetta (2000), é afirmado que "Em um ambiente qualquer, as ondas sonoras são
refletidas ao encontrarem uma superfície refletora. Essas primeiras reflexões (early reflections) são
seguidas de outras reflexões menos intensas e mais atrasadas em relação ao sinal inicial. A soma de
todas esses componentes cria o efeito de reverberação”. O Reverb é classificado em relação ao tipo
de espaço simulado, os principais são:
• Room: simula a reverberação de uma sala ou quarto pequeno;
• Hall: simula a reverberação de uma sala maior, como uma Igreja; e
• Plate: simula a reverberação de um lugar aberto.
Seus principais parâmetros são:
• Time: permite ajustar a duração da reverberação;
• Tone: responsável pela equalização do efeito; e
• Mix ou Level: é a intensidade do efeito Reverb.
Na Figura 18, é ilustrado um pedal de Reverb.
19
Figura 18. Pedal de Reverb
Fonte: Adaptado de Boss (2007).
Na Figura 19 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito Reverb
aplicado.
Figura 19. Onda sonora do efeito Reverb
2.1.3.5 Compressor
Segundo Behringer (2007), o compressor é um efeito que comprime o som, normalizando a
intensidade do sinal e retirando um pouco da dinâmica do som. Esse processamento é feito
reduzindo o alcance dinâmico3 de um sinal e os picos de intensidade sonora, o que diminui a
diferença entre as passagens fortes e fracas de um sinal. Por exemplo, ao palhetar as cordas da
3 Alcance dinâmico: Relação entre o maior e o menor nível do sinal.
20
guitarra com força ou suavemente, a intensidade do som não irá alterar significativamente. Na
Figura 20 é ilustrado um pedal de compressão.
Figura 20. Pedal de compressão
Fonte: Adaptado de Behringer (2007).
Os principais parâmetros encontrados em pedais de compressão são:
• Tone: responsável pela equalização do efeito;
• Level: intensidade do efeito Compressor;
• Attack: ajusta a rapidez como que o Compressor reage ao sinal de entrada; e
• Sustain: ajusta a intensidade de sustentação ou prolongação do efeito.
Na Figura 21 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito
compressor aplicado.
21
Figura 21. Onda sonora do efeito Compressor
2.1.3.6 Equalizador
O equalizador atua diretamente na intensidade de freqüências do som, aumentando ou
diminuindo a intensidade de certas faixas de freqüência. Em amplificadores de guitarras e pedais de
distorção, geralmente são encontrados três botões para ajustar a freqüência: Low, Mid e High. O
controle Low lhe permite ajustar a intensidade das freqüências graves, o Mid as freqüências médias
e o High as freqüências agudas (HARMONY CENTRAL, 2007).
Conforme Izecksohn (2005), também existem os equalizadores gráficos, que podem possuir
de quatro a vinte parâmetros de equalização, o que possibilita um ajuste mais refinado e preciso. A
faixa de freqüência de equalização depende do equalizador, mas em pedais de guitarra geralmente
varia de 100 Hz a 6.4 kHz. Na Figura 22, é ilustrada a imagem de um pedal de equalizador gráfico.
22
Figura 22. Pedal de equalização
Fonte: Adaptado de Behringer (2007).
Os principais parâmetros encontrados em pedais de compressão são:
• Level: intensidade do efeito; e
• Sliders de equalização: ajustam os parâmetros da freqüência em questão.
Na Figura 23 são ilustradas duas ondas sonoras, na qual a inferior possui o efeito
equalizador aplicado. Nesse exemplo, as freqüências altas foram realçadas e as freqüências baixas
atenuadas.
Figura 23. Onda sonora do efeito Equalizador
23
2.1.3.7 Distorção
O efeito de distorção, como o próprio nome sugere, distorce o som da guitarra. É o efeito
mais utilizado pelos guitarristas, principalmente em estilos musicais como Blues, Rock e Heavy
Metal.
Para Luvizotto, Furlanete e Manzolli (2006), “o fenômeno de distorção de um sinal está
relacionado ao enriquecimento do espectro de freqüências, ou seja, quanto mais distorcido estiver o
sinal, maior será o número de componentes espectrais”. A distorção pode ser dividida em duas
categorias: Overdrive e Distortion.
Overdrive é uma saturação4 mais leve no som da guitarra, se comparado ao Distortion.
Como o Overdrive possui um ganho médio ou fraco, a dinâmica do guitarrista é valorizada, pois o
som altera bastante com a performance instrumental.
O Distortion possui mais ganho ou saturação do que o Overdrive, o que o torna um efeito
mais “pesado” e agressivo. Pelo fato do alto ganho, a dinâmica do guitarrista não influencia muito
no resultado final do som. Na Figura 24a, é ilustrado um pedal de Overdrive, e na Figura 24b, um
pedal de distorção.
(a) (b)
Figura 24. (a) Pedal de Overdrive; (b) Pedal de Distorção
Fonte: Adaptado de Boss (2007).
4 Ocorre quando a intensidade do sinal ultrapassa sua capacidade máxima permitida.
24
Os principais parâmetros dos efeitos Overdrive e Distortion são os mesmos:
• Gain/Dist/Drive: permite ajustar o ganho da saturação;
• Tone: é um equalizador que filtra freqüências agudas; e
• Level: é a intensidade geral do efeito.
Na Figura 25a são ilustradas duas ondas sonoras, na qual a inferior possui o efeito
Overdrive aplicado. Já na Figura 25b, a onda inferior possui o efeito de distorção.
(a) (b)
Figura 25. (a) Onda sonora do efeito Overdrive; (b) Onda sonora do efeito Distorção
2.2 Softwares Similares
Neste tópico, serão apresentados softwares similares à proposta deste TCC, a fim de levantar
as características de cada software, bem como identificar as tecnologias utilizadas em seu
desenvolvimento. Os softwares abordados foram: Guitar R.A., FX-Box e Revalver.
2.2.1 Guitar R.A.
O software Guitar R.A. é uma pedaleira virtual desenvolvida por Raphael Zimermann para
rodar na plataforma Windows. O software utiliza plugins VST para simular vários efeitos de
guitarra no seu computador, como Chorus, Reverb, Distorção, entre outros, além de possuir
ferramentas interessantes, como redutor de ruídos, metrônomo5, gravador de som e opção de tocar
5 Instrumento que marca o andamento de uma peça musical.
25
junto com playbacks6. Também é utilizado o driver de som ASIO4ALL (ASIO para todos) para
diminuir a latência7 do processamento sonoro. Todos os plugins VST incluídos são freeware, assim
como o Guitar R.A. A tecnologia VST foi criada pela empresa Steinberg, que a tornou pública para
que desenvolvedores possam utilizá-la para criar seus próprios programas (ZIMERMANN, 2007).
Na Figura 26 é ilustrada a tela principal do software.
Figura 26. Software Guitar R.A.
Fonte: Software Guitar R.A.
2.2.2 FX-Box
O FX-Box é um software de processamento de áudio para guitarra, que possui efeitos DSP
em tempo real e roda na plataforma Windows. A latência entre o processamento do sinal de entrada
e sua saída é muito pequena. O software foi desenvolvido pelo russo Sasha Gojkovic utilizando a
tecnologia DirectSound para acesso rápido à placa de som, além de algoritmos DSP rápidos e
6 Sonorização de uma música sem a presença da voz do cantor(a) ou de algum instrumento musical. 7 Diferença de tempo entre o início de um evento e o momento em que seus efeitos tornam-se perceptíveis.
26
otimizados. Entre eles, estão presentes efeitos como Overdrive, Distortion, Delay, Reverb, Chorus,
Wah-wah, Pitch shifter, Tremolo, Equalizador, Compressor e Phaser, que podem ser utilizados
simultaneamente (GOJKOVIC, 2002).
É disponibilizada uma versão de demonstração que expira em trinta dias no site do
fabricante. Na Figura 27, é mostrada a interface do FX-Box.
Figura 27. Software Fx-Box
Fonte: Software Fx-Box.
2.2.3 Revalver
Revalver é um simulador de amplificador de guitarra desenvolvido pela Alien Connections
que pode ser executado na plataforma Windows através dos drivers ASIO/WDM ou na plataforma
Macintosh através do CoreAudio. O software permite o uso de dezesseis módulos simultaneamente,
que possuem funções de pré-amplificadores, amplificadores de potência, auto-falantes, Delay,
simulador de ambiente, Chorus, Reverb, Tremolo, compressor, equalizador gráfico, auto-Wah, entre
outros (ALIEN CONNECTIONS, 2005).
Algumas combinações, (presets), pré-definidos acompanham o software, para facilitar a
manipulação dos módulos. O Revalver também foi desenvolvido com a tecnologia VST
disponibilizada pela Steinberg. Uma versão de demonstração do programa está disponível no site do
27
fabricante para download, que possui todas as funcionalidades do programa habilitadas, porém é
emitido um ruído a cada quarenta e cinco segundos. A Figura 28 mostra a interface do Revalver.
Figura 28. Software Revalver
Fonte: Software Revalver.
A Tabela 2 apresenta um resumo das principais características dos Softwares similares e do
Software proposto neste trabalho.
Tabela 2. Resumo dos Softwares Similares
Software Tecnologia Free Interoperabilidade ASIO Plataforma Guitar R.A. VST Sim Sim Sim Win FX BOX DirectX Não Não Não Win Revalver VST Não Sim Sim Win/Mac Software implementado VST Sim Sim Sim Win
28
2.3 Bibliotecas de Som e linguagens de Programação
Nesse item, serão apresentadas as principais bibliotecas e API’s (Application Programming
Interface) atualmente utilizadas para programação e desenvolvimento de aplicações voltadas à
música, e processamento e manipulação de áudio. Essa pesquisa fez-se necessária para a
comparação entre as tecnologias disponíveis, a fim de escolher a mais apropriada para o
desenvolvimento do software proposto.
2.3.1 DirectX
DirectX é uma coleção de bibliotecas multimídia desenvolvidas pela Microsoft, muito
utilizada em programação de jogos para rodar na plataforma Windows. Ela possui uma biblioteca
chamada DirectSound, com diversas funções para manipulação de áudio. A Microsoft disponibiliza
gratuitamente o SDK (Software Development Kit) da DirectX para download em seu site, que
permite utilizar linguagens de programação como C++, C# e VB.net (MICROSOFT, 2007).
O DirectX permite a criação de plugins de áudio, que podem ser utilizados em vários
programas como Band in a Box, Cakewalk Sonar, Cubase, Cool Edit, etc.
2.3.2 SDL (Simple DirectMedia Layer)
O SDL é uma biblioteca multimídia multi-plataforma que possibilita a manipulação de som
e vídeo. Ela pode ser programada em várias linguagens, como C++, C#, Java, PHP, Perl, Python,
Ruby, dentre outras (SDL, 2006).
Foi lançada em 1998 pelo desenvolvedor de jogos Sam Lantinga, e é distribuída sobre a
licença LGPL, que permite utilizá-la em programas proprietários sem custo algum, porém a
biblioteca deve ser referenciada no programa. Jogos para Linux como Sim City 3000 e Heretic II,
utilizam a biblioteca SDL.
2.3.3 PortAudio
PortAudio é uma plataforma de código aberto desenvolvida pelo programador e compositor
Ross Bencina e pelo programador e designer Phil Burk. A plataforma foi escrita na linguagem C,
que pode ser compilada para várias plataformas como Windows, Unix, Macintosh, etc. O SDK
fornece recursos muito simples para gravar e tocar sons, além de bibliotecas de entrada e saída de
áudio, onde os programas desenvolvidos podem ser testados (PORTAUDIO, 2006).
29
Vários programas foram desenvolvidos utilizando o PortAudio, como o Audacity,
SoundHack, Mobius e AmbiLoop dentre outros.
2.3.4 OpenAL
OpenAL (Open Audio Library) é uma API 3D para manipulação de áudio cuja estrutura de
classes é muito parecida com a OpenGL (Open Graphics Library). Assim como o DirectX e a SDL,
ela também é muito utilizada no desenvolvimento de jogos e aplicações de áudio, geralmente
combinada com o OpenGL (OPENAL, 2006).
A Creative Labs incluiu extensões ao OpenAL como EAX e XRAM, que possibilitaram
uma extensão para efeitos de áudio. Essas extensões foram introduzidas no OpenAL para
disponibilizar uma plataforma genérica com suporte a efeitos DSP avançados (CREATIVE, 2007).
2.3.5 VST
VST (Virtual Studio Technology) é uma tecnologia desenvolvida pela Steinberg em 1996
para a criação de plugins, cuja função é processar áudio e MIDI em tempo real com alta qualidade
sonora. Os plugins VST tornaram-se um padrão na indústria de desenvolvimento de aplicativos e
softwares para áudio e música, podendo ser utilizados em diversos softwares, como Logic Audio,
Cubase SX, Pro Tools, Nuendo, Cakewalk Sonar, Fruity Loops, entre outros (JÚNIOR, 2005).
Um plugin VST não é uma aplicação ou software, mas sim um componente de
processamento de áudio que deve ser utilizado em um software hospedeiro, denominado host. O
host disponibiliza o áudio que o plugin VST irá processar. O plugin VST processa o som
normalmente utilizando o processador do computador, não sendo necessário um processador
dedicado ao processamento digital de sinal. O sinal a ser processado pelo plugin é quebrado em
vários blocos, no qual o programa host é o responsável em definir seu tamanho, e enviá-los na
seqüência correta para o plugin (STEINBERG, 2007).
Do ponto de vista do host, o plugin VST é uma caixa preta com um número de entradas,
saídas e parâmetros associados, não sendo necessário ao host ter conhecimento sobre o
processamento que é feito dentro do plugin.
A Steinberg disponibiliza gratuitamente o SDK do VST na linguagem C++, que permite
desenvolver plugins para Windows, Linux e Macintosh. Esse SDK já possui traduções para
30
linguagens de programação como Delphi e Java, criando mais opções para os programadores,
porém perde-se a compatibilidade com vários sistemas operacionais. No Windows por exemplo, um
plugin VST é um arquivo com extensão “.DLL”.
Na Figura 29, demonstra-se a comunicação entre um programa host e um plugin VST, na
qual o host passa o áudio e parâmetros para o plugin, que processa o áudio recebido e devolve o
som processado para o host.
Figura 29. Comunicação Host – VST
O processamento de áudio no plugin é feito através de três métodos, chamados process(),
processReplacing() e processDoubleReplacing(). O método process(), recebe o som do host, aplica
o algoritmo de processamento, e adiciona o resultado no buffer de saída (output) acumulando o sinal
original, enquanto os métodos processReplacing() e processDoubleReplacing(), sobrescrevem o
buffer de saída.
Para criar a interface do plugin, existe um framework8 denominado VSTGUI, que está
incluído no SDK. O VSTGUI permite ao desenvolvedor separar a interface do plugin do código de
processamento sonoro, o que facilita a portabilidade e a programação. A interface também pode ser
padronizada pelo host através de métodos que retornam o número de parâmetros, nome dos labels,
etc, permitindo ao host criar interfaces dinâmicas para os plugins.
8 Conjunto de elementos e suas interligações constituindo a base de um sistema ou projeto.
31
Na Figura 30, é ilustrado o programa VstHost e um plugin de distorção chamado Soul Force,
onde pode-se notar duas interfaces, sendo uma própria do plugin (interface à esquerda), e a outra
disponibilizada pelo host (interface à direita).
Figura 30. Interfaces do plugin e do Host
Fonte: Software VstHost.
Para facilitar a programação de plugins VST, existem softwares como SynthEdit9 (Figura
31a), SynthMaker10 (Figura 31b) e Quantum Fx11 (Figura 31c). Esses softwares possuem blocos e
módulos pré-definidos de processamento de áudio, que podem ser conectados para formar blocos
maiores, criando seus próprios plugins. Com o diagrama montado, é possível criar a interface
gráfica do plugin adicionando botões e controles para ajustar seus parâmetros. Esses plugins podem
ser exportados para uma DLL, que pode ser utilizada em qualquer software que possua suporte à
tecnologia VST.
9 Mais detalhes disponíveis em http://www.synthedit.com 10 Mais detalhes disponíveis em http://synthmaker.co.uk/index.html 11 Mais detalhes disponíveis em http://www.quantum-fx.com
32
(a) (b) (c)
Figura 31. (a) Interface do SynthEdit; (b) Interface do SynthMaker; (c) Interface do Quantum Fx
Fonte: Softwares SynthEdit, SynthMaker e Quantum Fx.
Também existem os plugins VSTi (Virtual Studio Technology Instrument), que são
conhecidos como instrumentos virtuais. Um plugin VSTi pode simular e sintetizar o som de
diversos instrumentos como piano, guitarra, bateria, violão, violino e trompete, enquanto os plugins
VST não têm a capacidade de gerar sons, eles apenas processam o som fornecido pelo host.
Estes instrumentos virtuais, desenvolvidos com a tecnologia VST, necessitam de um
programa host para seu funcionamento.. Nesse caso, o host não irá passar o som para o plugin
processar, e sim informações MIDI. Como exemplo, é possível citar o EZ Drummer (Figura 32) da
Toontrack, que é uma bateria virtual. O host apenas passa as informações MIDI para o plugin, e ele
se encarrega de processar a informação e tocar o som correspondente. No caso de uma bateria, cada
nota musical MIDI corresponde a uma peça da bateria.
33
Figura 32. Bateria virtual EZ Drummer
Fonte: Plugin EZ Drummer.
A Tabela 3 mostra a relação entre as notas musicais e as peças da bateria.
Tabela 3. Peças da bateria virtual EZ Drummer
Nota Peça Dó Bumbo Dó# Baqueta Ré Caixa Ré# Aro da caixa Mi Caixa 2 Fá Surdo Fá# Chimbal fechado Sol Tom 3 Sol# Chimbal semi aberto La Tom 2 La# Chimbal aberto Si Tom 1
34
2.3.6 JUCE
JUCE (Jules Utility Class Extensions) é uma coleção de bibliotecas OpenSource
desenvolvidas em C++ que podem ser compiladas em ambiente Windows, Linux ou Mac OSX. Ele
foi desenvolvido pela empresa Raw Material Software e possui classes para criação de interfaces
gráficas, manipulação de imagens, áudio, arquivos XML e têm uma ótima integração com a
tecnologia VST e ASIO, ambas da Steinberg. (RAW MATERIAL SOFTWARE, 2008).
O JUCE conta com exemplos e tutoriais que explicam como utilizá-lo e compilá-lo nas
plataformas suportadas. Ele possui um exemplo com as principais funcionalidades encontradas em
um software host para plugins VST que possui suporte ao driver ASIO.
2.3.7 ASIO
ASIO é uma API desenvolvida pela Steinberg para a manipulação de áudio digital, para
superar as limitações das tecnologias originais oferecidas pelos sistemas operacionais (RATTON,
2002).
Atualmente o ASIO está presente na maioria das placas de som profissionais ou semi-
profissionais, como a placa M-AUDIO DELTA 1010 LT (Figura 33a) e a Creative AUDIGY 2 ZS
7.1. (Figura 33b).
(a) (b)
Figura 33. (a) Placa M-AUDIO DELTA 1010 LT; (b) Placa Creative AUDIGY 2 ZS 7.1
35
A maior vantagem do ASIO é a pequena latência de processamento no som, que não é
possível em todas as placas de som. Por exemplo, para se tocar um instrumento virtual através de
um controlador MIDI com uma placa de som sem suporte ao ASIO, a latência ou atraso do
processamento de som poderá será maior que 50ms, o que torna essa tarefa inviável para gravações
ou performances ao vivo. Já com uma placa com ASIO, essa latência diminui para menos de 5ms, o
que torna o atraso quase imperceptível ao ouvido humano. (RATTON, 2002).
Para computadores com placas de som onboard ou com placas que não possuem suporte
nativo ao ASIO, existe uma solução em software denominada ASIO4ALL.
O ASIO4ALL é um software desenvolvido pelo engenheiro elétrico Michael Tippach, que
age diretamente no núcleo do driver de som WDM, melhorando significativamente seu
desempenho.
Para utilizar o ASIO4ALL basta que a interface de áudio possua um driver WDM, na qual o
ASIO4ALL se acopla e faz seu trabalho, sem alterar o driver original e sem prejudicar o sistema
operacional. Ele está disponível para download gratuitamente no site http://www.asio4all.com.
O software possui apenas 284 KB, e é extremamente fácil de ser instalado e configurado. Na
Figura 34, é mostrada a tela de configuração do ASIO4ALL.
Figura 34. Tela de configuração do ASIO4ALL
Fonte: Software ASIO4ALL.
36
2.4 Considerações
No Capítulo 2, foi apresentada uma revisão bibliográfica sobre Computação Musical, com o
objetivo de expor os principais conceitos e características dessa área da Ciência da Computação que
pode ser largamente explorada.
A pesquisa sobre softwares similares fez-se necessária para demonstrar que já existem
algumas soluções disponíveis, e para situar esse trabalho em seu devido contexto.
Através da pesquisa realizada em busca de tecnologias de processamento sonoro, conclui-se
que existem várias opções. Analisando o objetivo proposto pelo TCC, a tecnologia VST da
Steinberg foi a que mais se identificou para o desenvolvimento deste trabalho, devido ao seu SDK
específico para tratamento de áudio e por ser bem documentado, bem como sua compatibilidade
entre diversos softwares da área.
A próxima etapa deste trabalho consiste em descrever o desenvolvimento do software, na
qual são apresentados os requisitos, modelagem e desenvolvimento do mesmo.
3 DESENVOLVIMENTO
Este trabalho possibilitou o desenvolvimento de um software para processar o som de uma
guitarra conectada a um computador, assumindo o papel de uma pedaleira. Para que essa conexão
entre guitarra e computador seja possível, é necessário o uso de um adaptador de plug P10 para P2,
ilustrado na Figura 35.
Figura 35. Adaptador P10 x P2
Na seção Modelagem do Sistema, está descrita a modelagem do software, que abrange
diagramas de casos de uso, classe, seqüência e componentes, bem como o levantamento de
requisitos e as regras de negócio. Na seção Implementação, serão explicadas as telas do sistema
juntamente com suas funcionalidades e questões técnicas referentes à programação e
implementação do software proposto.
3.1 MODELAGEM DO SISTEMA
Em Melo (2004, p.31) é frisado que “é indiscutível que a UML se tornou um padrão de
mercado para modelagem de sistemas no paradigma da orientação a objetos”. Desta forma, foi
utilizada a ferramenta Case Enterprise Architect baseado na UML para a modelagem do software.
Foram definidos requisitos funcionais e não funcionais, regras de negócio, diagramas de
casos de uso, classe, componentes e seqüência.
3.1.1 Levantamento de Requisitos
O levantamento de requisitos refere-se ao processo de compreensão do problema aplicado
ao desenvolvimento de software.
Com base nos softwares similares estudados, e conforme a proposta estabelecida nesse
trabalho, foram levantados os seguintes requisitos:
38
3.1.1.1 Requisitos Funcionais
• RF01: O sistema deverá possuir os seguintes efeitos: Overdrive, Distortion, Chorus,
Delay e Reverb;
• RF02: O sistema deverá permitir a utilização dos efeitos simultaneamente;
• RF03: Os efeitos deverão ter controles de ajuste de parâmetros individuais;
• RF04: Deverá ser possível salvar as configurações (presets) dos efeitos, para que não
seja necessário ajustar os parâmetros toda vez ao iniciar o programa;
• RF05: O sistema deverá possibilitar ao usuário a opção de escolha das entradas (input) e
saídas (output) de som do sistema; e
• RF06: A ordem e ligação entre os plugins VST poderão ser definidas pelo usuário.
3.1.1.2 Requisitos Não Funcionais
• RNF01: O sistema deverá ser compatível com o sistema operacional Windows XP;
• RNF02: O sistema deverá ser implementado utilizando a tecnologia VST;
• RNF03: O sistema deverá ser compatível com o driver de som ASIO4ALL; e
• RNF04: O sistema deverá permitir a utilização de outros plugins VST já existentes, que
não serão implementados nesse trabalho.
3.1.1.3 Regras de Negócio
• O preset default do sistema deverá conter os efeitos na seguinte ordem12: Overdrive,
Distortion, Chorus, Delay e Reverb.
3.1.2 Projeto do Sistema
Neste item serão apresentados os diagramas de Caso de Uso, Classe, Seqüência e
Componentes, bem como os protótipos de telas.
12 Essa ordem foi estabelecida conforme o fluxo de processamento do sinal de áudio na maioria das pedaleiras e pedais ligados em série.
39
3.1.2.1 Diagrama de casos de uso
Segundo Pender (2004, p. 307),
O diagrama de caso de uso (Use Case), é um elemento gráfico exclusivo, pois é um diagrama usado para modelar o modo como as pessoas esperam usar um sistema. O diagrama descreve quem serão os usuários relevantes, os serviços que eles exigem do sistema e os serviços que eles precisam oferecer ao sistema.
Os diagramas de caso de uso deste trabalho estão divididos em quatro pacotes:
Configuração, Seleção de Efeitos, Ajuste de Parâmetros e Exportação/Importação de presets, que
estão representados na Figura 36.
Figura 36. Diagrama de Casos de Uso
Pacote 01: Configurações
No pacote Configurações, está modelada a parte de configuração de áudio do software. Na
Figura 37 é ilustrado o Diagrama de Caso de Uso Configurações.
40
Figura 37. Diagrama de Caso de Uso – Configurações
Relações
• RF05: O sistema deverá possibilitar ao usuário a opção de escolha das entradas (input) e
saídas (output) de som do sistema.
Cenários
Fluxo Principal: Configurar o som do sistema
1. O sistema apresenta uma tela de configuração de áudio para o usuário (TELA 02);
2. O usuário seleciona as entradas de som (input);
3. O usuário seleciona as saídas de som (output);
4. O usuário seleciona o sampleRate e o buffer size;
5. O usuário clica no botão para fechar a tela; e
6. O sistema salva as configurações em um arquivo de configuração.
Pacote 02: Seleção de Efeitos
O pacote Seleção de Efeitos descreve a seleção ou ativação/desativação dos efeitos. Na
Figura 37 é ilustrado o Diagrama de Caso de Uso Seleção de Efeitos.
41
Figura 38. Diagrama de Caso de Uso – Seleção de Efeitos
Relações
• RF01: O sistema deverá possuir os seguintes efeitos: Overdrive, Distortion, Chorus,
Delay e Reverb;
• RF02: O sistema deverá permitir a utilização dos efeitos simultaneamente; e
• RF06: A ordem e ligação entre os plugins VST poderão ser definidas pelo usuário.
Cenários
Fluxo Principal: Selecionar Efeitos
1. O sistema apresenta a tela principal (TELA 01);
2. O usuário clica no botão Play para iniciar o processamento;
3. O usuário clica em algum preset;
4. Se existir o preset salvo em disco, o sistema o exibe na tela;
5. O usuário adiciona os efeitos desejados com o botão direito do mouse ou arrastando e
soltando um plugin na tela; e
6. O usuário ativa os efeitos que irá utilizar.
Fluxo de Exceção: Erro ao adicionar efeito
Se no passo 5 o efeito selecionado pelo usuário não existir, o sistema exibe a mensagem
"Erro ao criar plugin. O Plugin selecionado não existe.” (TELA 03).
42
Pacote 03: Ajuste de Parâmetros
Esse pacote descreve o caso de uso de ajuste dos parâmetros dos efeitos sonoros. Cada efeito
possuirá parâmetros próprios que poderão ser ajustados, conforme a necessidade do usuário. Na
Figura 39 é ilustrado o Diagrama de Caso de Uso Ajuste de Parâmetros.
Figura 39. Diagrama de Caso de Uso – Ajuste de Parâmetros
Relações
• RF03: Os efeitos deverão ter controles de ajuste de parâmetros individuais.
Cenários
Fluxo Principal: Ajuste de parâmetros
1. O sistema apresenta a tela principal (TELA 01);
2. O usuário seleciona o efeito com duplo clique do mouse;
3. O sistema apresenta tela com interface do plugin; e
4. O usuário faz ajuste nos parâmetros do plugin.
Pacote 04: Exportação/Importação
Esse pacote possui dois cenários: Exportação e Importação. O caso de uso de Exportação
descreve o processo de salvar um preset definido pelo usuário, enquanto o caso de uso de
Importação descreve o processo para abrir um preset já salvo. Na Figura 40 é ilustrado o Diagrama
de Caso de Importação/Exportação.
43
Figura 40. Diagrama de Caso de Uso – Importação/Exportação
Relações
• RF04: Deverá ser possível salvar as configurações (presets) dos efeitos, para que não
seja necessário ajustar os parâmetros toda vez ao iniciar o programa.
Cenários
Fluxo Principal: Exportar Preset (Cenário 1)
1. O usuário clica no menu "Arquivo => Salvar Como..." (TELA 01);
2. O sistema apresenta tela de seleção de diretório e nome do arquivo (TELA 04);
3. O usuário digita o nome do arquivo e seleciona o diretório;
4. O usuário clica em salvar; e
5. O sistema salva o arquivo na pasta selecionada.
Fluxo de Exceção: Nome incorreto ou em branco
Se no passo 4 o nome do arquivo possuir caracteres inválidos, o sistema exibe mensagem "O
nome do arquivo acima é inválido!", (TELA 03), e retorna ao passo 3.
44
Fluxo Principal: Importar Preset (Cenário 2)
1. O usuário clica no menu "Arquivo => Abrir" (TELA 01);
2. O sistema apresenta tela de seleção de diretório e nome do arquivo (TELA 05);
3. O usuário seleciona o arquivo desejado;
4. O usuário clica em Abrir; e
5. O sistema abre o arquivo selecionado.
Fluxo de Exceção: Arquivo inválido
Se no passo 5, o arquivo for inválido, o sistema exibe mensagem "Arquivo inválido ou
corrompido!", (TELA 03), e retorna ao passo 3.
3.1.2.2 Diagrama de classes de negócio
O diagrama de classes tem como objetivo ilustrar os atributos e métodos das principais
classes do sistema, assim como os tipos de associações que existam entre elas. Como o programa
host é independente dos plugins, foram modelados dois diagramas de classe, sendo um com as
principais classes do host, e o outro com a estrutura principal de um plugin VST.
A Figura 41 apresenta o modelo de classes de negócio, que ilustra as classes participantes do
domínio do sistema e seus respectivos relacionamentos.
Figura 41. Diagrama de Classes de Negócio: Host
45
O diagrama de classes do plugin VST foi elaborado estudando a estrutura de classes do SDK
fornecido pela Steinberg, que é composto por cinco classes principais, sendo duas responsáveis pela
interface do plugin, e as demais responsáveis pelas funcionalidades do plugin.
A classe principal é a PluginVST, que é uma especialização da classe AudioEffectX, que
por sua vez é uma especialização da classe AudioEffect. É na classe PluginVST que o programador
define o nome do plugin, quantos e quais serão seus parâmetros, as funções ProcessReplacing() e
ProcessDoubleReplacing() - que são responsáveis pelo processamento do som -, entre outras
características básicas do plugin. Já as classes AEffEditor e AEffGUIEditor, são responsáveis pela
interface gráfica do plugin.
Devido ao grande número de métodos e atributos presente nas classes, apenas a classe
PluginVST está com todos seus membros ilustrados no diagrama.
Em anexo, está o código fonte do plugin VST Volume, que foi implementado para controlar
a intensidade do sinal de áudio. Na Figura 42 é ilustrado o Diagrama de Classes de um plugin VST.
46
Figura 42. Diagrama de Classes do Plugin VST
3.1.2.3 Diagrama de classes de projeto
Na etapa de implementação do projeto, foi definido que para o desenvolvimento do host
seria utilizada em conjunto com as tecnologias VST e ASIO da Steinberg a tecnologia JUCE. Por
esse motivo, o número de classes do programa host aumentou consideravelmente. Este diagrama de
classes está ilustrado na Figura 43.
47
Figura 43. Diagrama de Classes de Projeto: Host
. Diagrama de Classes de Projeto: Host
48
Onde:
• TelaPrincipal: principal tela do sistema;
• PainelPrincipal: painel que possui os botões de presets, Play, Stop e Bypass, e suas
respectivas funcionalidades;
• PainelInterno: painel onde são desenhados os plugins;
• AudioDeviceSelectorComponent: classe nativa do JUCE para selecionar o dispositivo de
áudio (tela de configurações);
• PluginListWindow: tela responsável por listar e gerenciar os plugins disponíveis;
• FiltroNaTela: possui informações sobre o plugin que está desenhado na tela;
• PluginWindow: tela que apresenta a interface gráfica dos plugins;
• ControlePlugins: classe que gerencia os presets em memória e arquivos XML;
• ConexaoEntreFiltros: guarda as informações sobre as conexões entre os plugins;
• FiltroComponente: representa um dos plugins na classe ControlePlugins;
• PinoConector: classe que implementa os conectores (input/output) dos plugins; e
• ConectorPlugin: classe que implementa o fio que é desenhando ao conectar os plugins.
3.1.2.4 Diagrama de seqüência
Foi elaborado um diagrama de seqüência sobre a interação do usuário com o software, que
engloba os principais casos de uso. O diagrama descreve o processo do usuário configurar o áudio
do sistema, ajustar os parâmetros dos efeitos, e salvar o preset em disco, conforme ilustra a Figura
44.
49
Figura 44. Diagrama de Seqüência
50
3.1.2.5 Diagrama de Componentes
Foi elaborado um diagrama de componentes para ilustrar os principais arquivos que compõe
o software. Cada plugin VST será um arquivo com extensão DLL, enquanto o programa principal
(encarregado por fornecer o som para os plugins), será um arquivo executável do Windows.
Figura 45. Diagrama de Componentes
3.1.2.6 Protótipos de Telas
Esta seção apresenta os protótipos de telas do sistema, citadas na descrição dos casos de uso
através da referência TELA seguidas de um seqüencial de identificação.
51
TELA 01 - Tela Principal
É a tela principal do sistema, na qual o usuário terá acesso aos plugins VST e as demais telas
do sistema.
Figura 46. Protótipos de Tela: Tela Principal (TELA 01)
52
TELA 02 - Tela de Configurações
É a tela na qual o usuário terá a opção de selecionar as entradas e saídas de som do sistema.
Figura 47. Protótipos de Tela: Tela de Configurações (TELA 02)
TELA 03 - Tela de Mensagem Padrão
Tela de mensagem, na qual serão exibidas informações para o usuário.
Figura 48. Protótipos de Tela: Tela de Mensagem (TELA 03)
53
TELA 04 - Tela de Diálogo
Tela na qual o usuário irá informar o destino para importar/exportar os presets do software.
Figura 49. Protótipos de Tela: Tela de Diálogo (TELA 04)
3.2 IMPLEMENTAÇÃO
A etapa de implementação compreendeu a codificação do projeto do sistema, através da
linguagem de programação C++, consolidando o projeto elaborado em um produto final.
Para o desenvolvimento dos efeitos e do software host, foi utilizado o ambiente de
programação Visual Studio 2008 da Microsoft e o VST SDK versão 2.4 da Steinberg. Para o
programa host, também foi utilizado o SDK ASIO versão 2.2 para obter uma baixa latência no
processamento sonoro e o SDK JUCE versão 1.45, que é responsável pela interface gráfica do
sistema.
54
O ambiente de programação Microsoft Visual Studio 2008 foi escolhido pelo fato das três
tecnologias utilizadas (ASIO, JUCE e VST) possuírem projetos e exemplos desenvolvidos nele, o
que facilita a programação e a compilação do código fonte.
Os efeitos Chorus e Reverb foram implementados com o auxílio da ferramenta SynthEdit,
pois foram encontradas dificuldades para desenvolver algoritmos de filtros digitais e a transformada
de Fourier, técnicas necessárias para desenvolvimento desses efeitos.
Além dos cinco efeitos definidos nos requisitos funcionais, foram implementados mais dois:
Tremolo e Volume. Desta forma, foram implementados sete plugins ao total: Overdrive, Distortion,
Chorus, Delay, Reverb, Tremolo e Volume. Para o desenvolvimento da interface gráfica dos
plugins, foi utilizado o VSTGUI nativo do VST SDK, que é independente de plataforma.
As próximas seções descrevem as funcionalidades implementadas no programa host e
plugins e detalhes técnicos referentes à programação dos mesmos.
3.2.1 Programa Host – DK Guitar
O software host implementado foi nomeado DK Guitar, e é composto basicamente por duas
telas: Tela Principal e Tela de Configurações.
3.2.1.1 Tela Principal
A Tela Principal é responsável por fazer a comunicação com os plugins e exibi-los
corretamente na tela. Funcionalidades como Importar e Exportar presets também estão atribuídos à
Tela Principal, que possui um menu para tais finalidades.
Como ponto de partida para o desenvolvimento, foram estudados exemplos integrantes do
SDK JUCE. Um dos exemplos de aplicações é o PluginHost, um projeto que possui as principais
funcionalidades de um programa host. Dessa forma, foram estudadas as classes e o código fonte do
PluginHost para aquisição do conhecimento necessário para o desenvolvimento do DK Guitar.
A estrutura de classes definida na modelagem do sistema foi mantida, porém novas classes
tiveram que ser criadas e adicionadas para facilitar a programação e para manter a consistência com
a estrutura do JUCE. Dessa forma, cada tela do software é um objeto de uma determinada classe.
Também foram adicionadas classes para desenhar componentes gráficos, como os fios conectores
55
de plugins e os plugins minimizados na tela. A Figura 50 mostra o diagrama com classes nativas do
JUCE e classes do PluginHost, que são utilizadas no DK Guitar para a manipulação do áudio.
Figura 50. Diagrama de Classes do DK Guitar
Onde:
• AudioPluginInstance: classe base para criar uma instância de um plugin;
• BaseDoFiltroInterno: classe derivada da AudioPluginInstance que implementa métodos
utilizados pelas classes FiltroInternoAudioInput e FiltroInternoAudioOutput;
• VSTPluginInstance: instância de um plugin VST;
• FiltroInternoAudioInput: instância de um plugin do tipo Input; e
• FiltroInternoAudioOutput: instância de um plugin do tipo Output.
As classes responsáveis pelo processamento sonoro são nativas do JUCE, como
AudioPluginInstance e VSTPluginInstance, outras são do PluginHost, que foram aproveitadas e
modificadas para adicionar funcionalidades previstas na modelagem através dos requisitos
funcionais. Na Figura 51, está ilustrada a Tela Principal do software.
56
Figura 51. Tela Principal
Os blocos “Audio Input” e “Audio Output” representam a entrada e saída de som
respectivamente. Já os blocos intermediários são plugins VST. Os cabos ou fios que estão
conectando os blocos entre si, são utilizados para definir o fluxo do sinal de áudio. Dessa forma, os
plugins podem ser utilizados simultaneamente e conectados de diversas maneiras, possibilitando
uma grande flexibilidade na conexão dos efeitos e contemplando os requisitos funcionais RF2 e
RF6.
Na Figura 51, percebe-se que o fluxo do sinal está dividido em duas partes, na qual o lado
esquerdo possui os efeitos Tremolo e Overdrive e o lado direito Distortion e Delay. Desta forma, o
som recebido pelo software é dividido e processado separadamente para cada saída de áudio, na
qual cada caixa de som receberá um sinal diferente.
Ao clicar com o botão direito sobre um plugin, é aberto um menu de contexto ilustrado na
Figura 52.
57
Figura 52. Menu de contexto dos plugins
As opções do menu de contexto são:
• Excluir esse componente: remove o plugin da tela e exclui suas conexões caso existam;
• Desconectar todos os pinos: remove todas as conexões do plugin;
• Mostrar interface do plugin: abre uma tela com a interface do plugin. Caso a interface
não exista, é aberta uma tela de interface padrão do DK Guitar com os parâmetros do
plugin; e
• Mostrar todos os parâmetros: abre a tela padrão de plugins do DK Guitar.
58
3.2.1.2 Tela de Configurações de Áudio
A Tela de Configurações (Figura 53) é utilizada para especificar as entradas e saídas de
áudio. Ela também possui um botão que abre a tela de configurações do driver ASIO4ALL, para
que o usuário possa definir configurações do driver de som.
Figura 53. Tela de Configurações
Os parâmetros da tela de configurações de áudio são:
• Audio device: lista os drivers de som disponíveis no computador. Essa lista varia
conforme a quantidade de placas de som instaladas no PC;
• Sample rate: permite selecionar a taxa de amostragem do sinal de áudio. Quanto maior
for esse valor, maior será a qualidade sonora, e menor será a velocidade de
processamento. O valor padrão utilizado em softwares de gravação e reprodução de
áudio é 44.100 Hz;
• Áudio buffer size: define o tamanho do buffer de amostras sonoras. Quanto maior esse
buffer, maior será a latência do processamento sonoro;
• Active output channels: lista das saídas de áudio disponíveis no computador;
59
• Active intput channels: lista das entradas de áudio disponíveis no computador;
• Active midi inputs: lista das entradas MIDI no computador; e
• Midi Output: permite selecionar o dispositivo de saída MIDI.
As duas últimas opções não são utilizadas no software, mas foram mantidas por questões de
compatibilidade com o SDK JUCE. Com a implementação da tela de configurações, o requisito
funcional RF5 foi cumprido.
3.2.1.3 Presets
Para implementação dos presets, foi criada a classe ControlePlugins, que possui
funcionalidades para seu gerenciamento e controle. Cada preset é um arquivo XML com extensão
“.Preset”, que é carregado em memória quando o programa é iniciado. Uma vez na memória, o
usuário pode realizar alterações e salvá-los no computador.
Para facilitar a troca entre presets, foram definidos botões de acesso rápido que possuem
uma tecla de atalho para facilitar seu acionamento. A Tabela 4 ilustra a relação entre os presets,
teclas de atalho, botões e arquivos XML.
Tabela 4. Botões e teclas de atalho do Software DK Guitar
Botões Presets Teclas de Atalho Arquivos
Preset 1 F1 F1.Preset
Preset 2 F2 F2.Preset
Preset 3 F3 F3.Preset
Preset 4 F4 F4.Preset
Preset 5 F5 F5.Preset
Preset 6 F6 F6.Preset
Preset Bypass Barra de Espaço Bypass.Preset
Enter
Enter
60
Ao clicar em um botão, o preset ativo é salvo em memória e o preset referente ao botão
clicado é carregado. Desta forma, o sistema permite ao usuário alterar ajustes de parâmetros sem a
necessidade de salvá-lo a cada troca de preset.
Para salvar ou carregar um preset salvo em disco, foi desenvolvida a opção “Arquivo” do
menu na tela principal, que possui opções para tais finalidades, conforme ilustra a Figura 54. Com
essas funcionalidades implementadas, o requisito funcional RF04 foi integralmente atendido.
Figura 54. Menu Arquivo
3.2.2 Plugins
No desenvolvimento dos plugins, foram implementadas duas entradas e duas saídas de som
para cada efeito, possibilitando o processamento em stereo.
61
As próximas seções abordam o processo de desenvolvimento e codificação, descrevendo as
interfaces gráficas, trechos de código fonte e parâmetros, além de imagens de ondas sonoras que
foram processadas pelos plugins.
3.2.2.1 Plugin Delay
Para implementar o efeito de Delay, foi utilizada uma técnica de estrutura de dados
denominada buffer circular, na qual os dados são armazenados e lidos de forma circular em um
vetor com tamanho limitado, onde a última posição do buffer é sucedida pela primeira. O som é
armazenado nesse buffer para ser posteriormente acrescentado ao som original, simulando o efeito
de Delay.
Os parâmetros implementados no plugin foram:
• Time: tempo entre as repetições do Delay;
• Feedback: quantidade de repetições;
• Level: intensidade do efeito; e
• On/Off: ativação e desativação do efeito.
Na Figura 55, está ilustrada a função processReplacing do plugin, onde é feito o
processamento sonoro.
62
1 void Delay::processReplacing(float** inputs, float** outputs, 2 VstInt32 sampleFrames) 3 { 4 float* in1 = inputs[0]; //duas entradas 5 float* in2 = inputs[1]; 6 float* out1 = outputs[0]; //duas saídas 7 float* out2 = outputs[1]; 8 9 if (fEnabled > 0.5) //Delay 10 { 11 while (--sampleFrames >= 0) 12 { 13 float x1 = *in1++; 14 float x2 = *in2++; 15 float y1 = buffer1[cursor]; 16 float y2 = buffer2[cursor]; 17 long aux; 18 19 aux = cursor++; 20 buffer1[aux] = x1 + y1 * fFeedBack; 21 buffer2[aux] = x2 + y2 * fFeedBack; 22 23 if (cursor >= delay) cursor = 0; 24 25 *out1++ = x1 + (y1 * fOut); 26 *out2++ = x2 + (y2 * fOut); 27 } 28 } 29 else //Bypass 30 { 31 while (--sampleFrames >= 0) 32 { 33 *out1++ = *in1++; 34 *out2++ = *in2++; 35 } 36 } 37 }
Figura 55. Código fonte do plugin Delay
O IF da linha 9 divide o fluxo do processamento em duas partes: caso o parâmetro fEnabled
seja maior que 0.5, o efeito de Delay é acrescentado ao som original, caso contrário as variáveis de
saída (out1 e out2) apenas recebem o sinal de entrada, não efetuando nenhum processamento no
som original. Os plugins foram implementados dessa forma para satisfazer o requisito funcional
RF02, na qual foi definido que o sistema deverá permitir a utilização dos efeitos simultaneamente,
pois dessa forma, não é preciso retirar o plugin da conexão para desativá-lo. Nas linhas 20 e 21 está
o código que acrescenta o sinal no buffer e nas linhas 25 e 26 o Delay é acrescentado ao som
original. A Figura 56 ilustra a interface do plugin Delay, e sua interface padrão no DK Guitar.
63
(a) (b)
Figura 56. (a) Interface do Delay; (b) Interface padrão do Delay no DK Guitar
Na Figura 57, a onda sonora inferior ilustra o resultado do efeito Delay aplicado na onda
sonora superior.
Figura 57. Onda sonora do Delay
3.2.2.2 Plugin Overdrive
Para o desenvolvimento do efeito Overdrive, foram implementadas equações matemáticas
aplicadas ao sinal de áudio, com propósito de modificar o formato da onda sonora. As equações
implementadas estão ilustradas a seguir:
64
K = (2 * fGanho) / (1 - fGanho) Equação 1
X = ((1 + K) * X) / (1 + K * abs(X)) Equação 2
Onde:
• fGanho: é a quantidade de Overdrive cujo valores variam de 0.1 a 0.7; e
• X: corresponde ao sinal digital do áudio.
Os parâmetros implementados no plugin Overdrive foram:
• OverDrive: quantidade de saturação;
• Level: intensidade do efeito; e
• On/Off: ativação e desativação do efeito.
Na Figura 58, está ilustrada a função processReplacing do plugin, onde é feito o
processamento sonoro.
65
1 void overdrive::processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames) 2 { 3 float* in1 = inputs[0]; 4 float* in2 = inputs[1]; 5 float* out1 = outputs[0]; 6 float* out2 = outputs[1]; 7 8 if (fEnabled > 0.5) //overdrive 9 { 10 while (--sampleFrames >= 0) 11 { 12 float x1 = *in1++; 13 float x2 = *in2++; 14 float k1,k2; 15 16 k1 = 2*fGanho/(1-fGanho); 17 x1 = (1+k1)*x1/(1+k1*abs(x1)); 18 19 k2 = 2*fGanho/(1-fGanho); 20 x2 = (1+k2)*x2/(1+k2*abs(x2)); 21 22 *out1++ = x1 * fLevel; 23 *out2++ = x2 * fLevel; 24 } 25 } 26 else //Bypass 25 { 28 while (--sampleFrames >= 0) 29 { 30 *out1++ = *in1++; 31 *out2++ = *in2++; 32 } 36 } 34 }
Figura 58. Código fonte do plugin Overdrive
Nas linhas 16, 17, 19 e 20 estão implementadas as equações que transformam o sinal limpo
em um sinal levemente distorcido, resultando o efeito de Overdrive. Na Figura 59 está ilustrada a
interface do plugin Overdrive, e sua interface padrão no programa DK Guitar.
66
(a) (b)
Figura 59. (a) Interface do Overdrive; (b) Interface padrão do Overdrive no DK Guitar
Para a visualização gráfica da modificação que ocorre na onda sonora depois de ser
processada pelo efeito Overdrive implementado, foi gravado um arquivo de áudio com o som da
sexta corda solta de uma guitarra (nota Mi). Na parte superior da Figura 60 está ilustrada a onda
sonora gerada pela guitarra, e na parte inferior a mesma onda depois de ser processada pelo plugin
Overdrive.
Figura 60. Onda sonora do Overdrive
67
3.2.2.3 Plugin Distortion
A implementação do efeito Distortion foi baseada nas equações do efeito Overdrive. Para
realizar modificações nestas equações, foi utilizado o programa SynthEdit. No SynthEdit foi criado
um bloco WavePlayer para reproduzir um arquivo wave, um bloco Waveshaper2, na qual é possível
expressar as equações matemáticas e um bloco SoundOut, para ouvir o resultado do processamento.
No bloco Waveshaper2, a equação resultante é a compilação das duas equações utilizadas na
implementação do Overdrive, na qual o parâmetro fGain foi substituído por valores numéricos.O
diagrama do SynthEdit está ilustrado na Figura 61.
Figura 61. Diagrama Distortion no SynthEdit
Depois de vários testes com diferentes valores, as equações do plugin Distortion ficaram da
seguinte forma:
68
K = (2 * fGanho2) / (1 – fGanho2) Equação 3
X = ((fGanho1 + K) * X) / (fGanho1 + K * abs(X) ) Equação 4
Onde:
• fGanho1: quantidade do primeiro nível de saturação;
• fGanho2: quantidade do segundo nível de saturação; e
• X: sinal digital do áudio.
A Equação 3 do plugin Distortion permaneceu igual à Equação 1 do plugin Overdrive,
apenas o nome da variável foi alterado. A principal diferença ficou na Equação 4, onde a constante
1 foi substituída por uma variável. Desta forma o plugin Distortion possui dois parâmetros para
controlar o ganho. Os parâmetros que foram implementados no plugin Distortion são:
• Boost: quantidade de saturação da variável fGanho1;
• Gain: quantidade de saturação da variável fGanho2;
• Level: intensidade do efeito; e
• On/Off: ativação e desativação do efeito.
O código fonte do processamento sonoro do plugin Distortion está ilustrado na Figura 62.
69
1 void distortion::processReplacing(float** inputs, float** outputs, 2 VstInt32 sampleFrames) 3 { 4 float* in1 = inputs[0]; 5 float* in2 = inputs[1]; 6 float* out1 = outputs[0]; 7 float* out2 = outputs[1]; 8 9 if (fEnabled > 0.5) //distortion 10 { 11 while (--sampleFrames >= 0) 12 { 13 float x1 = *in1++; 14 float x2 = *in2++; 15 float k1, k2; 16 17 //esquerda 18 k1 = 2*fGanhoAux/(1-fGanhoAux); 19 x1 = (fBoostAux+k1)*x1/(fBoostAux+k1*abs(x1)); 20 x1 = x1 * fOutput; 21 22 //direita 23 k2 = 2*fGanhoAux/(1-fGanhoAux); 24 x2 = (fBoostAux+k2)*x2/(fBoostAux+k2*abs(x2)); 25 x2 = x2 * fOutput; 26 27 *out1++ = x1; 28 *out2++ = x2; 29 } 30 } 31 else //Bypass 32 { 33 while (--sampleFrames >= 0) 34 { 35 *out1++ = *in1++; 36 *out2++ = *in2++; 37 } 38 } 39 }
Figura 62. Código fonte do plugin Distortion
Nas linhas 18 e 23 está implementada a Equação 3, nas linhas 19 e 24 a Equação 4 e nas
linhas 20 e 25 é aplicada a intensidade de saída do efeito. Na Figura 63 está ilustrada a interface do
plugin Distortion, e sua interface padrão DK Guitar.
70
(a) (b)
Figura 63. (a) Interface do Distortion; (b) Interface padrão do Distortion no DK Guitar
O arquivo sonoro utilizado para ilustrar o efeito de Overdrive também foi utilizado para
aplicar o efeito Distortion. A parte superior da Figura 64 ilustra a onda sonora original e a parte
inferior mostra a onda sonora após ser processada pelo plugin Distortion.
Figura 64. Onda sonora do Distortion
3.2.2.4 Plugin Tremolo
Para o desenvolvimento do efeito Tremolo foi implementado um oscilador (LFO) que varia
de 0 a 1 que é incrementado com o valor definido pelo parâmetro fTempo. Quanto menor for esse
parâmetro mais devagar será o efeito Tremolo.
71
Os parâmetros implementados no plugin foram:
• Time: velocidade do efeito Tremolo;
• Mix: mistura o efeito com o som original; e
• On/Off: ativa e desativa o efeito.
Na Figura 65, está ilustrada a função processReplacing do plugin, onde é feito o
processamento sonoro.
1 void Tremolo::processReplacing(float** inputs, float** outputs, 2 VstInt32 sampleFrames) 3 { 4 float* in1 = inputs[0]; 5 float* in2 = inputs[1]; 6 float* out1 = outputs[0]; 7 float* out2 = outputs[1]; 8 9 if (fEnabled > 0.5) //Tremolo 10 { 11 while (--sampleFrames >= 0) 12 { 13 float x1 = *in1++; 14 float x2 = *in2++; 15 LFO(); 16 17 *out1++ = x1 * (1-fGanho) + (x1* fLFO * fGanho); 18 *out2++ = x2 * (1-fGanho) + (x2* fLFO * fGanho); 19 } 20 } 21 else //Bypass 22 { 23 while (--sampleFrames >= 0) 24 { 25 *out1++ = *in1++; 26 *out2++ = *in2++; 27 } 28 } 29 }
Figura 65. Código fonte do Plugin Tremolo
Nas linhas 17 e 18 o tremulo é acrescentado ao sinal original. O código “x * (1-fGanho)”
corresponde à porcentagem do som original e o “x* fLFO * fGanho” corresponde à porcentagem do
efeito Tremolo. A Figura 66 ilustra a interface do plugin Tremolo e sua interface padrão no DK
Guitar..
72
(a) (b)
Figura 66. (a) Interface do Tremolo; (b) Interface do Tremolo no DK Guitar
Para que seja possível perceber a presença do efeito Tremolo na onda sonora, ela tem que ser
visualizada sem zoom. Como o oscilador é incrementado e decrementado com valores constantes,
ele gera um gráfico de forma triangular, que está ilustrada na Figura 67.
Figura 67. Onda sonora do Tremolo
3.2.2.5 Plugin Chorus
O plugin Chorus foi implementado com o auxílio do programa SynthEdit, pois foram
encontradas dificuldades para desenvolver a transformada de Fourier para efetuar a modulação
necessária no sinal do áudio. No programa SynthEdit, foi utilizado o conhecimento adquirido sobre
o funcionamento do efeito Chorus (descrito na Fundamentação Teórica) para o desenvolvimento do
plugin. A interface gráfica criada seguiu o mesmo padrão dos outros plugins. Os parâmetros
implementados foram:
73
• Depth: profundidade do efeito; e
• Mix: mixagem ou intensidade do efeito no sinal original.
Na Figura 68, está ilustrado o diagrama de blocos implementado no SynthEdit.
Figura 68. Diagrama Chorus no SynthEdit
Onde:
• IO Mod: entrada e saída do sinal sonoro;
• DCA: controla a intensidade do sinal;
• Oscillator: oscilador de baixa freqüência;
• Fixed Values: valores fixos; e
• Delay: componente de Delay ou atraso do sinal.
Os dois componentes DCA da esquerda, são utilizados para fazer o processamento em
Stereo ligados à um botão On/Off para ligar e desligar o efeito. Quando o botão está acionado, o
74
sinal passa normalmente para o componente Delay. Este componente está com o tempo de Delay
fixo em 27 milissegundos. Um LFO ou oscilador de baixa freqüência está ligado ao Delay para
fazer a modulação característica do efeito Chorus.
Para fazer a interface gráfica foi utilizado o mesmo layout do knob (potenciômetro) usado na
implementação dos outros plugins. Na Figura 69, está ilustrada a interface do plugin Chorus
implementada no software SynthEdit e sua interface padrão no DK Guitar.
(a) (b)
Figura 69. (a) Interface do Chorus; (b) Interface padrão do Chorus no DK Guitar
Na Figura 70, a onda sonora inferior ilustra o resultado do efeito Chorus aplicado na onda
sonora superior.
Figura 70. Onda sonora do Chorus
75
3.2.2.6 Plugin Reverb
Assim como o Chorus, o plugin Reverb foi implementado com o auxílio do programa
SynthEdit. No SynthEdit, foram utilizados blocos de filtros digitais do tipo Comb e Allpass para o
desenvolvimento do Reverb. Os parâmetros implementados foram:
• Time: ajustar a duração ou tempo da reverberação;
• Tone: tonalidade ou equalização do efeito; e
• Mix: mixagem ou intensidade do efeito no sinal original.
Na Figura 71, está ilustrado o diagrama de blocos implementado no SynthEdit.
Figura 71. Diagrama Reverb no SynthEdit
Onde:
• IO Mod: entrada e saída do sinal sonoro;
76
• Comb: este filtro adiciona um Delay com um curto intervalo de tempo acrescentando
pequenas defasagens no som;
• Allpass: filtro Allpass, utilizado para passar todas as freqüências com a mesma
amplitude;
• LevelAdj: utilizado pelo parâmetro Mix do plugin para controlar a intensidade do efeito
Reverb no sinal original;
• DCA1 e DCA2: utilizado pelo botão On/Off para ativar e desativar o efeito; e
• Multiply: multiplica o valor do parâmetro Tone antes de passá-lo para o bloco Comb.
Na Figura 72, está ilustrada a interface do plugin Reverb implementada no software
SynthEdit e sua interface padrão no DK Guitar.
(a) (b)
Figura 72. (a) Interface do Reverb; (b) Interface padrão do Reverb no DK Guitar
Na Figura 73, a onda sonora inferior ilustra o resultado do efeito Reverb aplicado na onda
sonora superior.
77
Figura 73. Onda sonora do Reverb
3.2.2.7 Plugin Volume
A função do plugin Volume implementado é de controlar a intensidade de saída do áudio.
Pode ser utilizado para obter uma diferença de intensidade necessária entre dois presets. Por
exemplo, um preset configurado para ser utilizado para o guitarrista executar um solo, geralmente
possui maior intensidade que os outros presets.
O único parâmetro do plugin Volume é o fGain, que ajusta a intensidade de saída do sinal.
Na Figura 74, está ilustrada a função processReplacing do plugin, onde é feito o
processamento sonoro.
1 void volume::processReplacing (float** inputs, float** outputs, 2 VstInt32 sampleFrames) 3 { 4 float* in1 = inputs[0]; 5 float* in2 = inputs[1]; 6 float* out1 = outputs[0]; 7 float* out2 = outputs[1]; 8 9 while (--sampleFrames >= 0) 10 { 11 *out1++ = *in1++ * fGain;
12 *out2++ = *in2++ * fGain;
13 } 14 }
Figura 74. Código fonte do plugin Volume
Nas linhas 11 e 12 o sinal de entrada é multiplicado pelo parâmetro fGain do plugin,
alterando a amplitude do sinal. Na Figura 75 está ilustrada a interface do plugin Volume no
programa DK Guitar.
78
Figura 75. Interface do Volume
Na parte superior da Figura 76 está ilustrada uma onda sonora, na qual a segunda onda é o
resultado da utilização do plugin Volume.
Figura 76. Onda sonora do Volume
3.3 TESTES E VALIDAÇÃO
O processo de testes e validação do sistema foi dividido em duas etapas, sendo que a
primeira ocorreu em paralelo ao desenvolvimento e a segunda após a implementação.
Para a utilização do software, é necessário um computador com placa de som e sistema
operacional Windows XP ou Windows Vista. Dependendo da capacidade da placa de som, a
utilização do driver ASIO4ALL torna-se indispensável para um processamento em tempo real.
O software DK Guitar e os plugins VST foram testados em dois computadores com
diferentes configurações e placas de som, conforme ilustrado na Tabela 5.
Tabela 5. Configuração dos computadores utilizados nos testes
Computador S.O. Processador Memória Placa de som Onboard (Asus) Creative AUDIGY 2 ZS 7.1
PC Desktop Windows XP
AMD 2.2GHz
1GB
Behringer Guitar Link UCG102 Onboard (NVidia) Notebook HP Windows
Vista AMD Dual Core 1.9GHz
2GB Behringer Guitar Link UCG102
79
O software funcionou perfeitamente em todas as configurações acima. O driver de som
utilizado foi o ASIO4ALL versão 2.8 para todas as placas de som. Em nenhum dos testes, foi
detectado algum atraso significativo no processamento de áudio que inviabilizasse a utilização do
DK Guitar em tempo real.
Também foram testadas utilizações de plugins VST já existentes, como o JVM900 e
SoulForce, e em todos os testes o software funcionou de acordo com o esperado.
Os plugins implementados foram testados em outros softwares com suporte à tecnologia
VST, como FL Studio, Sonar e Audacity, e funcionaram sem problemas. Na Figura 77 está
ilustrado o efeito Distortion no software FL Studio, Sonar e Audacity respectivamente.
(a) (b) (c)
Figura 77. (a) Distortion no FL Studio; (b) Distortion no Sonar; (c) Distortion no Audacity
Não foram realizadas comparações das ondas sonoras produzidas pelos plugins com ondas
sonoras resultantes da utilização de pedais reais, mas auditivamente o resultado sonoro dos efeitos
implementados são semelhantes ao som de pedais e pedaleiras que existem no mercado.
4 CONCLUSÕES
Este trabalho consistiu no desenvolvimento de um software para processar o sinal de uma
guitarra ligada a um computador, simulando os sons dos principais efeitos utilizados pelos
guitarristas. Para complementar o conhecimento das disciplinas do curso de Ciência da Computação
e propiciar o desenvolvimento deste, foram levantados conceitos e utilizações sobre Computação
Musical, bem como uma revisão bibliográfica sobre tecnologias de processamento sonoro e
softwares similares. Foram localizados, baixados e experimentados softwares como Guitar R.A.,
Revalver, FxBox, e tecnologias como VST e DirectX.
A pesquisa sobre tecnologias de processamento de áudio teve como objetivo a aquisição de
conhecimento, a fim de determinar qual a melhor linguagem para o desenvolvimento do software
proposto. Optou-se pela utilização da tecnologia VST, pelo fato de ser um padrão utilizado em
muitos softwares da área. Outra vantagem é ela ser multi-plataforma e possuir boa documentação
disponível. As tecnologias JUCE e ASIO foram utilizadas em conjunto com a VST, com o intuito
de construir um software com uma interface amigável e com a menor latência possível no
processamento sonoro, para viabilizar sua utilização em tempo real.
A modelagem do software foi realizada com o auxílio da ferramenta Enterprise Architect,
seguindo os padrões da UML. Foram apresentados diagramas de Casos de Uso, classe,
componentes e seqüência, bem como o levantamento dos requisitos funcionais e não funcionais.
No processo de desenvolvimento, foram encontradas dificuldades para desenvolver
algoritmos de filtros digitais e a transformada de Fourier, técnicas necessárias para a implementação
de efeitos como Chorus e Reverb. Dessa forma, estes dois efeitos foram desenvolvidos com o
auxílio do software SynthEdit. Além dos cinco efeitos definidos nos requisitos funcionais, mais dois
foram desenvolvidos: Tremolo e Volume.
Considerando os objetivos deste trabalho, pôde-se verificar que todos foram cumpridos,
tendo em vista que o software concebido contempla os requisitos funcionais e não funcionais e os
diagramas de casos de uso definidos na modelagem. No entanto, o software desenvolvido pode ser
melhorado com a inclusão de novos recursos, que podem ser desenvolvidos em trabalhos futuros,
como:
• Desenvolvimento de novos efeitos como Flanger, Phaser e Equalizador;
81
• Compilação do software e plugins em outros sistemas operacionais como Linux e Mac
OSX;
• Desenvolvimento de funcionalidades para operar o software através de um controlador
ou pedaleira MIDI conectada ao computador;
• Afinador digital;
• Gravador de som; e
• Osciloscópio para visualizar as ondas sonoras.
REFERÊNCIAS BIBLIOGRÁFICAS
AUDIOCOURSES. Low Frequency Oscillator (LFO). 2007. Disponível em: <http://www.audiocourses.com/article1703.html>. Acesso em: 18 dez. 2007
ALIEN CONNECTIONS. Guitar FX-Box. 2005. Disponível em: <http://www.alienconnections.com/products_revalverii.htm>. Acesso em: 16 set. 2007.
BEHRINGER. Behringer. 2007. Disponível em: <http://www.behringer.com>. Acesso em: 20 out. 2007.
BOSS. Boss. 2007. Disponível em: <http://roland.com.br/boss>. Acesso em: 20 out. 2007.
BRITO, Teça Alencar de. Música na educação infantil: propostas para a formação integral da criança. 2. ed. São Paulo: Peirópolis, 2003.
CREATIVE. OpenAL SDK for Windows. 2007. Disponível em: <http://developer.creative.com/articles/article.asp?cat=1&sbcat=31&top=38&aid=45>. Acesso em: 18 set. 2007.
DANELECTRO. Danelectro. 2007. Disponível em: <http://www.danelectro.com/mini1.htm>. Acesso em: 20 out. 2007.
EDUCOM. O Som. 2007. Disponível em: <http://web.educom.pt/~pr1258/8ano/a6_som8ano.htm>. Acesso em: 28 out. 2007.
ELLIOTT, Rod. Digital Signal Processing. 2006. Disponível em: <http://sound.westhost.com/articles/dsp.htm>. Acesso em: 28 out. 2007.
GOJKOVIC, Sasha. Guitar FX-Box. 2002. Disponível em: <http://www.guitar-fxbox.com>. Acesso em: 16 set. 2007.
GORE, Joe. How to Record an Electric Guitar on Your Mac. 2007. Disponível em: <http://www.apple.com/pro/techniques/connectingguitar>. Acesso em: 16 out. 2007.
HARMONY CENTRAL. Effects Explained. 2007. Disponível em: <http://www.harmony-central.com/Effects/effects-explained.html>. Acesso em: 16 dez. 2007.
IAZZETTA, Fernando. Tutoriais de Áudio e Acústica. 2000. Disponível em: <http://www.eca.usp.br/prof/iazzetta/tutor>. Acesso em: 20 set. 2007.
IZECKSOHN, Sérgio. Os Equalizadores. 2005. Disponível em: <http://www.homestudio.com.br/Artigos/Art016.htm>. Acesso em: 10 mar. 2008.
LUVIZOTTO, André Luiz; FURLANETE, Fábio Parra; MANZOLLI, Jônatas. Microfonia e Distorção na guitarra sob a ótica de Waveshaping. In: CONGRESSO DA ASSOCIAÇÃO NACIONAL DE PESQUISA E PÓS-GRADUAÇÃO EM MÚSICA (ANPPOM), 16., 2006, Brasília. PROGRAMA DE PÓS-GRADUAÇÃO MÚSICA EM CONTEXTO. Brasília, 2006. p. 262 - 267.
83
MELO, Ana Cristina. Desenvolvendo aplicações em UML 2.0: do conceitual à implementação. 2. ed. Rio de Janeiro: Brasport, 2004.
MENDES, Eduardo. Projeto de Filtros Não-Recursivos (FIR). Disponível em: <www.cpdee.ufmg.br/~emmendes/fir.pdf>. Acesso em: 17 dez. 2007.
MICROSOFT. Introdução ao DirectX. 2007. Disponível em: <http://www.microsoft.com/brasil/msdn/Tecnologias/arquitetura/DirectX.mspx>. Acesso em: 18 set. 2007.
MILETTO, Evandro Manara et al.Introdução à Computação Musical. In: CONGRESSO BRASILEIRO DE COMPUTAÇÃO, 4., 2004, Itajaí. Anais... Itajaí: Universidade do Vale do Itajaí, 2004.
MSP. Transformada de Fourier. 2008. Disponível em: <http://www.mspc.eng.br/matm/fourier_transf110.shtml>. Acesso em: 13 mai. 2008.
NEYRA-ARAOZ, Jorge H. Transformada de Fourier: fundamentos matemáticos, implementação e aplicações musicais. 2007. MAC 0337 – Computação Musical. IME-USP. Disponível em: <http://www.ime.usp.br/~kon/MAC5900/seminarios/seminario_Jorge.pdf>. Acesso em: 17 dez. 2007.
NOVO JÚNIOR, José Eduardo Fornari. Estudo e desenvolvimento de um sintetizador evolutivo de segmentos sonoros. 2006. Projeto Ircam-Brasil, processo 03/05993-6 (reunião cientifica), a ser executado em parceria entre o Núcleo Interdisciplinar de Comunicação Sonora (NICS) em Campinas, Brasil e o Institut de Recherche et Coordination Acoustique/Musique (IRCAM) em Paris, França - Núcleo Interdisciplinar de Comunicação Sonora. Universidade Estadual de Campinas, Campinas, 2006.
NUNES, Rafael Astuto Arouche; ALBUQUERQUE, Marcelos Portes de; ALBUQUERQUE, Márcio Portes de. Introdução a processadores de sinais digitais. Disponível em: <http://www.cbpf.br/~rastuto/pdf/NT-CBPF001-2006.pdf>. Acesso em: 17 dez. 2007.
OLIVEIRA, Hélio Magalhães. Análise de Fourier e Wavelets: sinais estacionários e não estacionários. 1.ed. Editora universitária UFPE, 2007.
OPENAL. OpenAL. 2006. Disponível em: <http://www.openal.org>. Acesso em: 18 set. 2007.
PENDER, Tom. UML a Bíblia. São Paulo: Campus/Elsevier, 2004.
PORTAUDIO. Portable cross-platform Audio API. 2006. Disponível em: <http://www.portaudio.com>. Acesso em: 17 set. 2007.
RATTON, Miguel. Asio. 2002. Disponível em: <http://www.music-center.com.br/asio.htm>. Acesso em: 29 set. 2007.
RAW MATERIAL SOFTWARE. Juce. 2002. Disponível em: <http://www.rawmaterialsoftware.com/juce>. Acesso em: 14 abr. 2008.
SCANDELARI, Luciano. Filtros digitais. 2007. Disponível em: <http://www.pessoal.cefetpr.br/luciano/filtros.pdf>. Acesso em: 10 abr. 2008
84
SDL. Simple DirectMedia Layer. 2006. Disponível em: <http://www.libsdl.org>. Acesso em: 17 set. 2007.
SENFONIMUZIK. Senfonimuzik. 2007. Disponível em: <http://www.senfonimuzik.com>. Acesso em: 20 out. 2007.
SMITH, Steve. The Scientist and Engineer's Guide to Digital Signal Processing. Disponível em: <http://www.dspguide.com/>. Acesso em: 17 dez. 2007.
STEINBERG. The Yvan Grabit developer resource. 2007. Disponível em: <http://ygrabit.steinberg.de/~ygrabit/public_html/index.html>. Acesso em 18 set. 2007.
VALENZUELA. FIR Filters. 2005. Disponível em: <http://cnx.org/content/m12009/latest/> Acesso em: 17 dez. 2007.
WANDERLEY, Marcelo M. Instrumentos Musicais Digitais. Paraná: Editora da Universidade Federal do Paraná, 2006.
ZIMERMANN, Raphael RaphaelZ. 2007. Disponível em: <http://www.raphaelz.kinghost.net>. Acesso em: 18 set. 2007.
GLOSSÁRIO
Alcance Dinâmico Relação entre o maior e o menor nível do sinal.
API Conjunto de rotinas e padrões estabelecidos por um software para utilização de suas funcionalidades por programas aplicativos.
ASIO Tecnologia criada pela Steinberg para melhorar a performance de processamento digital de áudio.
Buffer Região de memória temporária utilizada para escrita e leitura de dados.
Equalização Alterar a intensidade de certas freqüências do sinal de áudio.
Espectro Distribuição, no domínio das freqüências, do conjunto de todas as ondas que formam um som.
Framework Conjunto de elementos e suas interligações constituindo a base de um sistema ou projeto.
Latência Diferença de tempo entre o início de um evento e o momento em que seus efeitos tornam-se perceptíveis.
MIDI Tecnologia utilizada para representação de música em formato digital.
Modulação Processo de variação de altura, intensidade, freqüência ou duração de uma onda sonora.
Plugin Ferramentas que acrescentam funcionalidades a uma aplicação.
Saturação Ocorre quando a intensidade do sinal ultrapassa sua capacidade máxima permitida.
SDK Conjunto de ferramentas de desenvolvimento que permite criar aplicações para um determinado software.
VST Tecnologia criada pela Steinberg para produção de efeitos digitais e instrumentos virtuais.
ANEXOS
I CÓDIGO FONTE DO PLUGIN VOLUME
// Arquivo volume.h
//------------------------------------------------------------------------------
// VST Plug-Ins SDK
// Version 2.4 $Date: 2008/05/28 09:08:27
//
// Category : VST 2.x SDK
// Filename : volume.h
// Created by : Daniel Krueger
// Description : Plugin que aplica intensidade no sinal [-oo, 0dB]
//
// © 2006, Steinberg Media Technologies, All Rights Reserved
//------------------------------------------------------------------------------
#ifndef __volume__
#define __volume__
#include "public.sdk/source/vst2.x/audioeffectx.h"
//------------------------------------------------------------------------------
class volume : public AudioEffectX
{
public:
volume (audioMasterCallback audioMaster);
~volume ();
// Processing
virtual void processReplacing (float** inputs, float** outputs, VstInt32
sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs,
VstInt32 sampleFrames);
// Program
virtual void setProgramName (char* name);
virtual void getProgramName (char* name);
// Parameters
virtual void setParameter (VstInt32 index, float value);
virtual float getParameter (VstInt32 index);
virtual void getParameterLabel (VstInt32 index, char* label);
virtual void getParameterDisplay (VstInt32 index, char* text);
virtual void getParameterName (VstInt32 index, char* text);
virtual bool getEffectName (char* name);
virtual bool getVendorString (char* text);
virtual bool getProductString (char* text);
virtual VstInt32 getVendorVersion ();
protected:
float fGain;
char programName[kVstMaxProgNameLen + 1];
};
#endif
88
// Arquivo volume.cpp
//------------------------------------------------------------------------------
// VST Plug-Ins SDK
// Version 2.4 $Date: 2008/05/28 09:08:27
//
// Category : VST 2.x SDK
// Filename : volume.h
// Created by : Daniel Krueger
// Description : Plugin que aplica intensidade no sinal [-oo, 0dB]
//
// © 2006, Steinberg Media Technologies, All Rights Reserved
//------------------------------------------------------------------------------
#include "volume.h"
//------------------------------------------------------------------------------
AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
{
return new volume (audioMaster);
}
//------------------------------------------------------------------------------
volume::volume (audioMasterCallback audioMaster)
: AudioEffectX (audioMaster, 1, 1) // 1 program, 1 parameter only
{
setNumInputs (2); // stereo in
setNumOutputs (2); // stereo out
setUniqueID ('DKvo'); // identificação
canProcessReplacing (); // supports replacing volume
canDoubleReplacing (); // supports double precision processing
fGain = 1.f; // default to 0 dB
vst_strncpy (programName, "Default", kVstMaxProgNameLen); // default
program name
}
//------------------------------------------------------------------------------
volume::~volume ()
{
// destrutor
}
//------------------------------------------------------------------------------
void volume::setProgramName (char* name)
{
vst_strncpy (programName, name, kVstMaxProgNameLen);
}
//------------------------------------------------------------------------------
void volume::getProgramName (char* name)
{
vst_strncpy (name, programName, kVstMaxProgNameLen);
}
//------------------------------------------------------------------------------
void volume::setParameter (VstInt32 index, float value)
{
fGain = value;
}
89
//------------------------------------------------------------------------------
float volume::getParameter (VstInt32 index)
{
return fGain;
}
//------------------------------------------------------------------------------
void volume::getParameterName (VstInt32 index, char* label)
{
vst_strncpy (label, "Volume", kVstMaxParamStrLen);
}
//------------------------------------------------------------------------------
void volume::getParameterDisplay (VstInt32 index, char* text)
{
dB2string (fGain, text, kVstMaxParamStrLen);
}
//------------------------------------------------------------------------------
void volume::getParameterLabel (VstInt32 index, char* label)
{
vst_strncpy (label, "dB", kVstMaxParamStrLen);
}
//------------------------------------------------------------------------
bool volume::getEffectName (char* name)
{
vst_strncpy (name, "Volume", kVstMaxEffectNameLen);
return true;
}
//------------------------------------------------------------------------
bool volume::getProductString (char* text)
{
vst_strncpy (text, "Volume", kVstMaxProductStrLen);
return true;
}
//------------------------------------------------------------------------
bool volume::getVendorString (char* text)
{
vst_strncpy (text, "Daniel Krueger", kVstMaxVendorStrLen);
return true;
}
//------------------------------------------------------------------------------
VstInt32 volume::getVendorVersion ()
{
return 1000;
}
//------------------------------------------------------------------------------
void volume::processReplacing (float** inputs, float** outputs, VstInt32
sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
90
while (--sampleFrames >= 0)
{
*out1++ = *in1++ * fGain;
*out2++ = *in2++ * fGain;
}
}
//------------------------------------------------------------------------------
void volume::processDoubleReplacing (double** inputs, double** outputs, VstInt32
sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
while (--sampleFrames >= 0)
{
*out1++ = *in1++ * fGain;
*out2++ = *in2++ * fGain;
}
}