Escolar Documentos
Profissional Documentos
Cultura Documentos
Jri:
Fernando Manuel Gomes de Sousa, Presidente do Jri
Jos Manuel Peixoto Nascimento, Vogal (arguente)
Manuel Martins Barata, Vogal (arguente)
Artur Jorge Ferreira, Vogal (orientador)
Maro de 2011
Jri:
Fernando Manuel Gomes de Sousa, Presidente do Jri
Jos Manuel Peixoto Nascimento, Vogal (arguente)
Manuel Martins Barata, Vogal (arguente)
Artur Jorge Ferreira, Vogal (orientador)
Maro de 2011
Resumo
A motivao para este trabalho vem da necessidade que o autor tem em poder registar as notas
tocadas na guitarra durante o processo de improviso. Quando o msico est a improvisar na
guitarra, muitas vezes no se recorda das notas tocadas no momento, este trabalho trata o
desenvolvimento de uma aplicao para guitarristas, que permita registar as notas tocadas na
guitarra elctrica ou clssica. O sinal adquirido a partir da guitarra e processado com requisitos de
tempo real na captura do sinal.
As notas produzidas pela guitarra elctrica, ligada ao computador, so representadas no formato de
tablatura e/ou partitura. Para este efeito a aplicao capta o sinal proveniente da guitarra elctrica a
partir da placa de som do computador e utiliza algoritmos de deteco de frequncia e algoritmos de
estimao de durao de cada sinal para construir o registo das notas tocadas.
A aplicao desenvolvida numa perspectiva multi-plataforma, podendo ser executada em
diferentes sistemas operativos Windows e Linux, usando ferramentas e bibliotecas de domnio
pblico.
Os resultados obtidos mostram a possibilidade de afinar a guitarra com valores de erro na ordem de
2 Hz em relao s frequncias de afinao standard. A escrita da tablatura apresenta resultados
satisfatrios, mas que podem ser melhorados. Para tal ser necessrio melhorar a implementao de
tcnicas de processamento do sinal bem como a comunicao entre processos para resolver os
problemas encontrados nos testes efectuados.
Palavras chave: Reconhecimento automtico de notas musicais, Transcrio musical, Deteco e
estimao de frequncias, Fast Fourier Transform, Algoritmo de Goertzel, Auto-correlao.
Abstract
The motivation for this work comes from the author's need to be able to record the notes played on
guitar during the process of improvisation. When the musician is improvising on the guitar, often
does not remember the notes played at the time, this work addresses the development of an
application for guitarists. The application aims to register the notes played on a classic or electric
guitar. The signal is obtained from the guitar and processed with real-time requirements for audio
capture.
The notes produced by the electric guitar, connected to the computer, are presented in the form of a
tablature and/or score. In order to get this result, the application captures the signal of a guitar, by
the sound card of the computer, and uses frequency estimation and detection algorithms and signal
duration algorithms, in order to create the register of the notes played.
The application is developed in a multi-platform perspective, allowing to be run in different
operating systems, using tools and public domain libraries.
The obtained results show a possibility of tuning the guitar with an error within a 2 Hz range in
relation to the frequency tuning standard. However the writing of the tablature has not obtained
conclusive results regarding the level of reliability of the application. Therefore improvements of
the implementation of the signal processing in order to solve the problems found during testing and
interprocess communication, will be necessary.
Keywords: Automatic recognition of musical notes, Musical transcription, Detection and
estimations of frequencies, Fast Fourier Transform, Goertzel algorithm, Autocorrelation.
ndice
1 Introduo.........................................................................................................................................1
1.1 Solues existentes...................................................................................................................3
1.2 Descrio geral da soluo proposta.........................................................................................4
1.3 Organizao do texto................................................................................................................5
2 Formulao do problema..................................................................................................................7
2.1 Conceitos e terminologia associados msica.........................................................................7
2.1.1 Notao musical..............................................................................................................10
2.1.2 Representao das notas..................................................................................................11
2.2 Guitarra elctrica e equipamentos...........................................................................................15
2.2.1 Produo de som da guitarra elctrica............................................................................15
2.2.2 Escalas e frequncias da guitarra elctrica......................................................................17
2.2.3 Hardware e software.......................................................................................................18
2.3 Problema a resolver................................................................................................................19
3 Tcnicas de processamento de sinal para deteco de frequncia..................................................20
3.1 Algoritmo FFT........................................................................................................................20
3.2 Algoritmo Goertzel.................................................................................................................21
3.3 Auto-correlao......................................................................................................................23
3.4 Anlise comparativa das solues..........................................................................................24
3.5 Filtragem e decimao............................................................................................................26
3.5.1 Filtro passa-baixo de Chebyshev....................................................................................31
3.5.1.1 Implementao do Filtro.........................................................................................32
3.6 Tcnicas de janelas.................................................................................................................33
3.7 Tcnica de estimao da durao da nota...............................................................................33
3.8 Resumo...................................................................................................................................36
4 Soluo proposta e implementao................................................................................................39
4.1 Critrios de desenho da soluo..............................................................................................39
4.2 Arquitectura............................................................................................................................41
5 Aspectos de implementao e desenvolvimento............................................................................43
5.1 GST Transporter ....................................................................................................................43
5.1.1 Transporter comandos ....................................................................................................46
5.1.2 Classe CLogger...............................................................................................................47
5.1.3 Classe Frame...................................................................................................................48
5.1.4 Classe Config e ConfigManager.....................................................................................48
5.1.5 Classe CTimer.................................................................................................................49
5.1.6 Timer no sistema operativo Windows.............................................................................50
5.1.7 Timer no sistema operativo Linux..................................................................................50
5.2 Camada de udio....................................................................................................................50
5.2.1 Classe CAudioServer......................................................................................................51
5.2.2 Classe CAudioPort..........................................................................................................52
5.2.3 Classe CBuffer................................................................................................................53
5.3 Camada de processamento de sinal........................................................................................54
5.3.1 Classe CSignalProcessing...............................................................................................55
ndice de figuras
Figura 1: Screenshot do Guitar Pro (adaptado de [3])..........................................................................2
Figura 2: Screenshot da aplicao Guitar Rig (adaptado de [5])..........................................................2
Figura 3: Sintetizador Roland VG-99 (Adaptado de [6]).....................................................................3
Figura 4: Captadores para captar as notas da guitarra (adaptado de [8]).............................................4
Figura 5: Esquema de funcionamento da aplicao.............................................................................5
Figura 6: Teclado de piano, as teclas brancas so notas naturais e as pretas acidentes.......................7
Figura 7: Exemplo de uma oitava no piano..........................................................................................8
Figura 8: Exemplo do brao da guitarra com todas as notas (adaptado de [11]).................................8
Figura 9: Metrnomo analgico (adaptado de [13]).............................................................................9
Figura 10: Metrnomo TM-40 (adaptado de [14])...............................................................................9
Figura 11: Elementos de uma pauta musical......................................................................................10
Figura 12: Clave de Sol, F e D.......................................................................................................11
Figura 13: Notao musical para piano (adaptado de [15])................................................................11
Figura 14: Tabela com figuras musicais para representao de notas e pausas (Adaptado de [16])..12
Figura 15: Exemplos de aplicao das figuras em diferentes compassos (adaptado de [17])............12
Figura 16: Relao entre as figuras musicais (adaptado de [18]).......................................................13
Figura 17: Exemplo de tablatura para guitarra...................................................................................13
Figura 18: Exemplo de tablatura com efeitos ou tcnicas (adaptado de [22]) ..................................14
Figura 19: Exemplo de representao de Bend Up (adaptado de [23])..............................................14
ndice de tabelas
Tabela 1: As colunas representam as oitavas e as linhas a notas musicais........................................18
Tabela 2: Caractersticas dos computadores de desenvolvimento......................................................18
Tabela 3: Nmero de pontos com base em Fs com resoluo de 2 Hz..............................................22
Tabela 4: Razo entre a frequncia mnima 82,41 Hz e mxima 1174,66 Hz...................................25
Tabela 5: Complexidade dos algoritmos............................................................................................25
Tabela 6: Parmetros utilizados para analisar a resposta em frequncia dos filtros passa-baixo.......27
Tabela 7: Nmero de pontos da FFT, resoluo no tempo e frequncia............................................37
Tabela 8: Resumo dos parmetros utilizados para estimao da frequncia......................................37
Tabela 9: Parmetros passados ao executvel do Transporter ..........................................................43
Tabela 10: Ficheiros e classes pertencentes ao GSTTransporter.......................................................46
Tabela 11: Comandos passados ao GSTTransporter..........................................................................47
Tabela 12: Comparao das caractersticas das funes de temporizador disponibilizas pela API do
Windows.............................................................................................................................................50
Tabela 13: Classes pertencentes camada de udio...........................................................................51
Tabela 14: Classes pertencentes camada de processamento udio..................................................54
Tabela 15: Classes e ficheiros pertencentes camada de gravao udio.........................................56
Tabela 16: Classes pertencentes interface grfica...........................................................................62
Tabela 17: Condies dos testes executados......................................................................................68
Lista de Acrnimos
ALSA Advance Linux Sound Architecture
API Application Programming Interface
ASIO Audio Stream Input Output
BPM Beat Per Minute
CPU Central Processing Unit
DFT Discrete Fourier Transform
DLL Dynamic Link Library
FFT Fast Fourier Transform
FFTW Fast Fourier Transform in the West
FLAC Free Lossless Audio Codec
GTK GIMP Tool Kit
JACK Jack Audio Connection Kit
LED Ligth Emmitting Diode
MIDI Musical Instrument Digital Interface
MSMQ Microsoft Message Queue
PC Personal Computer
SIMD Single Instruction Multiple Data
SSE Streaming SIMD Extensions
UML Unified Modeling Language
XML Extensible Markup Language
1 Introduo
A motivao para este trabalho vem da necessidade que o autor tem em poder registar as
notas tocadas na guitarra durante o processo de improviso. Quando o msico est a
improvisar na guitarra, muitas vezes no se recorda das notas tocadas no momento, este
trabalho trata o desenvolvimento de uma aplicao para guitarristas, que permita registar as
notas tocadas na guitarra elctrica ou clssica. O sinal adquirido a partir da guitarra e
processado com requisitos de tempo real na captura do sinal.
No momento de inspirao de um msico, o improviso normalmente o processo para
novas criaes. Para um guitarrista o processo normal para recordar o que foi improvisado,
consiste em gravar o improviso e mais tarde ouvir e analisar a gravao, para
posteriormente poder reproduzir e anotar o que foi tocado.
No caso de um guitarrista solo, existem tcnicas como leggato [1], shredding [2], assim
como speed picking [2] solo, em que so tocadas vrias notas por batida; neste caso difcil
detectar todas as notas apenas com a audio do sinal medida que este vai sendo
produzido.
Designa-se de speed picking a capacidade de se tocar vrias notas em BPM (Beat Per
Minute) superiores a 160. A tcnica de sweeping uma forma de se conseguir os speed
picking, tocando 6 cordas da guitarra, sequencialmente, para cima e para baixo, com a mo
direita, como se estivesse a varrer as cordas, enquanto a mo esquerda pressiona a corda
entre os trastos e toca 1 ou 2 notas por corda.
Para guitarristas, existem aplicaes para criar e editar tablaturas como o Guitar Pro 6 [3],
para fazer toda a composio na aplicao e ouvir em formato Musical Instrument Digital
Interface (MIDI) [4]. O Guitar Pro permite tambm ver acordes, escalas e imprimir em
formato de tablatura e partitura tudo o que o guitarrista compor. Contudo, esta aplicao no
permite captar sinais da guitarra; o guitarrista tem que gravar a msica que improvisou e
ouvir para tentar reproduzir as notas tocadas. A Figura 1 apresenta o screenshot do software
Guitar Pro 6.
Observamos na Figura 1 uma tablatura e partitura criada no Guitar Pro 6, onde esquerda
possuem os elementos musicais para construo de uma partitura. O Guitar Rig [5]
apresentado na Figura 2, outra aplicao vocacionada para guitarristas, simulando um
pedal de efeitos no computador.
O Guitar Rig realiza efeitos em tempo real com baixa latncia no computador, como se de
uma pedaleira real se tratasse. Uma aplicao com capacidade de criar tablatura para o
2
guitarrista a partir do que ele toca, iria permitir que o guitarrista no tivesse que gravar e
ouvir constantemente o que tinha tocado para o poder reproduzir, como tambm iria ajudar
no processo criativo da composio e improviso.
O objectivo do projecto consiste no desenvolvimento de uma aplicao que possibilite ao
msico gravar o som da guitarra durante o processo de improviso, detectar as notas tocadas
e automaticamente criar uma tablatura e/ou partitura. A captao/aquisio do sinal feita
em tempo real, mas no existem requisitos de tempo real no processamento e na
apresentao das notas. Assim, conseguir-se- uma aplicao capaz de auxiliar o guitarrista
no seu processo de composio.
As aplicaes existentes para guitarrista, em geral so divididas em dois tipos: aplicaes
para efeitos, como o Guitar Rig e para notao e composio musical. Comparativamente
com aplicaes de notao musical como Guitar Pro, a diferena seria que na aplicao o
guitarrista s necessitava de exprimir com a guitarra toda a sua criatividade, e a aplicao
automaticamente registava esse momento criativo.
Ao contrrio do que acontece com o Guitar Pro, por exemplo, seria necessrio que o
guitarrista gravasse, ou tomasse nota passo a passo do que estava a tocar, o que iria de certa
forma atrasar e perturbar todo o processo criativo. Com a soluo proposta Guitar Solo
Tracker, o guitarrista poder ter a aplicao a ser executada e ir tocando a guitarra, e ao
mesmo tempo que grava todo o som. O guitarrista poderia tambm estar a ensaiar com a
banda e gravar todo o ensaio, para depois poder corrigir; isso ajudaria o guitarrista a guardar
e registar qualquer momento de genialidade.
O sinal udio da guitarra elctrica poder ou no passar por um pedal de efeito antes de ser
ligado ao PC. Ser realizado um estudo sobre a melhor opo entre ligar ao PC o sinal com
ou sem efeito. Esta anlise servir para se definir um esquema final, depois de se obter
como resultado a influncia que os diversos efeitos de guitarra podem ter na deteco do
sinal. No entanto, o sinal que ser enviado para a aplicao ser sem efeito. O facto do sinal
ter algum efeito, pode influenciar na deteco correcta das frequncias, porque muitos
efeitos envolvem a alterao das harmnicas do sinal da guitarra.
A deteco das notas feita mediante a utilizao de algoritmos de deteco de frequncia.
Opta-se pela Fast Fourier Transform (FFT), aps a anlise de vrios algoritmos. A
apresentao do resultado ao guitarrista feita num ficheiro de imagem representando uma
tablatura que contm as notas identificadas pela aplicao.
A aplicao foi desenvolvida em ambiente Linux, com a distribuio Fedora 14, de 64 bit,
usando as linguagens C/C++ e C#. Embora tenham sido desenvolvidas em Linux, as
bibliotecas utilizadas suportam outras plataformas. A ferramenta de desenvolvimento
utilizada foi o MonoDevelop [9] que tambm est disponvel para Windows.
2 Formulao do problema
Neste captulo formulado o problema que se pretende resolver. So caracterizados todos
os elementos que fazem parte do problema e desenvolvimento da soluo. Introduzem-se
conceitos relacionados com a composio musical e sua representao, bem como as
caractersticas da guitarra elctrica e outros equipamentos de hardware e software que foram
utilizados no projecto.
Cada nota natural tem uma designao: D, R, Mi, F, Sol, L, Si. As notas musicais
tambm podem ser representadas no formato angolosaxonico C, D, E, F, A, B, para as notas
de D a Si, respectivamente, como apresenta a Figura 7.
Na Figura 7, os acidentes so simbolizados como sendo a nota natural aumentada ou
diminuda de 1/2 tom com # (sustenido) ou b (bemol), respectivamente. Um sustenido eleva
a nota natural a um semitom enquanto um bemol baixa a nota um semitom.
Embora existam 12 notas, um instrumento como o piano possui mais do que 12 teclas. O
conjunto de 12 notas chamado uma oitava, as 12 notas so repetidas em todas as oitavas.
Num piano, o conjunto de 12 teclas, ou as oitavas, da esquerda para a direita correspondem
a sons mais agudos. Assim as notas mais direita tm sons mais agudos. A Figura 8
exemplifica uma oitava.
Em termos fsicos, o som corresponde a uma vibrao de determinada frequncia.
Consequentemente uma nota musical representa uma vibrao (frequncia), especfica que a
identifica como sendo um D ou uma das 12 notas. Com a variao das oitavas variam
tambm os valores da frequncia, sendo que as mais baixas formam sons graves e as mais
altas sons agudos. A nvel Europeu por conveno a nota (L) foi escolhida como
frequncia referncia de 440 Hz, na terceira oitava. Se pretendemos obter a mesma nota
7
numa oitava acima (na quarta oitava), multiplicamos a frequncia da nota proveniente da
oitava anterior por 2.
Na Figura 7 podemos observar que uma oitava contabilizada pelo conjunto das 12 notas.
As frequncias das 12 notas musicais formam uma progresso geomtrica, cuja razo de
21/12 =1,059 . Significa que partindo de uma nota base, podemos obter as frequncias das
notas seguintes, atravs de,
f =2n /12440 Hz
(1)
em que n representa a distncia que a prxima nota est da frequncia referncia. Tambm
possvel calcular a nota correspondente a partir de uma frequncia. Na equao (2),
obtemos a distncia que a frequncia passada em f est da frequncia referncia. Dado que a
frequncia tomada como referncia corresponde nota L, notas esquerda de L tero
valor negativo, ou seja, uma distncia negativa, enquanto as que esto do lado do direito
tero valores positivos. Assim com a equao (2), tendo como centro a nota L, n pode ser
mapeada para a nota correspondente na oitava certa.
n=12log2 ( f /440)
(2)
Para que todas as notas estejam correctas necessrio que o instrumento esteja afinado, ou
seja, que todas as notas correspondam de facto frequncia esperada. A Figura 8 [11]
exemplifica o brao da guitarra com todas as notas, entre os 22 trastos.
No caso da guitarra, as notas esto separadas por trastos, e a distncia de cada trasto um
semitom. Na Figura 9, cada linha representa uma corda na guitarra e cada coluna representa
o trasto. Cada corda pressionada contra o trasto produz um semitom.
Define-se compasso como sendo a diviso do tempo em partes iguais. Cada compasso
dividido em partes de igual durao, chamadas Tempos [12]. O tempo define o andamento
da msica e medido em Beat Per Minute (BPM). Define-se ritmo como a durao do som
com o tempo dentro de um compasso, a pulsao da msica.
8
Um metrnomo um aparelho que serve para marcar o tempo da msica, ou seja, determina
a velocidade com que a msica tocada por todos os instrumentos. Quando uma banda toca
a mesma msica, ou mesmo quando algum quer reproduzir uma msica necessrio que se
mantenha a velocidade certa, para dar o ritmo e compasso certo da msica. A Figura 9 [13]
apresenta um metrnomo analgico.O metrnomo analgico mecnico, e composto por
um pndulo metlico com um peso deslizante, que utilizado para regular o andamento. O
metrnomo possui uma escala graduada em Beat Per Minute (BPM) por detrs do pndulo.
Quanto mais prximo estiver o peso do eixo, mais rpida a velocidade do pndulo; quanto
mais afastado, mais lenta ser essa velocidade. O balanar do pndulo para a esquerda e
para direita, produz internamente um som click, e este faz mover a corda. O metrnomo
digital electrnico e utiliza oscilador de quartzo para produzir a frequncia de cada batida.
A Figura 10 [14] apresenta um metrnomo digital.
Actualmente j existem metrnomos digitais como o TM-40 da KORG [14], cuja principal
vantagem poder alterar os tons de click para cada compasso, regular o volume do som,
definir o nmero de BPM alinhados com o compasso.
Embora as notas estejam simbolizadas, no possvel representar todos os detalhes de uma
msica. Detalhes tais como o andamento da msica, as notas que so tocadas em cada
batida, os momentos de silncio, ou seja, tudo que possibilite que algum possa reproduzir a
msica tal qual quando foi criada. Para responder a essa necessidade foi desenvolvida
notao musical, com a representao em pauta musical.
9
10
A clave de D usada para sons mdios como da viola, mas a sua aplicao rara. Para se
registar os sons do piano necessrio o uso de duas claves, uma para notas altas e outra para
notas baixas. Isso deve-se ao facto do piano possuir da esquerda para direita, tons graves a
agudos, e estes tons variam a sua oitava dependendo do nmero de teclas, mas
considerado como D central o localizado na 3 oitava. De baixo para cima representam-se
os sons mais graves at aos mais agudos, tal como se apresenta na Figura 13.
A Figura 14 exemplifica uma escala possvel num piano em partitura, mapeada para as
teclas correspondentes no piano. Neste caso podemos observar na parte inferior o smbolo
de clave de F e na parte superior a clave de Sol.
11
Figura 14: Tabela com figuras musicais para representao de notas e pausas (Adaptado
de [16])
Observa-se na Figura 15 que para cada nota est associada uma pausa com a mesma
durao, a alternncias entre notas musicais e pausas, produzindo a msica. A Figura 16
[17] exemplifica a aplicao destes smbolos em diferentes compassos.
Figura 15: Exemplos de aplicao das figuras em diferentes compassos (adaptado de [17])
ternrio e quaternrio respectivamente. Cada uma destas figuras musicais est relacionada
entre si; a Figura 16 [18] apresenta a relao entre as figuras musicais.
Observa-se na Figura 16 que uma semibreve equivale a duas mnimas, uma mnima
equivale a 2 semnimas. Em geral podemos dizer que comeando das figuras musicais de
maior durao a semibreve, existe uma relao exponencial de base 2 entre as vrias figuras
musicais.
No caso da guitarra, o instrumento de foco neste projecto, existe outra forma de registar as
notas para quem no tenha conhecimento de leitura de pautas musicais. Para guitarristas,
anotam-se as notas da guitarra na forma de tablatura, tal como se apresenta na Figura 17.
como slide [19], bending [20], tremolo [21] entre outros, tal como exemplificado na Figura
18 [22].
Podemos observar na Figura 18 uma partitura com a tablatura associada, esta forma de
representao comum nas msicas para guitarra, pois permite guitarristas que no saibam
ler pautas musicais reproduzirem a msica. Na Figura 18 possvel observar os nmeros
que simbolizam os trastos que so pressionados na guitarra e alguns destes possuem outros
smbolos associados. Estes smbolos, representam tcnicas e efeitos tocados na guitarra. As
Figuras 19 e 20 exemplificam alguns smbolos utilizados para representao de tcnicas ou
efeitos com a guitarra.
Na Figura 19 apresenta o smbolo para tcnica de bend, a seta a apontar para cima significa
bend up e a seta apontar para baixo bend down. A tcnica de bend [20], consiste em
empurrar a corda para cima ou para baixo, fazendo com que a nota varie de meio a um tom.
A inscrio de full em cima do smbolo, significa que a corda empurrada para cima at a
nota variar um tom. A seta que aponta para baixo, quando associada a seta de bend up,
significa que depois de efectuar o full bend o guitarrista volta a por a corda na posio
inicial em vez de a soltar.
14
A tcnica de Legato Slide [19] consiste em tocar uma nota num trasto e deslizar o dedo
sobre a corda, at ao prximo trasto, fazendo a nota variar a distncia entre o primeiro trasto
tocado e o ltimo. Existem diversos smbolos utilizados na tablatura para representar
diferentes tcnicas; alguns podem ser consultados em [23].
11. Potencimetros
2. Pestana
3. Tarraxas ou cravelha
4. Trastes/Trastos
5. Tirante ou Tensor
6. Marcao
7. Brao
8. Trculo (Junta do brao)
9. Corpo
10. Captadores
Observamos na Figura 23 que os captadores so colocados por baixo das cordas para captar
a vibrao destas. A vibrao captada pelos manes permanentes e convertida em sinal
elctrico. A Figura 24 [26] exemplifica a forma como funciona internamente um captador
passivo.
16
pressionar o dcimo trasto. Define-se como acorde a escrita ou execuo de duas ou mais
notas musicais em simultneo.
F
R
E
Q
U
C
I
A
S
(Hz)
NOTAS
A
Bb
B
C
C#
D
D#
E
F
F#
G
G#
20,6
21,83
23,12
24,5
25,96
2
27,5
29,14
30,87
32,7
34,65
36,71
38,89
41,2
43,65
46,25
49
51,91
3
55
58,27
61,74
65,41
69,3
73,42
77,78
82,41
87,31
92,5
98
103,83
OITAVAS
4
110
116,54
123,47
130,81
138,59
146,83
155,56
164,81
174,61
185
196
207,65
5
220
233,08
246,94
261,63
277,18
293,66
311,13
329,63
349,23
369,99
392
415,3
6
440
466,16
493,88
523,25
554,37
587,33
622,25
659,26
698,46
739,99
783,99
830,61
7
880
932,33
987,77
1046,5
1108,73
1174,66
1244,51
1318,51
1396,91
1479,98
1567,98
1661,22
Computador 1
Computador 2
Sistema Operativo
Fedora 13 x86_64
Windows 7 32 bits
Processador
Intel Core i7
Memria
4 Gb
2 Gb
Disco duro
1.5 Tb
100 Gb
18
19
(5)
De acordo com o ritmo de Nyquist, fs/2 corresponde ao ndice de frequncia k= N/2, em que
|X[k]| uma funo par de k, porque x[n] um sinal real. Assim sendo, s necessrio
amostrar o espectro onde k varia entre 0 e N/2. Atravs da aplicao da FFT e um nmero
adequado de amostras N possvel detectar todas as frequncias da guitarra.
A FFT apresenta complexidade logartmica de clculo, tornando-se muito interessante para
vrias aplicaes. Para um sinal com N pontos, realizam-se
N op=N log 2 ( N )
(6)
20
1W N k z1
1e j2 k/ N z1
.
k 1
k 1
1
2
(1W N z )( 1W N z ) 12 cos(2 k /N ) z +z
=
(7)
(8)
k=
freq
N
fs
(9)
falta de resoluo no tempo, ou seja, necessrio adquirir sinal durante um tempo excessivo
que pode ser muito superior ao tempo de durao da nota.
Freq. Amostragem
44100
22050
11025
N = Fs/ 2 Hz
22050
11025
5512,5
22
3.3 Auto-correlao
O algoritmo de auto-correlao em processamento de sinal determina a relao existente
entre o sinal e ele prprio ao longo do tempo. A auto-correlao representa o grau de
proximidade entre a verso original do sinal de entrada e uma verso desfasada do mesmo
sinal [28] [29].
Dado um sinal x(t), a auto-correlao do sinal contnuo por si prprio com um desfasamento
de dado por
R xx [k ]= x [n ] x [nk ].
(11)
Simetria:
R f( )= Rf ( )
A auto-correlao pode ser realizada de forma eficiente atravs do clculo da FFT e IFFT
pelo teorema de WienerKhinchin, como apresenta nas seguinte expresses:
F R ( f )=FFT ( X ( t))
(12)
S ( f )=F R ( f (t )) F R (f (t))
(13)
R( )=IFFT (S(f )) .
(14)
Para estimar a frequncia usando este algoritmo necessrio calcular a correlao entre o
sinal de entrada no tempo 0 com o mesmo sinal desfasado no tempo T. Como o sinal
peridico, o valor de T a ser utilizado seria igual ao valor de resoluo em frequncia que se
23
pretende ter, e o nmero de pontos necessrio para estimar toda banda de frequncia da
guitarra elctrica. Depois de calculada a auto-correlao feita uma pesquisa pelo maior
valor energia no espectro, e retirado o ndice. Este ndice indica que perodo tem a
frequncia fundamental do sinal de entrada. Podemos calcular assim a frequncia tendo o
ndice do pico mximo utilizando (15) e (16)
N
t=NT s= , onde T s perodo de amostragem.
(15)
Fs
Em (15) calculamos a resoluo no tempo, onde N o nmero de pontos, T s o perodo e
F s a frequncia de amostragem. Com o valor do ndice calculamos o perodo dado por
t
tf=
,
(16)
k
onde t f o perodo da sinal de entrada, k o ndice do primeiro pico mximo e t a
resoluo em frequncia. Para obter o valor em frequncia aplicamos (17) e calculando a
inversa do do perodo t f .
1
f f=
(17)
tf
Ao contrrio da FFT, a auto-correlao permite estimar uma frequncia no domnio do
tempo, identificando a frequncia fundamental e suas harmnicas. A estimao da
frequncia usando a auto-correlao tambm pode ser aplicada para o problema a resolver,
e existe uma forma eficiente de calcular a auto-correlao usando a FFT e IFFT. No entanto,
dado que podemos simplesmente utilizar a FFT para fazer a estimao da frequncia, no h
necessidade de fazer a operao inversa.
24
Fs/ 82.41
537,8
268,9
134,45
97,56
Fs / 1174.66
37,56
18,78
9,39
6,81
A razo de frequncia com o valor mais baixo est para a frequncia de amostragem de
8000 Hz ou de 11025 Hz. Dado que a mxima frequncia da guitarra elctrica de 1174 Hz,
uma amostragem de 8000 Hz suficiente para se poder detectar todas as notas da guitarra.
Para cada um dos algoritmos de estimao de frequncia era necessrio ter diferentes
abordagens em relao ao processamento udio, tendo em conta conseguir detectar notas,
estimar a durao das notas, e tambm a capacidade de detectar acordes.
Uma anlise comparativa da complexidade no nmero de multiplicaes entre os algoritmos
apresentada na Tabela 5, onde podemos verificar qual tem menor complexidade.
Algoritmos
Nmero de Multiplicaes
DFT
N 2 complexas
FFT
Nlog 2 (N )complexas
Goertzel
N reais+ 1complexa
Nlog 2 (N )2+N complexas
Auto-correlao
Y[n]=X[Mn]
Filtro
passa-baixo
Decimao
Factor M
Para que a sub-amostragem seja correcta necessrio reduzir a largura de banda do sinal
usando um filtro discreto passa-baixo. A decimao pode ser entendida como uma
compresso no tempo tal que provoca expanso na frequncia. Dado que a mxima
frequncia a ser gerada pela guitarra de 1174 Hz, como apresentada na Tabela 1, a reduo
da largura de banda tem que respeitar a ritmo de Nyquist de modo a no cortar esta
frequncia. Isto significa que necessrio implementar um filtro digital passa-baixo cuja
frequncia de corte superior a 1174 Hz.
Para a seleco do filtro passa-baixo, foi feita uma pesquisa por filtros que tivessem uma
resposta na frequncia de corte com maior preciso para uma ordem menor. A preciso na
frequncia de corte importante para que depois da decimao no exista aliasing [27]no
sinal, situao que iria dificultar a deteco de frequncias.
Para esta anlise, contribuiu a consulta do site de Tony Fisher [30], que desenvolveu uma
pgina web interactiva para desenho de filtros digitais. Mediante a utilizao da pgina do
mkfilter [31], desenvolvido por Tony Fisher, foi possvel analisar a resposta em frequncia
de filtros passa-baixo; Bessel [32], Butterworth [32] e Chebyshev [32]. No site com os
parmetros introduzidos, produz como sada coeficientes do filtro e a resposta em
frequncia. Os testes foram efectuados considerando os valores apresentados na Tabela 6.
26
Parmetro
Valor
Frequncia de amostragem
44100 Hz
Frequncia de corte
2000 Hz
Ordem do filtro
4e8
Ripple
Tabela 6: Parmetros utilizados para analisar a resposta em frequncia dos filtros passa-baixo
Dos 3 filtros, o escolhido foi o de Chebyshev, pelas caractersticas da resposta em
frequncia. Podemos comparar nas Figuras 27, 28 e 29, para um filtro de ordem 4 as
caractersticas da resposta em frequncia para cada um dos filtros. A Figura 27 apresenta a
resposta em frequncia do filtro passa-baixo de Bessel.
Figura 27: Resposta em frequncia do filtro tipo Bessel de ordem 4 (adaptado de [31]). O eixo x representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa a magnitude e normalizada da resposta do filtro, e y a azul a fase.
27
Figura 28: Resposta em frequncia do filtro de Butterworth de ordem 4 (adaptado de [31]). O eixo x representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa a
magnitude e normalizada da resposta do filtro, e y a azul a fase.
Figura 29: Resposta em frequncia do filtro de Chebyshev de ordem 4 (adaptado de [31]). O eixo x representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa a
magnitude e normalizada da resposta do filtro, e y a azul a fase.
Com o filtro de Chebyshev verifica-se uma banda de transio estreita frequncia de corte e
o decremento da magnitude maior que no filtro de Butterworth. Em geral podemos
observar que para ordem 4, o filtro de Chebyshev apresenta melhor resultado na remoo da
28
frequncia, mas em nenhum dos casos h uma reduo mais prxima de zero da frequncia
de corte.
No decorrer de vrias anlises, a concluso de que um filtro de ordem 8 seria o suficiente
para obter a resposta em frequncia desejvel para o problema. As Figuras 30, 31 e 32,
apresentam as respostas em frequncia dos 3 filtros, utilizando ordem 8. A Figura 30
apresenta a resposta em frequncia do filtro de Bessel.
Figura 30: Resposta em frequncia do filtro de Bessel de ordem 8 (adaptado de [31]). O eixo x representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa
a magnitude linear e normalizada da resposta do filtro, e y a azul a fase.
29
Figura 31: Resposta em frequncia do filtro de Butterworth de ordem 8 (adaptado de [31]). O eixo x
representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa a
magnitude e normalizada da resposta do filtro, e y a azul a fase.
Figura 32: Resposta em frequncia do filtro de Chebyshev de ordem 8 (adaptado de [31]). O eixo x representa as frequncias em fraces da frequncia de amostragem, O eixo y a vermelho representa a
magnitude e normalizada da resposta do filtro, e y a azul a fase.
mais acentuado na banda de corte, est relacionada com a proximidade a um filtro passabaixo ideal, e de ser necessrio menos iteraes ou ciclos para atenuar a amplitude a partir
da frequncia de corte. Dado que se optou pelo filtro de Chebyshev necessrio estudar
mais as caractersticas deste filtro para a implementao da soluo a ser desenvolvida.
Figura 33: Resposta em frequncia do filtro de Chebyshev com ripple de 20% (adaptado de [33])
Na Figura 33 quando o valor do ripple de 0%, que chamado mximo o filtro tem as
caractersticas de um filtro de Butterworth, por este motivo o filtro de Chebyshev uma
generalizao do filtro de Butterworth. Considerando um ripple de 0,5%, observa-se que o
ganho to pequeno que no possvel ser observado no grfico da Figura 33. A principal
vantagem em relao ao Butterworth est na atenuao mais ngreme na banda de corte, o
que significa que o corte da frequncia mais rpido do que o de Butterworth, o que
significa que o filtro de Chebyshev necessita de menor ordem para se aproximar s
caractersticas de um filtro ideal. Existem 2 tipos de filtros de Chebyshev: I e II [35]. A
principal diferena est no tipo II ser inversa do filtro do tipo I, como exemplificado nas
Figuras 34 e 35, respectivamente.
31
Para o problema a resolver ser utilizado o tipo I, porque o tipo II no atenua to rpido na
banda de corte. O ganho constante na banda de passagem no um requisito importante.
Desde que a frequncia das notas no seja removida ou muito atenuada, possvel detectar a
frequncia.
k=0
k=1
(18)
32
Na forma directa II uma estrutura que permite a implementao de filtro IIR de forma
optimizada, consumindo menores recursos a nvel computacional. Tambm podemos
representar a equao (18) na forma de transformada Z, e obtemos
M
b0 (1b k z 1 )
H ( z )=
k=1
N
(1a k z
k=1
(19)
Na equao (19) podemos ver que a funo de transferncia de um filtro IIR uma funo
1
racional em z . Dado que o filtro de Chebyshev originalmente um filtro analgico e para
sinais contnuos, possvel transformar num filtro digital mediante aplicao de uma
transformao bilinear. A transformao bilinear um mtodo para transformar um sistema
de tempo contnuo noutro no tempo discreto e vice-versa. Baseia-se em mapear os valores
presentes num sistema em outro, usando mudana de varivel. Para o filtro, ser necessrio
mapear o plos encontrados no planos tal como apresentado em (45) anexo B, para o plano
z na forma da equao (19).
n
), n=0,1,2,... , N1.
N
(20)
Depois de calculados os coeficientes da janela, esta pode ser multiplicada pelas amostras de
entrada, e ao conjunto de amostras resultante aplicado o algoritmo de estimao de
frequncia.
por cada batida, mediante a durao de cada nota. Este facto depende da relao que as
figuras das notas musicais tm entre si.
Para estimar a nota necessrio contar a durao de cada amostra de sinal que recebido,
mas tambm necessrio estimar as pausas, ou seja, a durao do silncio. Os seguintes
parmetros so necessrio ter em conta quando pretendemos calcular o durao da nota:
BPM, frequncia de amostragem, compasso escolhido pelo utilizador, quantizao das notas
e o nmero de amostras recolhidas do sinal de entrada.
Seja N o nmero de amostras recolhidas frequncia de amostragem, Fs podemos dizer que
1
SampleInterval=N
[ms]
(21)
Fs
representa o intervalo de tempo que se recolhe um conjunto de N amostras em
milissegundos. Seja BPM o nmero de batidas por minuto, em segundos, obtemos
1000
BeatInterval=60
[ms],
(22)
BPM
que representam em milissegundos o intervalo de tempo entre cada batida de metrnomo.
Com base no compasso musical seleccionado, calcula-se o tempo total de um compasso na
partitura usando (23), dada por
TimeDivision=CompassBeatInterval [ms].
(23)
Com o valor de quantizao de notas, podemos calcular o intervalo mnimo de uma nota ou
pausa
BeatInterval
QuantizationInterval=
[ms].
(24)
Quantization
Com as equaes (21), (22), (23) e (24), podemos estimar a durao de cada nota ou pausa
musical utilizando duas estratgias. Uma soluo seria utilizar uma janela deslizante que
calcula a energia na frame udio. Quando esta energia inicia e diminui at um limiar
mnimo considerado que o sinal terminou; quando a energia maior que um limiar
mximo considerado como incio. A Figura 37 ilustra como a janela deslizante passa pelo
buffer de amostras, calculando a energia.
34
(25)
SampleInterval= 1024
1
= 23,22 [ ms]
44100
BeatInterval =60
1000
= 600 [ms ],
100
QuantizationInterval=
600
=150 [ ms] .
4
BufferSize =
QuantizationIntervaN 1501024
=
= 6614,98.
SampleInterval
23,22
Significa que para estimarmos um sinal de 150 ms de durao nas condies especificadas
neste exemplo precisaramos de ter um buffer de 6615 pontos, que iria ocupar muitos
recursos computacionais. necessrio realar que o aumento do nmero de batidas do
metrnomo diminui o tamanho necessrio para detectar 4 notas numa batida, e o processo
contrrio aumenta o tamanho do buffer. Os valores de quantizao tambm influenciam o
tamanho do buffer: a diminuio deste aumenta o tamanho do buffer e vice-versa.
Uma soluo menos dispendiosa a nvel de processamento seria contar simplesmente quanto
tempo uma dada frequncia se mantm presente. Dado que o intervalo das 1024 amostras
ser fixo, basta contar o nmero de vezes seguidas que a nota detectada, ou seja, quando
uma dada frequncia est presente, o valor da sua durao incrementado at que a
frequncia mude de valor. Em seguida, podemos estimar a durao da nota usando a relao
entre QuantizationInterval e SampleInterval, dada por
fraction=
QuantizationInterval 150 ms
=
=6,45,
SampleInterval
23,22ms
(26)
que representa o nmero de vezes que temos que receber uma frequncia para determinar
que a sua durao foi de 150 ms. Desta forma, contando o nmero de vezes consecutivas
que a frequncia detectada, podemos determinar a sua durao. A mesma soluo vlida
para a durao da pausa.
3.8 Resumo
Em resumo como algoritmo de estimao de frequncia optou-se pela FFT. Para resolver o
problema do nmero de pontos necessrio aplicar decimao de maneira a reduzir a
frequncia de amostragem. Tambm foi decidido, que para a aplicao da decimao
necessrio um filtro passa-baixo, e optou-se pela utilizao do filtro de Chebyshev tipo I.
Dado que reduzimos a frequncia de amostragem por um factor de decimao, significa que
podemos ento definir qual o nmero de pontos necessrios para detectar as frequncias.
Como a frequncia mxima a ser processada de 1174 Hz, como apresenta a Tabela 1,
significa que podemos encontrar o factor de decimao que reduza a frequncia at
36
fs 44100
=
= 18,78 (44 ),
fn 2348
1024
2,39
0,4
512
4,78
0,2
256
9,57
0,1
64
38,28
0,02
Descrio / Valor
Algoritmo de estimao de
frequncia
FFT
512
Tcnica de Janela
Hamming
512
Decimao
No tempo
18
Filtro passa-baixo
Chebyshev Tipo I
Nmero de plos
Frequncia de corte
2000 Hz
Ripple
0,5 dB
82 1174 Hz
Para melhorar a qualidade do espectro do sinal, optou-se por aplicar uma janela de
Hamming antes de se calcular a FFT, suavizando assim o sinal. A opo por utilizar a
frequncia de amostragem de 44100 Hz resume-se pelo facto de ser a frequncia de
amostragem mais utilizada em udio profissional, principalmente para gravao do sinal
37
vindo da guitarra elctrica. Mas este valor no fixo, depende exclusivamente da opo do
utilizador.
No Captulo 6 so apresentados resultados referentes aos testes efectuados com estes
parmetros. Analisa-se tambm os valores ideais dos parmetros que minimizam o erro de
deteco de frequncia.
38
Para programao concorrente a primeira deciso foi de utilizao da API Pthread [38],
porque pode ser aplicada em qualquer um dos sistemas operativos alvo, com a linguagem
C++. No caso especfico do Windows, ser utilizada a biblioteca Pthreads-Win32 [38]. No
decorrer do desenvolvimento, com alguma pesquisa, foi encontrada a biblioteca Boost C++
[39]; Boost um conjunto de bibliotecas C++ com o objectivo de estender as
funcionalidades da linguagem C++, com suporte em vrios sistemas operativos.
Boost possui uma biblioteca de programao concorrente que se chama Boost Thread [40].
Esta biblioteca utilizada no desenvolvimento da aplicao em detrimento da API PThread.
A grande vantagem de se utilizar esta biblioteca, reside no desenvolvimento de cdigo C++
genrico e portvel para qualquer outra plataforma, sem que seja necessrio a incluso no
projecto de API externas. A biblioteca Boost Thread, disponibiliza para alm de mtodos
para criao de thread, objectos de sincronismo como mutex, semforos, variveis
condicionais e outros objectos de sincronismo como barries e future. Toda a programao
concorrente desenvolvida fazendo uso da biblioteca Boost Thread.
Outra vantagem da utilizao da biblioteca Boost no projecto a biblioteca Signal e Slots,
Boost Signals [41]. A biblioteca Boost Signal implementa funcionalidades semelhantes a
eventos e delegate em C#. Os signals representam callbacks com mltiplos alvos, e os slots
so callbacks receptores os quais o signals esto ligados e que so executados quando um
sinal emitido. A biblioteca Boost Signal2 ser utilizada no projecto para notificaes,
como por exemplo para iniciar a captura do sinal udio ou outras notificaes entre as
diferentes camadas da aplicao.
Para o projecto ser utilizada a segunda verso da biblioteca Boost Signal, designada por
Boost Signals2 [42]. A diferena entre as duas verses que a verso 2 suporta multithreading.
Para programao paralela, a escolha a utilizao de OpenMP [43] para a linguagem C/C+
+. A opo de utilizao do OpenMP resulta de 2 factores; o paralelismo ser introduzido por
meio de directivas includas no cdigo, o que no exige grandes mudanas neste; o facto de
39
Figura 39: Comparao entre operaes escalares e operaes SIMD (adaptado de [46])
Com as instrues SIMD o clculo da FFT [10] pode ser efectuado de forma mais eficiente
em computadores que suportem estas instrues, porque possvel operar vrios dados em
simultneo em cada ciclo de CPU.
Para suporte a udio ser utilizada a biblioteca RTAudio [47] em C/C++, que suporta a
gravao e reproduo de udio em tempo real nos sistemas operativos Linux, Windows e
MacOSX. Esta biblioteca simplifica o desenvolvimento antes iniciado para suportar os
40
vrios drivers de udio nos diferentes sistemas operativos. A biblioteca tem a capacidade de
enumerar os dispositivos udio, multi-canal e conexo dinmica entre dispositivos udio.
Para gravao de ficheiros udio, utilizada a biblioteca libsndfile [48]. Esta biblioteca
permite a leitura e gravao de ficheiros udio em diversos formatos. Suporta a definio da
frequncia de amostragem, nmero de canais e est disponvel para qualquer sistema
operativo.
4.2 Arquitectura
A aplicao tem uma arquitectura cliente-servidor, onde as duas componentes principais, o
GSTTransporter e a interface grfica, que so respectivamente servidor e cliente. O
GSTTransporter ou simplesmente Transporter corresponde a um executvel que processa
todo o sinal de entrada produzido pela guitarra elctrica, e tem como sada as notas musicais
que foram tocadas pelo guitarrista, e um ficheiro udio contendo a gravao de todo o sinal
produzido pela guitarra elctrica. A Figura 40 ilustra a arquitectura.
A interface grfica por onde o utilizador far a interaco com a aplicao, podendo
visualizar as notas produzidas pela guitarra, e alimentada pelas notas debitadas pelo
GSTTransporter.
A interface de captao de udio ser responsvel pela aquisio de udio na plataforma, e a
sua implementao ser dependente do sistema operativo. Esta interface permite a
interaco com a placa de som ou outro servidor de udio (Audio Stream Input Output
-ASIO no Windows ou Jack Audio Connection Kit-JACK no caso do Linux) para passar o
sinal udio camada de processamento de udio. Esta interface tambm ir definir a
frequncia de amostragem para aquisio do sinal. Na Figura 41, apresentam-se as camadas
da aplicao.
CoreAudio
DirectX/ASIO
Linux
Mac OSX
Windows
41
Biblioteca Boost
Multi-Threading
Serializao
de
objectos
Thead e
Thread Pool
Mecanismo
de
sincronizao
Comunicao
entre
processos
Funes
de
callback
Mutex
Condicion
Lock
message_queue
Signal
Biblioteca
Libsndfile
Biblioteca
RtAudio
Biblioteca
FFTW
Leitura e escrita
de ficheiros udio
Leitura e escrita
de amostras
Clculo de
FFT
Camada de acesso
ao driver
Placa de Som
42
Descrio
SampleRate
NumBuffer
BufferSize
NumThreads
AudioFormat
AudioFileName
AudioDriver
AudioCDevice
AudioPDevice
SystemInfo
Log
44
Quando chega uma frame contendo o sinal da guitarra, esta passada por um filtro passabanda. Este filtro ir retirar todas as frequncias que no pertencem largura de frequncia
da guitarra. Em seguida feita a decimao do sinal baseado num factor de decimao
escolhido. Aplica-se ao sinal decimado uma janela de Hamming e posteriormente efectua-se
o clculo da FFT.
Com a potncia do espectro, feita uma pesquisa pelos mximos. Dado que podemos ter
vrias notas tocadas numa frame, foi definido um valor limiar de potncia a qual se
considera mximo. Assim, somente se procuram os ndices cujo valor ultrapasse o limiar.
Com os ndices destes valores mximos, calcula-se a frequncia correspondente e a nota
musical.
As notas so obtidas atravs da aproximao entre duas frequncias com as respectivas
notas. dividido o valor de frequncia calculada na estimao pelo intervalo superior e
inferior entre duas notas, o valor mais prximo de 1 assumido como sendo a nota mais
prxima associada frequncia.
O GSTTransporter devolve as frequncias e duraes detectadas e no as representaes das
notas; desta forma conseguimos tambm garantir que cada cliente possa dar o seguimento
que melhor pretende com esta informao: durao e frequncia. Um exemplo de aplicao
seria a transformao destas notas em MIDI [4].
O GSTTransporter constitudo por vrias camadas: captura de udio, processamento de
sinal, gravao, e timer. Tambm faz a recepo dos comandos vindos da interface grfica e
executa as operaes que foram transmitidas. A comunicao do GSTTransporter com
outras camadas feita atravs de mecanismo de comunicao baseado em sinais,
implementado com Boost Signals. Desta forma quando o GSTTransporter recebe a ordem
de iniciar a captura, envia um sinal para todas as outras camadas para iniciarem tambm o
45
Descrio
Ficheiro
CGSTTransporter
Transporter.h
Transporter.cpp
Frame
Config
ConfigManager
main
CLogger
Commands
Frame.h
Config.h
main.cpp
Logger.h
Logger.cpp
Commads.h
Descrio
START
STOP
EXIT
Na Figura 46 observamos os mtodos estticos para escrita do ficheiro log, sendo desta
forma possvel ver as chamadas que esto a decorrer no Transporter.
47
serialization existe para permitir a serializao da classe Config num ficheiro XML. A
classe ConfigManager a responsvel pela escrita e leitura do ficheiro mediante a passagem
de um objecto do tipo Config.
A classe Config de grande importncia, porque ser onde estaro guardados vrios
parmetros que serviro tambm para configurar o processamento de sinal, e pode ser
utilizada pela interface grfica para ler ou escrever novas configuraes antes de executar o
Transporter.
49
A implementao do CTimer fazendo uso da API dos sistemas operativos, foi desenvolvida
utilizando macros para diferenciar a nvel de compilao o cdigo a ser utilizado para cada
um dos sistemas operativos. Esta deciso foi tomada dado que a implementao da classe
ser pequena e assim retira a necessidade de criao de interfaces e implementao para cada
um dos sistemas operativos alvo.
Caractersticas
TimeGetTime
- Preciso de 5 milissegundos
- Retorna o tempo decorrido desde que o Windows iniciou.
- Pode correr aproximadamente at 49,7 dias
GetTickCount
- Preciso de 10 a 16 milissegundos
- Retorna o tempo decorrido desde que o computador iniciou.
- Pode correr aproximadamente at 49,7 dias
50
Classes
Descrio
Ficheiro
CAudioServer
AudioServer.h
AudioServer.cpp
CAudioPort
AudioPort.h
AudioPort.cpp
CBuffer
Buffer.h
Buffer.Cpp
CBufferInfo
Buffer.h
A Figura 49 apresenta a estrutura de classes UML que fazem parte da camada de captura de
udio. Podemos ver associadas estrutura de classes, mas sem muitos detalhes as classes
RTAudio, boost::thread, boost::mutex e boost::condition, que so as classes de bibliotecas
utilizadas para o desenvolvimento.
14, e muito embora a biblioteca RTAudio suporte alguns drivers como Advance Linux
Sound Architecture (ALSA) [34] e Jack Audio Connection Kit (JACK) [35] para udio no
Linux , na biblioteca ser adicionada uma nova API que o PulseAudio [36].
A arquitectura udio no Linux, disponibilizada pelo ALSA no permite que mais do que
uma aplicao tenha acesso a placa de som. O JACK veio resolver parte do problema,
porque permite que vrias aplicaes tenham acesso placa de som, e at mesmo
redireccionar entradas e sadas de uma aplicao para outra. No entanto, o JACK
vocacionado mais para aplicaes profissionais, que necessitam de baixa latncia e tempo
real, para alm de que o JACK no distribudo como fazendo parte da plataforma base do
Linux, e o facto de que quando se utiliza o JACK nenhuma outra aplicao que no o
suporte, tem acesso a placa de som.
O PulseAudio [36] veio resolver este problema: funciona como um proxy entre a placa de
som e as aplicaes. Faz uso do ALSA para ter acesso placa de som, suporta baixa
latncia e tempo real. O PulseAudio tambm permite s aplicaes usarem a placa de som
mesmo com o JACK ligado, porque o suporta. O PulseAudio j standard em vrias
distribuies Linux, o que motiva a incluso desta API na biblioteca RTAudio.
O servidor udio possui uma lista de portas com mtodos para escrita e leitura. Estas portas
so registadas no servidor, que as adiciona na lista de portas de captura ou portas de
playback, dependendo da direco escolhida se de input ou output.
As portas possuem 1 ou mais buffers, para escrita ou leitura, permitindo a adaptao das
portas caso se chegue concluso que o nmero de buffers para determinada porta no
suficiente. Esta opo particularmente importante para os casos onde necessrio fazer
processamento udio, e h necessidade de no perder amostras recolhidas da placa de som.
Na segunda iterao o escritor notifica o leitor de que j pode ler o buffer 0, libertando o
lock do buffer, e em seguida passa para o buffer seguinte, ilustrado na Figura 51.
53
Dado que se pretende ter um nmero de buffers configurvel, necessrio que cada buffer
tenha associado um lock. Est definido que a escrita e leitura nos buffers feita de forma
sequencial, o que significa que logo aps a escrita ou leitura num buffer, a thread move-se
para escrever ou ler o buffer seguinte. Quando qualquer das thread tenta aceder ao buffer,
verifica se este buffer est cheio ou vazio, para escrita e leitura respectivamente e fica em
espera. Tambm pode ocorrer que a thread que pretenda aceder ao buffer encontre o buffer
bloqueado porque outra thread j est a aceder; tal um comportamento expectvel e
necessrio para evitar conflitos de escrita e leitura nos dados.
Toda a implementao relacionada com os objectos de sincronismo foi desenvolvida
utilizado a biblioteca Boost Thread [40].
A principal vantagem de ter o nmero de buffer configurvel est na possibilidade de
adaptar cada porta necessidade na qual est conectada ao servidor udio. Um exemplo, a
necessidade de escrita no disco do sinal captado pelo servidor udio. Dado que a escrita no
disco poder ser mais lenta que, por exemplo, o processamento do sinal, existe maior
necessidade de aumentar o nmero de buffers e assim dar tempo suficiente para que a
operao de escrita no disco ocorra sem que se tenha perda de amostras do sinal.
Descrio
Ficheiro
SignalProcessing.h
SignalProcessing.cpp
Benchmark.h
54
(27)
55
Descrio
Usa a biblioteca libsndfile para gravar o sinal
de entrada num ficheiro no formato udio.
Ficheiro
CAudioFileIO.h
CAudioFileIO.cpp
57
Como a aplicao est implementada para suportar vrios sistemas operativos, a biblioteca
dinmica tem uma extenso diferente para cada sistema operativo. No caso do Linux as
bibliotecas possuem extenso .so e na plataforma Windows .dll. Por este motivo na
biblioteca criada para integrao no ter uma extenso nem .so ou .dll. Desta forma no
ser necessrio criar um nome separado para cada plataforma. A diferena no formato
binrio gerado em cada sistema operativo implica que a biblioteca dinmica ter que ser
compilada separadamente em cada sistema operativo.
A biblioteca criada chama-se Transporter e implementa mtodos que permitem interaco
entre o GSTTransporter e a interface grfica. Os mtodos com implementao em C++ tm
que ser expostos como sendo extern C porque assim podem ser chamados como funes
C, o que facilita a importao. Quando o mtodo compilado como cdigo C++, o nome
alterado e a estrutura da chamada o mtodo pode tambm ser alterada dependendo do
compilador. Depois da biblioteca criada em C/C++, uma classe em C# foi criada que
importar todos os mtodos para .NET, permitindo assim o cdigo C# chamar cdigo nativo
C/C++.
No entanto, testes desta soluo revelaram que muito embora a biblioteca dinmica
estivesse a exportar as funcionalidades do cdigo C++ como cdigo C, as chamadas nos
mtodos internos da biblioteca Boost message_queue fazem chamada a estruturas
complexas em C++, o que no permitia que esta soluo fosse utilizada,e por este motivo
foi necessrio implementar outra soluo.
A soluo utilizada passou pela criao de um programa em C++ que responsvel por ler e
escrever na fila de mensagens. Este programa um executvel que recebe como parmetros
o nmero da mensagem a ser enviada e faz a escrita deste valor na fila de mensagem de
comandos. Quando esta aplicao executada sem parmetro, faz a leitura da fila de
mensagem que contm as frames e escreve no standard output no formato XML. Desta
forma a aplicao que executa tem que redireccionar a sada do standard output para ler e
receber a frame no formato XML. possvel observar a estrutura UML de uma frame na
seco 5.1.3 deste Captulo, Figura 48. O objecto do tipo Frame, escrito como um objecto
em XML no standard output mediante a implementao do operador de escrita<<. Desta
forma o programa responsvel pela leitura da frame na fila de mensagem e posterior escrita
no standard output escreve o objecto como uma estrutura XML.
deteco de frequncia mais precisa. Assim, o resultado deste ltimo processamento pode
ser comparado com o do processamento anterior, permitindo uma comparao e correco
por parte do utilizador.
60
Descrio
Classe principal que inicia a aplicao
Janela que apresenta o metrnomo
Ficheiro
Main.cs
Metronome.cs
GSTMainWindow.cs
GuitarTuner
GuitarTuner.cs
SplashScreen
SplashScreen.cs
SessionDocument
SessionDocument.cs
DlgSessionName
DlgSessionName.cs
LibSndFile
TabScoreEditor
TimeLineBar
TabPageHeader
Transporter
TransporterControl
61
LibSndFile.cs
TabScoreEditor.cs
TimeLineBar.cs
TabPageHeader.cs
Transporter.cs
TransporterControl.cs
Classes
Descrio
Ficheiro
Fretboard
Fretboard.cs
AudioTrack
AudioFormat.cs
AudioTrack.cs
AudioFormat.cs
DataChunk
DataChunk.cs
FMTChunk
FMTChunk.cs
RiffChunk
RiffChunk.cs
WaveFile
WaveFile.cs
WaveFileReader
WaveFileReader.cs
WaveFileWriter
WaveFileReader.cs
TabScore
TabScore.cs
Frame
Transporter.cs
SessionDocument
SessionDocument.cs
DlgSessionName
DlgSessionName.cs
StaffNote
StaffNote.cs
Freq2NoteUtil
Freq2NoteUtil.cs
AudioLevelMeter
AudioLevelMeter.cs
AudioKnob
AudioKnob.cs
AudioSlider
AudioSlider
62
Interface grfica
Pista udio
Transporter
Controlos
Metrnomo
Afinador
Trablatura
Envia parmetros e
comandos
Transporter
Enviar comando
Ler frames
Temporizador
Notificao
de eventos
Executa
xcomm
L o
ficheiro
Escreve comandos
Fila
de mensagem
Comandos
L frames
Frame
L comandos
Escreve
frames
Transporter
Ficheiro
udio
Escreve o ficheiro
Gravao udio
Estimao de
Frequncia
Durao da nota
milissegundo que define o perodo de tempo que deve ler uma frame da fila de mensagem.
O temporizador accionado quando seleccionado o mtodo Start, e no intervalo definido
retira uma frame no formato XML da fila de mensagens serializa-a, transformando-a num
objecto do tipo Frame. Em seguida notifica este evento a todas classes inscritas no evento
passando como parmetro o objecto Frame criado. A Figura 57 apresenta o diagrama UML
da classe Transporter.
Esta classe possui um membro do tipo ProcessStartInfo [68]. Este membro permite passar a
informao relativa a um processo para ser executado. Este membro preenchido com
informao do executvel do xcomm, uma das propriedades do ProcessStartInfo o
redireccionamento do standard output de um processo. Para o nosso caso necessrio o
redireccionamento do standard output porque precisamos receber a frame no formato XML
da aplicao xcomm. Desta forma quando a aplicao xcomm escrever no standard output
possvel receber os dados escritos.
O intervalo de tempo para actualizao definido medida do modo que o guitarrista
estiver a funcionar, modo afinador ou de transcrio musical. No caso de estar a utilizar o
modo afinador o intervalo de actualizao dos botes LED da interface grfica (Figura 61)
feita com base na percepo visual que o humano tem de uma imagem em tempo real. Neste
sentido realiza-se uma actualizao num intervalo de 20 a 30 milissegundos. No caso que se
est a proceder captura das amostras o intervalo de tempo ser baseado nos parmetros do
metrnomo, usando as equaes (39), (40), (41) e (40) apresentadas no Captulo 3 seco
3.6 para o clculo do intervalo.
A interface grfica tem uma barra de ferramentas (1 na Figura 59) onde disponibiliza botes
para abrir uma nova sesso, metrnomo e o afinador de guitarra (2 na Figura 59), onde sero
apresentadas as notas detectadas pela aplicao. Em 3 a rea de apresentao do sinal
udio em forma de onda. A apresentao deste sinal feita com base no ficheiro que
gravado enquanto o guitarrista toca a guitarra. A rea 4 contm os controlos do Transporter
que permitem iniciar e parar todo o processo de captao do sinal. Na rea 5 apresenta-se o
brao da guitarra, que permite a alterao e edio das notas que estiverem erradas na
deteco. A edio das notas s poder ser feita quando a aplicao no estiver em modo de
captura.
Quando o guitarrista inicia a aplicao, criada uma sesso. Uma sesso no Guitar Solo
Tracker representa o conjunto de notas detectadas de udio gravado, que na Figura 59 esto
indicados como 2 e 3 respectivamente. Neste sentido, o guitarrista pode criar vrias sesses
e por cada uma tocar a msica e detectar as notas.
Quando seleccionado o menu do metrnomo na barra de ferramentas, esta abre a janela do
metrnomo. Esta janela permite definir os valores de BPM, o nmero de batidas, ligar e
desligar o metrnomo. A Figura 60 mostra o metrnomo da aplicao.
66
Quando o guitarrista escolhe o valor do tempo, o tipo de batida e liga o metrnomo fazendo
click no boto Metronome On, este permite visualizar os batimentos do metrnomo. Os
parmetros escolhidos no metrnomo so enviados para o Transporter antes de iniciar a
captura. Estes parmetros so importantes para a estimao da durao da nota O tempo
determina a velocidade e a batida a acentuao da nota quando o metrnomo est em
execuo. A quantizao vai determinar o nmero de notas assumida em cada batimento de
metrnomo. Os dados do metrnomo s podem ser alterados quando o Transporter no
estiver em execuo.
O menu Guitar Tuner quando seleccionado abre a janela do afinador de guitarra. A Figura
61 apresenta a janela do afinador de guitarra.
Figura 62: Janela Transporter para iniciar e para o processo de deteco das notas
O guitarrista prime o boto de play para iniciar a captao e comea a tocar a guitarra, e o
boto stop para parar.
Valor
Frequncia de amostragem
44100 Hz
1024
N de Buffers
1024
Janela
Hamming
68
Classes
CAudioServer
Testes
1.
2.
3.
4.
5.
captura ao servidor udio. Na classe CDemo sempre que esta recebe uma amostra, exibe o
mximo valor existente no buffer na consola.
Embora o JACK tenha um valor especfico para o tamanho do buffer de captao, as portas
que se ligam ao servidor udio do GSTTransporter podem definir um tamanho diferente do
servidor. Alguns resultados anormais foram obtidos quando o tamanho do buffer e da porta
udio menor que o tamanho do buffer existente no servidor JACK. Foi observado que no
resultado do pico mximo se obtinham valores sem significado.
A Figura 65 apresenta o resultado obtido na aplicao de teste na consola, que mostra as
variaes do pico mximo quando h captao de sinal.
Testes
Gravao do sinal captado pelo servidor udio
Leitura de um ficheiro udio
Para efectuar o teste de gravao foi adicionada uma instncia do tipo CFileIO ao projecto
de testes tento como resultado esperado um ficheiro udio de formato WAVE contendo
udio gravado pelo microfone na execuo do teste. Como resultado, o teste produziu um
ficheiro demo.wav, cujo contedo tem todo o som captado no momento do teste. O teste 2
foi efectuado fazendo a leitura do ficheiro udio gravado.
A Tabela 20 lista os testes efectuados para a classe de processamento de sinal.
Camadas/Classes
CSignalProcessing
Testes
1.
2.
3.
4.
CGSTTransporter
Testes
1.
2.
3.
4.
5.
6.
7.
8.
GuitarSoloTrackerUI
Testes
1.
2.
3.
4.
5.
6.
7.
Figura 66: Screenshoot do componente AudioTrack com desenho do sinal udio em forma de onda
complexa. Este componente, 2 na Figura 59 ser actualizada sempre que receber uma nota
musical, como possvel ver na Figura 59, desenha a tablatura correctamente.
74
6 Avaliao Experimental
Neste Captulo apresentam-se os resultados obtidos pela aplicao. Tambm se analisa de
forma grfica a preciso da deteco de frequncias das notas. Os testes foram efectuados
considerando a captao por um microfone com uma guitarra clssica e a captao por
ligao directa da guitarra elctrica ao PC.
Frequncias (Hz)
82,40
110
148
196
247
329,63
Buffer
Size
FFT
Factor de
N Pontos decimao
Down
Sampling
Erro
Mnimo Hz
Erro
Mximo
Hz
Erro
Mdio Hz
44100
1024
512
15
2940
-3,98
3,68
0,507
44100
1024
512
20
2205
-3.21
430,76
18,14
44100
1024
512
20
2205
-3.21
4,83
0,43
Figura 67: Erro de deteco de frequncias (em Hz) com factor de decimao de 15, para as 49
notas
Figura 68: Erro de deteco de frequncias com factor de decimao de 20, com as 49 notas
Figura 69: Erro de deteco de frequncias com factor de decimao de 20, com as 45 notas descartando as notas com aliasing
Na Figura 69 temos o grfico da Figura 68 aps retirar os valores de erro muito elevado.
Alguns destes erros so consequncia do aliasing do sinal quando passa no filtro passabaixo. Desta forma possvel analisar e comparar melhor os valores de erro. Com o grfico
78
82,40
110
147
196
247
329,63
Erro
mdio
15
2,07
0,96
3,34
0,83
0,08
2,31
1,59
16
1,72
2,4
1,56
2,28
0,61
1,31
1,64
20
0,64
2,39
0,47
2,26
1,52
2,36
1,60
25
3,22
3,26
2,19
3,12
2,38
2,36
2,75
30
2,07
3,83
3,34
3,70
0,08
2,36
2,56
Tabela 25: Resumo de resultados dos testes para encontrar o melhor factor de decimao para as 6 frequncias
Na Tabela 25 o factor de decimao de 15 e 20 so os que apresentam melhor valor de erro
mdio absoluto. Um factor que influencia tambm os resultados da deteco a preciso do
tipo float, devido aos vrios arredondamentos sofridos durante operaes matemticas nas
casas decimais, mas ainda assim se consegue resultados bastante prximos da frequncia
que se pretende estimar. Tambm necessrio ter em conta que os valores de frequncias
produzidos pela vibrao das cordas da guitarra no so exactos. Os valores de erro mximo
e mnimo podem ser utilizados para melhorar a aproximao frequncia original.
Conclumos que para deteco de todas as notas, o factor de decimao de 15 apresenta
melhor valor de erro mximo e mnimo, como demonstra o grfico da Figura 67, e este o
valor utilizado pela aplicao tanto para afinao como para estimao das notas.
79
A Figura 71 apresenta o afinador da Yamaha YT-120 utilizado para afinar a guitarra antes
de efectuar a comparao com o afinador da aplicao. possvel que diferentes afinadores
tenham preciso diferente; infelizmente no existem dados tcnicos referentes preciso
deste afinador. A Tabela 26 apresenta o resultado de uma guitarra afinada anteriormente
com o afinador YT-120 e a comparao com o resultado obtido pelo afinador da aplicao.
O objectivo verificar de quanto o afinador da aplicao se desvia da afinao standard
numa guitarra j afinada. Os testes foram efectuados para guitarra clssica e elctrica.
Frequncias (Hz)
82,40
110
147
196
247
329,63
Guitarra clssica
Desvio (%)
Guitarra elctrica
Desvio (%)
Conclui-se que a afinao da aplicao consegue uma boa preciso, mas que sofre grande
influncia do ganho do sinal. As notas foram detectadas tanto com guitarra clssica como
com guitarra elctrica, onde esta ltima apresenta mais dificuldade na deteco quando
ligada ao computador sem amplificao externa. Constatou-se tambm que possvel
detectar as notas de acordes sem que fosse necessrio determinar as notas que compe o
acorde, ou seja, dado que um acorde constitudo por vrias notas, o somatrio destas
determinam a nota base do acorde; desta forma quando tocada um acorde, a nota base que
d o nome ao acorde detectada. Recomenda-se para o caso da guitarra elctrica que a
afinao da mesma seja feita sem efeito, ou seja, com som original da guitarra para que o
resultado seja fivel.
Figura 71: Desenho da tablatura como resultado de notas tocadas na guitarra clssica
Podemos observar na Figura 71 que por vrias vezes a notas esto sobrepostas o que retira a
visibilidade do resultado. Este problema decorre pelo facto de a todo momento se est a
determinar 6 frequncias independentemente de na guitarra s ter sido tocada uma nota. O
que ocorre muitas vezes, que restantes frequncias encontradas ficam sobrepostas na
mesma corda e posio, como visvel na Figura 71. A soluo para este problema implica
a necessidade de melhoria na pesquisa de mais do que um mximo no espectro de potncia
da FFT no Transporter e tambm eliminao de rudo.
81
Depois de alterado a aplicao para somente mostrar uma frequncia, o teste foi executado
tocando cada corda da guitarra sem trasto premidos. Os resultados foram inconclusivos
dado que no foi possvel verificar se a nota apresentada correspondia a nota correcta, dado
a quantidade de notas apresentadas na tablatura no estarem sincronizadas com a nota
produzida na guitarra. Tambm no foi possvel encontrar um padro que permiti-se
identificar um comportamento especfico quando uma nota especfica tocada na guitarra.
82
7 Concluses
Este trabalho tinha como objectivo desenvolver uma aplicao que fosse capaz de captar o
sinal da guitarra elctrica e apresentar ao utilizador as notas tocadas pelo guitarrista. O
objectivo da aplicao ajudar o guitarrista a lembrar as notas tocadas numa msica num
momento de inspirao ou improviso. Sem esta aplicao, o guitarrista teria que gravar e
ouvir vrias vezes o que tocou para registar as notas tocadas.
Dadas as caractersticas da guitarra elctrica, principalmente do sinal produzido pela mesma
a soluo para detectar as notas tocadas pelo guitarrista passou por determinar as
frequncias geradas pelas cordas da guitarra quando tocadas. Para resolver este problema,
foram analisados 3 algoritmos de estimao de frequncia: Goertzel, auto-correlao e a
FFT. Da anlise dos 3 algoritmos estudados, os resultados levaram a escolher a FFT para
estimao de frequncia. Para o desenvolvimento do projecto foi utilizada a biblioteca
FFTW para clculo da FFT.
Todo o processo de deteco de frequncias, foi elaborado tendo em conta as tcnicas
aprendidas durante disciplinas de processamento udio e de programao. Estas tcnicas
incluem double buffering, janela, filtragem, multithreading e comunicao entre processos.
A aplicao foi desenvolvida usando as linguagens, C/C++ e C#; C++ foi utilizada para
programao de troos de cdigo crticos relacionados com o processamento de sinal, e C#
para o desenvolvimento da interface grfica.
Neste desenvolvimento no se tirou partido ainda da arquitectura multicore por meio de
programao paralela de forma explcita, no entanto foram utilizadas tcnicas de
programao concorrente. A aplicao de programao paralela ser estudada num trabalho
futuro para melhorar o desempenho da aplicao em computadores com multi-processador
ou multicore, caso num trabalho futuro se revelar necessrio.
A abordagem da soluo foi baseada numa arquitectura servidor/cliente. O servidor uma
aplicao que se executa num processo independente e o cliente corresponde interface
grfica que tambm se executa num processo independente. A principal vantagem o
desacoplamento entre as duas partes, principalmente pelo facto de estarem desenvolvidas
em linguagens diferentes. Desta forma tambm permite que outra aplicao possa ligar ao
servidor e receber as notas musicais detectadas.
O processo mais crtico foi a preciso na deteco das notas e estimao da sua durao das
notas. O processamento do sinal gerado pela guitarra foi efectuado em modo online, quando
o guitarrista est a tocar. Os testes revelaram que para afinao era possvel estimar as
frequncias correspondentes afinao standard com uma percentagem de erro mximo de
2 e 4 Hz para guitarra clssica e guitarra elctrica respectivamente. No entanto para a
criao da tablatura, o principal problema estava no facto de no se conseguir distinguir a
nota tocada com qualquer padro no resultados apresentados. A existncia de uma diferena
no intervalo de leitura por parte da interface grfica faz com vrias notas seriam perdidas,
levando a necessidade de leitura das notas de uma forma mais directa e mais sncrona com o
processamento de sinal.
83
Existem melhorias a serem implementadas para melhor apresentar a tablatura, que far parte
do trabalho futuro a ser desenvolvido. Numa primeira fase ser resolver a questo da fila de
mensagem de modo a permitir menor perdas notas por parte do escritor por causa da demora
do leitor. Para este efeito ser implementada a fila de mensagem com base na biblioteca
Boost Interprocess::message_queue em C# usando mapeamento de memria em ficheiro.
Ter que ser melhorado o Transporter de modo a que esteja sincronizado com o batimentos
escolhidos pelo guitarrista, enviar frames somente quando o sinal for considerando uma
nota, baseando num valor limiar para determinar se o sinal ou no uma nota. Neste
sentido, sempre que a frame captada no for considerada uma nota no envidada para a
fila de mensagem. Na aplicao no utilizado dados referentes a durao da nota, mas no
trabalho futuro estes dados sero usados para implementao da partitura.
O trabalho futuro ir envolver a deteco de algumas tcnicas que o guitarrista pode
executar durante o improviso, tais como bending, slide, tremolo. Para efectuar a deteco
destas tcnicas necessrio fazer uma anlise do sinal da guitarra, estudar como o sinal
varia para cada uma das tcnicas, e com base neste estudo analisar tcnicas que permitam
detectar variaes do sinal por forma a identificar a tcnica em causa.
O trabalho futuro tambm ir investigar algoritmos ou solues para optimizao das notas
na tablatura, tendo em conta a estrutura das mos e o posicionamento das notas no brao da
guitarra. Este estudo tem como objectivo diminuir o nmero de notas que tm que ser
transladadas para melhor optimizao quando o guitarrista estiver a tocar a guitarra.
Este problema existe porque no brao da guitarra, a partir do 5o trasto de cada corda todas a
notas podem ser encontradas nas cordas seguintes, na orientao das cordas de baixo para
cima, onde a corda mais baixa (E) representa a nota (E) mais grave na guitarra, como
apresenta a Figura 72 [76].
Figura 72: Brao da guitarra com as notas correspondentes a cada corda nos trastos (adaptado de [76])
Observa-se na Figura 72 que a partir do 5 trasto onde tem a nota A todas as notas seguintes
aparecem na corda seguinte. Neste caso a nota A na corda E corresponde a tocar a corda A
aberta, e C na corda E, tocada no 8 trasto corresponde a C tocada na corda A no terceiro
trasto. Significa que as notas de uma corda num dado trasto, correspondem mesma nota
noutro trasto adiante ou atrs. Neste caso se a aplicao detectar a nota C no 8 trasto da
corda E pode tambm escrever como C no 3 trasto da corda A. Neste caso se for detectada
a nota C da corda E no oitavo trasto, e a nota seguinte for a nota A no 2 trasto da corda G,
mais prtico para o guitarrista tocar C no 3 trasto da corda A, por causa da distncia entre
os trastos.
84
Frequncia estimada
ndices
Erro
82,46
81,83
14
2,07
87,36
86,13
15
1,23
92,56
90,44
16
0,68
98,06
99,05
17
0,44
103,89
99,05
18
0,53
110,06
107,67
19
0,96
116,6
116,28
21
-3,98
123,53
124,89
22
-2,79
130,88
129,2
23
-1,19
138,66
137,81
24
0,84
146,9
146,43
25
3,34
155,63
155,04
27
0,59
164,88
163,65
29
-1,64
174,68
172,27
30
2,41
185,06
185,19
32
1,31
196,06
193,8
34
0,83
207,71
206,72
36
1,00
220,06
219,64
38
1,86
233,14
232,56
40
3,45
247
245,48
43
0,08
261,68
262,71
46
-2,46
277,23
275,63
48
1,61
293,71
292,85
51
0,86
311,17
314,38
54
1,09
329,67
327,3
57
2,36
349,26
348,84
61
-1,01
370,02
370,37
64
2,52
392,01
391,9
68
1,54
415,31
413,44
72
1,88
440
439,28
77
-2,15
466,15
465,12
81
1,04
493,86
495,26
86
0,03
523,21
525,41
91
0,68
554,31
551,25
96
3,06
587,26
590,01
102
1,56
622,17
624,46
108
2,01
659,15
658,92
115
-1,20
Tabela 27: Resultado de deteco de frequncias com factor de decimao de 15. As frequncias em
amarelo correspondem s de afinao standard
85
Frequncia Original
82,46
87,36
92,56
98,06
103,89
110,06
116,6
123,53
130,88
138,66
146,9
155,63
164,88
174,68
185,06
196,06
207,71
220,06
233,14
247
261,68
277,23
293,71
311,17
329,67
349,26
370,02
392,01
415,31
440
466,15
493,86
523,21
554,31
587,26
622,17
659,15
698,33
739,84
783,81
830,4
879,76
932,05
987,45
1046,14
1108,32
1174,2
1243,99
1317,93
Frequncia estimada
81,83
86,13
90,44
99,05
99,05
107,67
116,28
124,89
129,2
137,81
146,43
155,04
163,65
172,27
185,19
193,8
206,72
219,64
232,56
245,48
262,71
275,63
292,85
314,38
327,3
348,84
370,37
391,9
413,44
439,28
465,12
495,26
525,41
551,25
590,01
624,46
658,92
697,68
740,74
783,81
831,18
878,55
934,54
986,22
1046,51
1098,19
1029,29
960,38
887,17
ndices
19
20
21
23
23
25
27
29
30
32
34
36
38
40
43
45
48
51
54
57
61
64
68
73
76
81
86
91
96
102
108
115
122
128
137
145
153
162
172
182
193
204
217
229
243
255
239
223
206
Erro
0,64
1,23
2,12
-0,99
4,83
2,39
0,32
-1,36
1,68
0,84
0,47
0,59
1,23
2,41
-0,12
2,26
1
0,42
0,58
1,52
-1,03
1,61
0,86
-3,21
2,36
0,42
-0,35
0,11
1,88
0,72
1,04
-1,4
-2,2
3,06
-2,75
-2,3
0,23
0,65
-0,91
0
-0,78
1,2
-2,49
1,23
-0,37
10,13
144,91
283,61
430,76
Tabela 28: Resultado de deteco de frequncias com factor de decimao de 20. As frequncias em
amarelo correspondem s de afinao standard
86
(29)
e satisfaz a recursividade
T 0 (x )=1
T 1 (x)=x
T N +1 (x )=2 x T N (x)T N1 (x) .
(30)
= 10ripple em db/ 10 1.
(31)
j
1+2 T N 2 ()=0 T N = .
(32)
=arccos()=u+ jv
(33)
(34)
o que significa que a parte real de T N em (24) tem que ser igual a zero. Ento necessrio
que
(35)
cos( Nu)cosh( Nv)=0
o que implica que cos( Nu)=0 . Para satisfazer esta condio significa que u ter os
seguintes valores
(36)
u=u k =(2k+1) /2N, k =0,1,. .., N 1.
Para estes valores de u, sin ( Nu)=1 , ento temos
1
sinh(Nv )= ,
(37)
(38)
Definindo s= j obtemos
s= j = j cos()= j cos (u+ jv)= j cos (( 2k+1)
+ j v0 )
2N
(39)
s k =k + j k
(40)
onde
k =sinh( v 0)cos (
k
)
2N
(41)
e
k =cosh ( v 0)sin(
k
)
2N
(42)
(43)
e
k =0,2,4,... ,( N 1)
N mpar.
88
(44)
(45)
Referncias
1: Leggato, Tcnica de legato na guitarra,03, 2011, http://www.5min.com/Video/Understanding-the-Legato-Technique-68806222
2: Youtube, Tcnica de shreding na guitarra,06, 2010, http://www.youtube.com/watch?
v=blhz99V6e94
3: Guitar Pro, Guitar Tablature editor, Scale Tools, chord diagrams, MIDI and ASCII import/export,03, 2011, http://www.guitar-pro.com/en/index.php
4: MIDI, MIDI,03, 2011, http://www.midi.org/aboutmidi/index.php
5: Guitar Rig, Software para efeitos de guitarra em tempo real no PC.,03, 2011, http://www.native-instruments.com/#/en/products/guitar/guitar-rig-4-pro/
6: Roland VG-99, Guitar synth from Roland,06, 2010, http://www.roland.com/products/en/VG99/features.html
7: Roland, Roland RG-99,09, 2010, http://www.roland.com/products/en/VG-99/index.html
8: Roland, Roland PickUps,09, 2010, http://www.roland.com/products/en/GK-3/index.html
9: MonoDevelop, MonoDevelop IDE,02, 2011, http://monodevelop.com/
10: S. Kuo, B. Lee, Real-Time Digital Signal Processing, 2001,Wiley
11: Guitar Master Class, Brao guitarra,09, 2010,
http://www.guitarmasterclass.net/guitar_forum/uploads/post-1167-1192068497.jpg
12: Eurico A. Cebolo, Livro Solfejo Mgico, 2002,Eurico A. Cebolo
13: Metrnomo, Metrnomo analgico,09, 2010,
http://umcantinhoumviolao.files.wordpress.com/2009/06/metronomo801ty9.jpg
14: KORG, Metronome Digital TM-40,01, 2010, http://korg.com/product.aspx?&pd=209
15: Pure Lessons, Escala de piano,02, 2011, http://www.purelessons.com/theory_sections.php
16: Figuras musicais, ,09, 2010, http://batera.files.wordpress.com/2006/10/figuras-e-pausas-musicais.gif?w=450
17: Adnipo Isesaki, Exemplo de compassos,01, 2011, http://www.adnipo-isesaki.com/?secao=aulasdemusica&id=15
18: Relao figuras, Relao entre figuras musicais,09, 2010, http://4.bp.blogspot.com/_qWILEZ71m7k/RqnhjCrcglI/AAAAAAAAAEs/B2VIgbkTHVY/s320/dicas_teoria3aa.GIF
19: Slide, Tcnica slide na guitarra,04, 2010, http://www.5min.com/Video/Lessons-For-Electric-Slide-Guitar-In-Standard-Tuning-162417200
20: Bending, Tcnica de bending na guitarra,02, 2010, http://www.youtube.com/watch?v=DiqApItNtzg
21: Tremolo, Efeito tremolo na guitarra.,06, 2010, http://www.ehow.co.uk/video_2378434_tremolo-effects-electric-guitar.html
22: Dario Cortese, Guitar Lesson,01, 2011,
http://www.dariocortese.com/lessons/guitarlessons/licks/2010-2/september/
23: www.howtoreadguitartabs.net, Tab Legend,01, 2011, http://www.howtoreadguitartabs.net/guitar-tab-legend.html
24: Cyfuss, Guitarra Elctrica,03, 2011,
http://www.cyfuss.com/curso_teorico_practico_de_musica/partes_de_la_guitarra_electrica
25: Howstuffworks, Funcionamento dos captadores,09, 2010, http://entertainment.howstuffworks.com/electric-guitar1.htm