Você está na página 1de 77

INSTITUTO FEDERAL DE SÃO PAULO

ALAN BELEM SANTOS

FERNANDO LUIZ DE FIGUEREDO

IGOR FERNANDES MOURA

INTELIGÊNCIA ARTIFICIAL APLICADA À


TRANSCRIÇÃO DE ACORDES DE VIOLÃO

SÃO PAULO
2021
ALAN BELEM SANTOS

FERNANDO LUIZ DE FIGUEREDO

IGOR FERNANDES MOURA

INTELIGÊNCIA ARTIFICIAL APLICADA À


TRANSCRIÇÃO DE ACORDES DE VIOLÃO

Monografia apresentada ao Instituto Federal


de São Paulo – IFSP. Como requisito parcial
para obtenção do título de graduação em
Engenharia Eletrônica, sob orientação do
Prof. Dr. Miguel Angelo de Abreu de Sousa

SÃO PAULO
2021
Agradecimentos

Nosso agradecimento é direcionado principalmente a toda a nossa família, por


todo o apoio em toda essa caminhada da graduação, que não é algo fácil, mas que não
deixou de ser um sonho prazeroso realizado.

Agradecemos também aos nossos professores do IFSP: Ricardo Pires por ter nos
passados ótimas aulas, o que nos levou ao tema do nosso trabalho de conclusão de curso,
Miguel Angelo, por além de nos proporcionar aulas brilhantes e sempre ter nos
incentivado a pensar fora da caixa, também nos orientando durante esse trabalho, nos
motivando sempre a não desistir e deixando claro que alguns imprevistos são previsíveis
e que a consistência no trabalho é o que importa. Sara Dereste, por todos os esforços para
nos ensinar além do que escopo das aulas e nos tornar engenheiros críticos e conscientes.
Alexandre Brincalepe por todo incentivo e pela didática excelente e a todo o corpo
docente do IFSP que contribuíram para que possamos nos tornar os profissionais que
somos e ainda iremos ser.

Agradeço também aos professores de música que sigo colecionando ao longo da


vida: Pietro, Rosemary, Fernanda, Luana e Leandra que me ajudaram a perceber a
importância de coisas que, assim como a música, não possuem uma função pratica, mas
valem por si próprias.
“Onde as palavras falham, a música fala”
- Hans Christian Andersen
Resumo

Neste trabalho, apresentamos o desenvolvimento de uma aplicação que utiliza


ferramentas de Inteligência Artificial para fazer a transcrição automática dos acordes de
músicas que contenham voz e violão. As músicas são processadas por uma primeira Rede
Neural Artificial que remove a parte vocal, para que o violão possa ter os acordes
reconhecidos por uma segunda Rede Neural. Essa rede de reconhecimento de acordes
recebe como entrada, vetores de áudios processados pelo algoritmo do Perfil de Classes
de Altura, uma ferramenta de processamento de sinais que extrai a intensidade relativa de
cada uma das notas musicais que compõe o áudio. Outras ferramentas foram utilizadas
para fazer a realizar conversão da taxa de amostragem dos áudios, e os demais processos
que se mostraram necessários para a realização do trabalho. A interface com o usuário é
feita com uma Aplicação Web desenvolvida em Flask, um framework de Python, e recebe
como entrada a URL de um vídeo da plataforma YouTube que se quer transcrever. O
trabalho apresenta ainda os resultados dos testes realizados e possíveis soluções que
poderão ser implementadas futuramente para um aumento no desempenho do sistema.

Palavras Chave. Transcrição Automática de Músicas, Redes Neurais Artificiais,


Processamento Digital de Sinais, Redes Neurais Convolucionais, Pitch Class Profiler
Abstract

In this work, we present the development of an application that uses Artificial Intelligence
tools to transcribe automatically the chords of songs that contain voice and guitar. The
songs are processed by an Artificial Neural Network that removes the vocal part, so that
the guitar can have the chords recognized by a second Neural Network. This chord
recognition network receives, as input, audio vectors processed by the Pitch Class Profile
algorithm, a signal-processing tool that extracts the relative intensity of each of the
musical notes that make up the audio. Other tools were used to convert the sample rate of
the audios, and the other processes that proved to be necessary throughout the work. The
user interface is made with a web application developed in Flask, a Python framework,
and receives as input the URL of a video from the YouTube platform that you want to
transcribe. The article also presents the results of the tests carried out and possible
solutions that could be implemented in the future to increase system performance.

Keywords. Automatic Music Transcription, Artificial Neural Networks, Digital Signal


Processing, Convolutional Neural Networks, Pitch Class Profiler
LISTA DE ILUSTRAÇÕES

Figura 1 - Análise Espectral de diferentes instrumentos tocando a nota C4 (262 Hz): (a)
Flauta Doce, (b) Piano e (c) Trompete. .......................................................................... 19
Figura 2 - Lá central puro (sem harmónicos somados) .................................................. 19
Figura 3 - Representação da topologia 4-8-4-1 de uma rede neural artificial (4 entradas, 8
e 4 neurônios nas camadas intermediárias e 1 saída). .................................................... 23
Figura 4 - Representação da função sigmoide com intervalo de [0,1]. A principal
utilização da função sigmoide é em problemas de classificação, devido ao ser fator
diferenciável. Quando a função está próxima de 0, a inclinação é máxima, e, portanto, o
resultado de sua derivada também, logo, para valores próximos de zero, o resultado será
deslocado para as extremidades do intervalo escolhido, no caso [0,1], que podem
representar duas classes diferentes. ................................................................................ 25
Figura 5 - Características (linhas verticais) desejadas sendo obtidas através da convolução
da primeira imagem com o filtro. ................................................................................... 27
Figura 6 - Características (linhas horizontais) desejadas sendo obtidas através da
convolução da primeira imagem com o filtro. ................................................................ 27
Figura 7 - Exemplo da diminuição de uma matriz do mapa de características através do
Pooling Máximo. ............................................................................................................ 28
Figura 8 - Representação de uma típica rede neural convolucional, contendo a matriz de
dados de entrada, conectadas a uma camada de convolução. O resultado da convolução é
aplicado na camada de Pooling, que servirá de entrada para a rede neural artificial. O
resultado final será a determinação de uma das classes do problema. Pode haver adição
de mais camadas de convolução e Pooling. .................................................................... 29
Figura 9 - Representação do acorde C (Dó Maior) para Violão e Piano pelo vetor PCP31
Figura 10 - Conversão dos parâmetros de um áudio .wav.............................................. 34
Figura 11 - Fluxograma do sistema desenvolvido .......................................................... 35
Figura 12 - Fluxograma de etapas do Processamento Interno do sistema ...................... 36
Figura 13 - Diagrama de funcionamento da RNA para remoção de vocais em uma música
genérica. O sinal contendo a voz e os instrumentos é separado em dois arquivos diferentes.
........................................................................................................................................ 38
Figura 14 - Etapas do pré-processamento dos dados na etapa de treinamento............... 41
Figura 15 - Layout da Página Inicial da Aplicação Web ................................................ 43
Figura 16 - Página de Exibição dos Resultados ............................................................. 44
Figura 17 - Exemplo de matriz para o cálculo do LCS de 4 elementos para as sequencias
A = abcdbb e B = cbacbaaba .......................................................................................... 45
Figura 18 - Gráfico de um acorde de Lá maior (A)por intensidade, gerado pelo PCP. . 48
Figura 19 - Matriz de confusão da topologia escolhida.................................................. 49
Figura 20 - Gráfico do Sinal de Áudio Completo x Tempo. .......................................... 50
Figura 21 - Gráfico do Sinal Instrumental x Tempo. ..................................................... 51
Figura 22 - Gráfico do Sinal Vocal x Tempo. ................................................................ 51
LISTA DE TABELAS

Tabela 1 - As 12 notas musicais da Escala Igualmente Temperada ............................... 20


Tabela 2 - Frequência (em Hz) das notas da Escala Igualmente Temperada ................. 21
Tabela 3 - Padronização dos parâmetros dos áudios utilizados...................................... 37
Tabela 4 - Conjunto de Acordes utilizado no treinamento dos modelos ........................ 40
Tabela 5 - Composição do Banco de Dados gerado ....................................................... 40
Tabela 6 - Arquivo .csv gerada pelos valores de saída do algoritmo PCP. .................... 41
Tabela 7 - Topologias utilizadas durante o treinamento (As camadas estão separadas por
hífen). .............................................................................................................................. 42
Tabela 8 - Exemplo de uma das tabelas de valores de intensidade dos acordes gravados
pelo grupo. ...................................................................................................................... 47
Tabela 9 - Valores de Acurácia e Erro para cada topologia na fase de treinamento. ..... 48
Tabela 10 - Valores de Acurácia obtidos na fase de validação, utilizando outros
instrumentos.................................................................................................................... 49
Tabela 11 - Acurácia e LCS para a versão original (contendo múltiplos instrumentos) da
canção Imagine ............................................................................................................... 52
Tabela 12 - Acurácia e Semelhança LCS para a versão com apenas Voz e Violão da
canção Imagine ............................................................................................................... 52
Tabela 13 - Comparação entre tempo de duração das músicas e tempo de processamento
........................................................................................................................................ 52
Tabela 14 - Comparação dos resultados de validação com o trabalho original. ............ 53
LISTA DE ABREVIATURAS E SIGLAS

API - Application Programming Interface

CD – Compact Disc

CPU - Central Processing Unit

CSS - Cascading Style Sheets

CSV – Comma-Separated Values

Dataset - Conjunto de dados

DSTFT - Discrete Short-time Fourier transform

Hz – Hertz

HMM - Hidden Markov Models

HTML - HyperText Markup Language

LCS - Longest Common Subsequence

MIR - Music Retrieval Information

PCM - Pulse Code Modulation

PCP – Pitch Class Profile

RAM - Random Access Memory

ReLU - Rectified Linear Unit

RNA – Rede Neural Artificial

s – Segundos

SDR - Source Distortion Ratio

Softmax - Função Exponencial Normalizada

SoX - Sound Exchange

STT - Speech to Text


TDF – Transformada Discreta de Fourier

URL – Uniform Resource Locator

WebApp - Aplicação Web

wav - Formato de arquivo WAVE


SUMÁRIO

1 Introdução ..............................................................................................................14

1.1 Trabalhos Similares .............................................................................................. 15

2 Objetivo ..................................................................................................................17

3 Fundamentação teórica .........................................................................................18

3.1 Teoria musical .................................................................................................. 18

3.1.1 Elementos do Som .................................................................................... 18

3.1.2 Notas Musicais ......................................................................................... 19

3.1.3 Acordes Musicais ..................................................................................... 21

3.2 Redes Neurais Artificiais ................................................................................. 22

3.2.1 Redes Neurais Convolucionais ................................................................. 25

3.3 Processamento de Sinais .................................................................................. 29

3.4 Aplicação Web ................................................................................................. 31

3.4.1 Python ....................................................................................................... 32

3.4.2 Flask.......................................................................................................... 32

3.4.3 Bootstrap ................................................................................................... 33

3.4.4 Extensão de áudio .WAV ......................................................................... 33

3.4.5 FFmpeg ..................................................................................................... 33

3.4.6 API do Youtube......................................................................................... 34

4 Metodologia ............................................................................................................35

4.1 Extração e conversão do áudio ........................................................................ 36

4.2 Separação do Instrumental do áudio ................................................................ 37

4.3 Separação do áudio em segmentos .................................................................. 38

4.4 Análise Espectrográfica ................................................................................... 38

4.5 Geração dos Dados de Treinamento para o Reconhecimento de Acordes ...... 39

4.6 Rede Neural Artificial para Reconhecimento de Acordes ............................... 41

4.6.1 Escolha da Topologia ............................................................................... 42

4.6.2 Hiperparâmetros para o treinamento da rede ............................................ 42


4.6.3 Conjunto de Teste ..................................................................................... 42

4.7 Aplicação Web ................................................................................................. 43

4.8 Testes Realizados ............................................................................................. 44

5 Resultados ..............................................................................................................47

5.1 Banco de dados ................................................................................................ 47

5.2 Treinamento da RNA para Reconhecimento de Acordes ................................ 48

5.3 Resultados dos Testes com a RNA para Remoção dos Vocais ....................... 50

5.4 Análise do Tempo de Processamento .............................................................. 52

5.5 Discussão dos Resultados ................................................................................ 53

6 Conclusão ...............................................................................................................55

7 Referências .............................................................................................................57

APÊNDICE A – ESTRUTURA DE ARQUIVOS DA APLICAÇÃO WEB


DESENVOLVIDA .........................................................................................................64

APÊNDICE B – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA –


app.py .............................................................................................................................65

APÊNDICE C – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA –


views.py...........................................................................................................................66

APÊNDICE D – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA –


functions.py ....................................................................................................................68

APÊNDICE E – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB


DESENVOLVIDA – base.html ....................................................................................70

APÊNDICE F – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB


DESENVOLVIDA – home.html...................................................................................73

APÊNDICE G – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB


DESENVOLVIDA – video.html ...................................................................................74
14

1 INTRODUÇÃO

O fascínio do ser humano pela música é algo inato, tendo se demonstrado essencial em
praticamente todas as culturas (CRUZ, 2008). Neste contexto, o violão se consolidou como um
dos instrumentos mais populares na música ocidental, sendo portátil, acessível e permitindo
uma vasta gama de interpretações musicais, dispondo de notações como a tablatura, para
sequências melódicas e as cifras para sequências de acordes (BARBANCHO et al., 2011).
Contudo, o processo de se registrar músicas em uma linguagem simbólica, de forma a
possibilitar sua posterior reprodução, chamado de transcrição musical, se mostra um problema
complexo, mesmo para especialistas, por exigir a extração de informações como acordes e tom
apenas ouvindo a música (RAMOS, 2015).
Assim como vem ocorrendo em outras áreas do conhecimento, é natural que se busque
a aplicação de ferramentas computacionais integradas a processos musicais. Essas aplicações
deram origem a uma área de pesquisa conhecida como Recuperação de Informações Musicais,
do inglês, Music Information Retrieval (MIR), que vem evoluindo desde a década de 1960,
tendo se tornado uma área multidisciplinar que faz uso de modelos computacionais para extrair
informações de músicas de maneira automática (HAAS, 2012).
Entre as técnicas mais populares para a execução de músicas no violão, está a de utiliza-
lo para o acompanhamento das músicas, ao tocar uma sequência de acordes que acompanha
uma melodia principal, executada na voz, por exemplo (BARBANCHO et al., 2011). O
reconhecimento automático de acordes também está entre os principais focos de estudo para a
área de MIR (HAAS, 2012).
Um acorde pode ser definido como um conjunto de notas musicais executadas
simultaneamente (MED, 1996). Essa definição pode ser apropriada na musicologia, mas se
torna vaga para uma perspectiva de classificação automática por não levar em consideração
fatores como tipo de instrumento, intensidade do som, nível de ruído, entre outros
(OSMALSKY et al., 2012).
O chamado Perfil de Classes de Altura, do inglês, Pitch Class Profile (PCP), é uma das
técnicas para a descrição automática de acordes musicais mais utilizadas, sendo uma
representação da contribuição relativa de cada nota musical em um determinado sinal de áudio
(FUJISHIMA, 1999). Apesar de se mostrar uma boa ferramenta de descrição dos acordes,
muitos estudos têm demostrado que a acurácia do algoritmo PCP oscila em função de variáveis
como instrumento musical utilizado, intensidade sonora e dinâmica musical do áudio a ser
classificado. Por esse motivo, algumas abordagens mais recentes têm utilizado combinações do
algoritmo PCP com técnicas de Inteligência Artificial (OSMALSKY et al., 2012).
As Redes Neurais Artificiais, ou RNAs compões um dos principais campos de pesquisa
da Inteligência Artificial. Baseadas nos neurônios biológicos, sendo um conjunto de modelos
matemáticos para resolução na classificação e reconhecimento de padrões (KOVACS, 1996),
as RNAs podem ser descritas como aproximadores universais de funções [CYBENKO, 1989].
Para tanto, as RNAs necessitam de um conjunto de dados rotulados para poderem ser utilizadas
em determinada tarefa, também chamado de base de dados de treinamento. Desta forma, as
técnicas que utilizam o algoritmo PCP em conjunto com Redes Neurais Artificiais necessitam
de uma base de dados contendo amostras dos acordes que se pretende reconhecer (OSMALSKY
et al., 2012).
Este trabalho tem como principal objetivo o desenvolvimento de um sistema de
reconhecimento automático de acordes musicais de violão utilizando RNAs em conjunto com
a ferramenta PCP.

1.1 Trabalhos Similares


Existem publicações similares à proposta deste trabalho na literatura acadêmica, nas
quais se estuda processos para identificar as propriedades de uma música de forma automática,
a partir de um sinal de áudio. Esta linha de pesquisa, conhecida como MIR, inicia-se em 1966
no trabalho de Kassler (1966). Desde então, os estudos de MIR têm buscado a identificação de
diferentes características musicais, entre elas o ritmo (ZAPATA et. al, 2012), timbre
(HERRERA-BOYER et. al, 2003), melodia (SALAMON, 2012) e harmonia (foco deste
trabalho), definida pela sequência de acordes.

O reconhecimento automático de Acordes (também conhecida como harmonia musical)


é uma das problemáticas estudadas na área de MIR, dispondo de diferentes abordagens na
literatura. Tanguiane (1993) propôs um algoritmo que utilizava a correlação entre as
frequências que compunham o sinal de áudio para reconhecer o acorde correspondente,
utilizando uma escala logarítmica no eixo das frequências.

Fujishima (1999) desenvolveu um sistema de reconhecimento de acordes musicais em


tempo real que decompõe o sinal de áudio em um vetor de 12 dimensões por meio da
Transforma Discreta de Fourier, no qual cada dimensão corresponde a uma das 12 notas do
sistema musical ocidental. Este sistema, denominado Perfil de Classes de Altura, do inglês,
Pitch Class Profile (PCP), vem sendo amplamente utilizado em sistemas de reconhecimento de
acordes desde sua introdução, sendo também aplicado no presente trabalho.

Sheh (2003) propôs um modelo de reconhecimento de acordes que combinava o PCP, a


ferramenta estatística dos Modelos Ocultos de Markov, do inglês Hidden Markov Models
(HMMs) treinada pelo Algoritmo de Maximização de Expectativa, uma abordagem
normalmente utilizada em sistemas de reconhecimento de fala, mas que, em conjunto do
algoritmo PCP, para extrair a informação tonal dos sinais de áudio, mostrou uma taxa de acerto
média de aproximadamente 75% para reconhecimento de acordes em áudios. Este modelo
utilizou múltiplos instrumentos executados simultaneamente e um conjunto de treinamento
contendo 20 músicas dos Beatles.

Osmalsky (2012) desenvolveu um sistema para reconhecimento de acordes utilizando


RNAs em conjunto com o algoritmo PCP. Para isso, foi necessário criar um conjunto de dados
de treinamento ao gravar 50 amostras de cada acorde para cada instrumento a ser reconhecido,
o que limitou quantidade de acordes e de instrumentos musicais no conjunto de dados gerado e
consequentemente a ser reconhecidos pelo sistema. O sistema apresentou resultados robustos,
reportando uma taxa de acerto de 93,5% para áudios similares ao conjunto de dados, ou seja,
contendo apenas acordes de um único instrumento.

Adotando uma abordagem parecida a de Osmalsky (2012), Rondón et al. (2020)


combinou o uso de RNAs e o algoritmo do PCP para o reconhecimento de um grupo limitado
de acordes de um determinado instrumento musical, tendo gerado, neste caso, um conjunto de
dados com amostras de acordes de violão. Com o intuito de reconhecer áudios de músicas
completas, Rondón et al. (2020) realizaram testes em 3 versões de cada música: Versão Original
(contendo instrumentos musicais e voz), Versão Instrumental (Versão Original, com a exclusão
da voz) e Versão Violão (contendo apenas o acompanhamento no violão). Sendo que o sistema
apresentou bons resultados de reconhecimento apenas para a Versão Violão (≅70%) e baixas
taxa de acertos para as Versões Original e Instrumental (>10%). O presente trabalho se baseia
no trabalho de Rondón et al. (2020) e busca melhorar os resultados obtidos em tal publicação.
2 OBJETIVO
Este trabalho tem como objetivo o desenvolvimento de um sistema de reconhecimento
automático de acordes de violão em músicas que possam conter voz e violão simultaneamente
e exibir o resultado das transcrições em uma plataforma interativa, em sincronismo com o vídeo
correspondente a música transcrita, disponibilizado pela plataforma YouTube.

Como objetivos específicos têm-se:

 Aplicar uma rede neural convolucional para filtrar e decompor a música em um arquivo
com voz separado de um arquivo com os instrumentos musicais.
 Criar um modelo de transcrição automática de acordes de violão por meio de uma
abordagem que utiliza Aprendizado de Máquina.
 Gerar um conjunto de dados de treinamento composto por 50 gravações por acorde de
um conjunto de 10 acordes em 4 violões diferentes, totalizando um conjunto de 2000 amostras
para uso no processo de treinamento do modelo criado.
 Treinar o modelo de aprendizado de máquina com o conjunto de dados produzido e
comparar seu resultado com os resultados de outros trabalhos.
 Desenvolver uma plataforma interativa capaz de receber a música a ser reconhecida por
meio de uma URL de vídeo da plataforma Youtube e exibir os acordes da transcrição de maneira
síncrona a esse vídeo, de acordo com o processamento dos dois modelo neurais (remoção de
vocais e reconhecimento de acordes).
3 FUNDAMENTAÇÃO TEÓRICA
Este capítulo irá apresentar as bases teóricas dos conceitos aplicados no
desenvolvimento deste trabalho, não tendo a finalidade de abordar os conceitos de maneira
aprofundada, mas fornecendo uma noção fundamental da teoria utilizada.

3.1 Teoria musical


A música é uma manifestação artística e cultural que combina sons e silêncios para gerar
um todo expressivo, sendo formada por três elementos principais: Melodia (combinação de
sons sucessivos), Harmonia (combinação de sons simultâneos) e Ritmo (ordem e proporção em
que estão dispostos os sons e os silêncios ao longo do tempo) (MED, 1996).

3.1.1 Elementos do Som


O som é uma energia mecânica irradiante transmitida por ondas de pressão
longitudinais, se propagando de forma circuncêntrica em um meio elástico (como o ar). Os sons
também são descritos como a sensação auditiva produzida no ouvido produzida por essa energia
(DA COSTA, 2003).

Na notação musical convencional, os sons podem ser representados pelas propriedades


altura, duração, intensidade e timbre (MED, 1996).

A altura de um som (também chamada de tom) está relacionada a frequência de


propagação do estímulo sonoro. O espectro audível é a faixa de frequências que podem ser
detectadas pelo ouvido. Para os seres humanos, em média, o espectro audível está entre 20Hz
e 20KHz (PURVES et al., 2004). No sistema musical ocidental, a altura do som é quantizada
em frequências discretas em um intervalo de aproximadamente 16Hz a 8KHz, totalizando 96
tons discretos na chamada Escala Cromática Igualmente Temperada (ROSSING et al., 1982).

A duração é tida como o tempo de emissão das ondas sonoras ou a extensão do som
(MED, 1996).

A intensidade é definida fisicamente como a amplitude das vibrações sonoras,


determinada pelo grau de volume sonoro. É importante ressaltar que adjetivos como “alto” e
“baixo”, diferentemente do uso comum, devem ser utilizados para designar a altura dos sons, e
não a sua intensidade (SCALVENZI, 2018).

Por fim, o timbre, também referido como cor ou textura do som, é a característica que
gera a diferenciação entre os sons produzidos por instrumentos diferentes. Diferentemente dos
outros atributos, o timbre não pode ser associado a apenas uma característica física da onda
sonora, apesar de existir uma correlação entre o timbre e o espectro da onda sonora
(SCALVENZI, 2018). A Figura 1 exemplifica as diferenças no domínio da frequência para os
instrumentos musicais flauta doce, piano e trompete executando a mesma nota.

Figura 1 - Análise Espectral de diferentes instrumentos tocando a nota C4 (262 Hz): (a) Flauta Doce, (b)
Piano e (c) Trompete.

Fonte: (DAVIS, 2003)

3.1.2 Notas Musicais


Pode-se definir uma nota musical como sons constituídos por componentes de
frequência relacionados harmonicamente. É a propriedade de altura do som, portanto que
especifica qual a sua nota musical correspondente (OGASAWARA, 2008).

Na música ocidental é convencionado associar a frequência das notas musicais a seus


primeiros harmônicos (harmônicos fundamentais), o que seria equivalente a uma onda senoidal
sintética (SANTANA NETO, 2015). A Figura 2 ilustra a forma de onda de uma nota “La
central” no domínio do tempo, cuja frequência é de 440Hz.

Figura 2 - Lá central puro (sem harmónicos somados)

Fonte: Autores (2021)


A escala adotada pelo sistema musical ocidental, denominada Escala Igualmente
Temperada, adota 12 notas musicais distintas que se repetem de forma sucessiva, sendo elas:
Dó, Dó# (ou Ré♭), Ré, Ré# (ou Mi♭), Mi, Fá, Fá# ou (Sol♭), Sol, Sol# (ou Lá♭), Lá, Lá# (ou
Si♭) e Si. Essas notas também possuem um registro alternativo em letras alfabéticas, sendo

respectivamente a sequência C, C# (ou D♭), D, D# (ou E♭), E, F, F # (ou G♭), G, G# (ou A♭),
A, A# (ou B♭) e B. Este conjunto é denominado de Oitava (MED, 1996). A Tabela 1 sumariza
a correlação entre as 12 notas musicais com suas letras alfabéticas correspondentes.

Tabela 1 - As 12 notas musicais da Escala Igualmente Temperada

A A♯/B♭ B C C♯/D♭ D D♯/E♭ E F F♯/G♭ G G♯/A♭

Lá Lá♯/Si♭ Si Dó Dó♯/Ré♭ Ré Ré♯/Mi♭ Mi Fá Fá♯/Sol♭ Sol Sol♯/Lá♭

Fonte: Autores (2021)

As notas que possuem o mesmo nome, mesmo estando em oitavas diferentes, soam de
forma similar, sendo essa similaridade ocasionada pela percepção logarítmica natural do ouvido
humano (PURVES et al., 2004). A relação entre as frequências de duas notas de mesmo nome
em oitavas consecutivas é de 1:2. Com isso, o intervalo de frequência entre as notas é definido
por uma progressão geométrica de forma que a frequência seja dobrada a cada sequência de 12
notas consecutivas. A razão entre os graus da Escala Igualmente Temperada é dada pela
constante r descrita na Equação (1) (VAN PROOIJEN, 1978).

12
𝑟 = √2 (1)

Pode-se definir a frequência de qualquer nota da escala musical a partir da Equação (1)
e da frequência padrão estabelecida pela norma ISO 16:1975 de 440Hz para a nota Lá 4 (A4).
A fórmula geral para o cálculo da frequência de uma nota da Escala Igualmente Temperada é
dada pela Equação (2) (VAN PROOIJEN, 1978).

𝑓𝑛 = 440 ∙ 𝑟 𝑖 (2)

Onde i é a quantidade de semitons entre a nota padrão A4 e a nota que se deseja calcular
(i será negativo caso a nota escolhida possua altura menor que A4) (VAN PROOIJEN, 1978).

A Tabela 2 mostra a frequência aproximada das 12 notas da Escala Igualmente


Temperada da Oitava 0 à Oitava 8.
Tabela 2 - Frequência (em Hz) das notas da Escala Igualmente Temperada

Oitava Oitava Oitava Oitava Oitava Oitava Oitava Oitava Oitava


Nota
0 1 2 3 4 5 6 7 8

C 16.35 32.7 65.41 130.81 261.63 523.25 1046.5 2093 4186.01

C#/Db 17.32 34.65 69.3 138.59 277.18 554.37 1108.73 2217.46 4434.92

D 18.35 36.71 73.42 146.83 293.66 587.33 1174.66 2349.32 4698.63

D#/Eb 19.45 38.89 77.78 155.56 311.13 622.25 1244.51 2489.02 4978.03

E 20.6 41.2 82.41 164.81 329.63 659.25 1318.51 2637.02 5274.04

F 21.83 43.65 87.31 174.61 349.23 698.46 1396.91 2793.83 5587.65

F#/Gb 23.12 46.25 92.5 185 369.99 739.99 1479.98 2959.96 5919.91

G 24.5 49 98 196 392 783.99 1567.98 3135.96 6271.93

G#/Ab 25.96 51.91 103.83 207.65 415.3 830.61 1661.22 3322.44 6644.88

A 27.5 55 110 220 440 880 1760 3520 7040

A#/Bb 29.14 58.27 116.54 233.08 466.16 932.33 1864.66 3729.31 7458.62

B 30.87 61.74 123.47 246.94 493.88 987.77 1975.53 3951.07 7902.13

Fonte: MOTTOLA (2020)

3.1.3 Acordes Musicais


Acordes são formados por um conjunto de 3 ou mais notas musicais executadas
simultaneamente, compondo a unidade básica da harmonia musical. A classificação dos acordes
se dá pela relação de intervalos musicais entre as notas que os compõem. No caso dos acordes
formados por apenas três notas, também chamados tríades, suas notas musicais são
referenciadas como tônica, terça e quinta (MED, 1996).

Nas tríades, a nota tônica, também chamada de nota fundamental, é aquela que dá o
nome ao acorde, as demais notas que compõe a tríade recebem seus nomes de acordo com o
intervalo em relação a nota tônica. Dessa forma, para acordes maiores, a distância entre tônica
e terça é de 4 semitons (terça maior), enquanto para acordes Menores, a distância entre tônica
e terça é de 3 semitons (terça menor) e para ambos os casos, a distância entre tônica e quinta é
de 7 semitons (quinta justa) (SANTANA NETO, 2015).

Na música popular, é comum a representação de acordes pela mesma notação de letras


alfabéticas (cifras) aplicada na representação de notas musicais, de forma que, uma letra
maiúscula isolada representa a tríade maior daquela nota musical, enquanto que uma letra
maiúscula acrescida de um “m” minúsculo representa a tríade menor daquela nota musical. Por
exemplo, a cifra “C” representa o acorde de Dó Maior, enquanto que a cifra “Cm” representa o
acorde de Dó menor (MED, 1996). Essa notação será adotada durante esse trabalho.

3.2 Redes Neurais Artificiais


As redes neurais artificiais têm sua origem baseada em modelos simplificados dos
neurônios biológicos, fazendo parte de uma das principais divisões do campo da Inteligência
Artificial. As RNAs podem ser entendidas como modelos matemáticos para resolução da
classificação de dados e reconhecimento de padrões (KOVACS, 1996). Vale destacar algumas
etapas importantes das Redes Neurais, como a escolha de sua topologia, o treinamento e a
validação. A topologia de uma RNA depende da forma como os neurônios se conectam para
formar uma "rede" de neurônios. A arquitetura pode ser de redes diretas, do inglês, Feedforward
ou de redes recorrentes (Feedback).

É frequentemente comum representar as redes diretas por camadas. Neste caso são
chamadas redes de camadas. Na camada de entrada os neurônios recebem sinais externos,
vindos da aplicação, e na camada de saída é enviado o resultado do processamento da RNA
(ZAMBIASI, 2010).

A escolha da topologia de uma rede neural artificial é, em sua maioria das vezes, um
processo complexo. Não há modelos matemáticos que forneçam a melhor topologia para
determinado problema. Portanto, é necessário realizar o treinamento da rede diversas vezes e
assim escolher a melhor topologia que se adequa ao caso específico. A Figura 3 representa a
topologia de uma rede neural genérica de 4-8-4-1, o primeiro valor, no caso 4, representa a
quantidade de neurônios na camada de entrada, em sequência estão as camadas intermediárias,
que são representadas pelos valores intermediários entre o primeiro e último algarismos, neste
exemplo sendo os números 8 e 4, e por último, a quantidade de neurônios na camada de saída
com o valor de 1.
Figura 3 - Representação da topologia 4-8-4-1 de uma rede neural artificial (4 entradas, 8 e 4 neurônios
nas camadas intermediárias e 1 saída).

Fonte: Autores (2021)

As topologias são usualmente separadas em camadas. Essas camadas são classificadas


em três grupos:

Camada de Entrada (Input Layer): onde os padrões são apresentados à rede. Camadas
Intermediárias ou Escondidas (Hidden Layer): onde é feita a maior parte do processamento,
através das conexões ponderadas; podem ser consideradas como extratoras de características.
Camada de Saída (Output Layer): onde o resultado final é concluído e apresentado (DA SILVA
ASSIS, 2015). Os neurônios ficam conectados entre si e a etapa na qual eles aprendem a
reconhecer os padrões é chamada de “treinamento”.

Para efetuar a etapa de treinamento, são inseridos dados na entrada da rede e seus
resultados extraídos na saída. A saída é comparada ao valor desejado para a resposta, a cada
entrada inserida, e se computa o erro da rede, que influenciará no ajuste dos pesos. Apesar de
não haver garantias que a rede forneça uma solução ótima para o problema, este processo é
muito utilizado por apresentar soluções satisfatórias para diferentes tarefas, incluindo o
processamento de sinais com ruído (HECHT-NIELSEN, 1989), como neste trabalho.

Em um modelo matemático simplificado do neurônio, os pesos regulam os efeitos dos


sinais de entrada associados, e a característica não linear exibida pelos neurônios é representada
por uma função de transferência, de forma que o aprendizado dos neurônios possa ser mais
elaborado do que apenas relações lineares simples entre as variáveis de entrada. A capacidade
de aprendizagem de uma RNA é alcançada ajustando os pesos de acordo com o algoritmo de
aprendizagem escolhido (ABRAHAM, 2005).

A Equação (3) que ajusta os pesos de acordo com o aprendizado é em uma rede neural
de camada única é dada por:

𝑤 𝑎𝑡𝑢𝑎𝑙 = 𝑤 𝑎𝑛𝑡𝑒𝑟𝑖𝑜𝑟 + 𝜂. (𝑑 (𝑘) − 𝑦). 𝑥 (𝑘)


(3)

Onde w é o valor do peso, 𝑥 (𝑘) é a k-ésima amostra de treinamento, 𝑑 (𝑘) o valor


desejado para a k-ésima amostra de treinamento, y o valor de saída da rede e 𝜂 a taxa de
aprendizagem. A taxa de aprendizagem 𝜂 denota o quão rápido o processo de treinamento da
rede irá convergir para a estabilidade. É mais conveniente tratar a expressão de ajuste de pesos
em sua forma vetorial devido a implementação computacional, que se torna mais otimizada
(SILVA et al., 2016).

A Equação 3 denota a equação de ajuste de pesos para uma rede de camada única. Para
uma rede múltiplas camadas, não há valor desejado “d” para as camadas de entrada e
intermediárias. Para compensar isso, um processo de retropropagação do erro é usado para se
obter os valores de ajustes de tais neurônios. Além disso, nas camadas intermediárias e de saída,
o valor de entrada “x” é substituído pela entrada do neurônio em questão (HECHT-NIELSEN,
1992). Vale ressaltar que a quantidade de vezes em que todos os dados do conjunto de treino
passam pela rede neural é denominada “número de épocas”.

Outro aspecto relevante do processo de aprendizagem é identificar quando o algoritmo


de treinamento da RNA deve parar, incrementar o número de épocas e os resultados serem
considerados satisfatórios. Uma das formas de fazer isso é através da análise do erro de
treinamento, que usualmente inicia em um valor mais alto que decresce conforme as épocas
passam. Com base nesse dado, é possível alterar os hiperparâmetros da rede, com o objetivo de
retreinar o modelo para obter um valor de erro menor. Para realizar tais verificações que
interferem na escolha do parâmetro de treinamento, utiliza-se um conjunto de “validação”, que
é formado por um grupo de dados diferente do treinamento (GUIMARÃES et al. 2008).

Cada neurônio terá seu peso ajustado individualmente, além disso, este neurônio terá
seu valor de saída definido pela chamada “Função de ativação”. A função sigmoide é
geralmente escolhida em redes neurais devido a algumas de suas características, como ser
diferenciável em qualquer ponto. A função sigmoide é útil em problemas de classificação, como
o caso deste trabalho, pois quando temos valores próximos a zero, sua derivada é máxima, o
que desloca o resultado para as extremidades do intervalo da função, como 0 e 1, que podem
ser duas classes distintas. Esta função é mostrada na Equação (4) (MOUTINHO et al. 2002) e
seu gráfico está na Figura 4.

1
∅= (4)
(1 + 𝑒 −𝑥 )

Figura 4 - Representação da função sigmoide com intervalo de [0,1]. A principal utilização da função
sigmoide é em problemas de classificação, devido ao ser fator diferenciável. Quando a função está
próxima de 0, a inclinação é máxima, e, portanto, o resultado de sua derivada também, logo, para valores
próximos de zero, o resultado será deslocado para as extremidades do intervalo escolhido, no caso [0,1],
que podem representar duas classes diferentes.

Fonte: Autores (2021)

3.2.1 Redes Neurais Convolucionais


As Redes Neurais Convolucionais são análogas as Redes Neurais tradicionais vistas
anteriormente em relação a neurônios e ao processo de aprendizagem. Cada neurônio irá receber
uma entrada e realizar uma operação com esse dado, desde o vetor contendo os valores de
entrada até a classificação fornecida na saída. A grande diferença são os processos ocorridos
com os dados antes desses serem utilizados como entrada para camadas de classificação de
saída. Tais processos ocorrem na camada de convolução, cuja função é aplicar filtros sobre os
dados de entrada de forma a aprender, também durante o processo de treinamento, quais
características são mais relevantes para a classificação de saída da rede.
A convolução é representada por um operador linear entre duas matrizes, uma para
representar os dados de entrada e outra para representar o filtro. A Equação (5) denota uma
convolução (SANTOS et al. 2017).

ℎ(𝑣) = (𝑤 ∗ 𝑥)(𝑡)
(5)

Onde ℎ(𝑣) é a combinação linear dos pesos w em relação à vizinhança x. A vizinhança


é determinada a partir de um valor em uma matriz de dados. Os valores ao redor do dado em
questão são nomeados de vizinhança.

A ativação também é na camada de convolução. Essa realiza um ajuste entre um


conjunto de neurônios 𝑦𝑖 (𝑣) com uma função de ativação 𝑓 sobre uma convolução ℎ(𝑣). Isso
produz os mapas de características que armazenam as informações aprendidas dos filtros. Essa
ativação é representada pela Equação (6) (SANTOS et al. 2017).

𝑦𝑖 (𝑣) = 𝑓(ℎ(𝑣))
(6)

O filtro de convolução será uma matriz, que realizará operações no vetor de dados de
entrada, de forma a se obter uma nova matriz, onde as características principais para o problema
em questão serão extraídas e armazenadas, o mapa de características. Para diferentes valores do
filtro, outras características do áudio original (no caso deste trabalho) são destacadas e
armazenadas para uso posterior. A execução desse processo é semelhante quando se trata de
imagens, o que torna sua representação mais simples.

Na Figura 5, é exibida características extraídas de linhas verticais em uma imagem,


enquanto na Figura 6 exibe-se as linhas horizontas, as quais foram as requisitadas para o
problema de exemplo de classificação de imagens.
Figura 5 - Características (linhas verticais) desejadas sendo obtidas através da convolução da primeira
imagem com o filtro.

Fonte: Adaptado de ZHANG (2019)

Figura 6 - Características (linhas horizontais) desejadas sendo obtidas através da convolução da primeira
imagem com o filtro.

Fonte: Adaptado de ZHANG (2019)

Similar às camadas convolucionais, as camadas de pooling também contêm um filtro,


porém o objetivo é reduzir a dimensão da entrada. O pooling é utilizado para sumarizar algumas
características detectadas em sua entrada, além disso, é também capaz de gerar uma
representação invariante a pequenos deslocamentos de uma determinada característica
detectada (CASTELO BRANCO et al. 2019).

Além disso, o pooling, também é uma forma de redimensionar a imagem, tarefa também
identificada como “Down-Sampling”. Existem diversas formas de se utilizar o pooling em
conjunto com as redes convolucionais. O Max Pooling, ou Pooling Máximo, é umas das
maneiras mais tradicionais de se utilizar o pooling, sendo útelpara eliminar valores não
máximos, reduzindo a dimensão da representação dos dados e consequentemente a computação
necessária para as próximas camadas, além de criar uma invariância a pequenas mudanças e
distorções locais (FERREIRA, 2017). A Figura 7 exibe um exemplo da atuação do Pooling
Máximo em um vetor de dados. Cada bloco da matriz é representado por uma cor. Em cada
bloco, o valor máximo será selecionado e irá compor uma nova matriz, porém, dessa vez de
com dimensão menor.

Figura 7 - Exemplo da diminuição de uma matriz do mapa de características através do Pooling Máximo.

Fonte: Autores (2021)

Em uma rede neural convolucional genérica, a matriz de dados de entrada passa pela
camada de convolução. O resultado desse processo é aplicado no algoritmo de Pooling Máximo,
que compõe a camada subsequente à convolução. Na última etapa das redes convolucionais, é
utilizada uma sequência de camadas de neurônios conectados a todas as ativações das camadas
anteriores (fully-connected), de forma análoga às camadas das redes neurais tradicionais
(OLIVEIRA et al. 2017). Por fim, a rede neural tradicional irá classificar os dados de acordo
com o problema. Todo o encadeamento de camadas ilustrado pela Figura 8 é chamado de rede
neural convolucional.
Figura 8 - Representação de uma típica rede neural convolucional, contendo a matriz de dados de
entrada, conectadas a uma camada de convolução. O resultado da convolução é aplicado na camada de
Pooling, que servirá de entrada para a rede neural artificial. O resultado final será a determinação de
uma das classes do problema.

Fonte: Autores (2021)

3.3 Processamento de Sinais


O algoritmo PCP, proposto por Fujishima (1999), vem sendo amplamente utilizado em
aplicações de classificações de acordes musicais em sinais de áudio. Fujishima propôs um
sistema que tinha como base a equivalência entre notas iguais de oitavas diferentes e na
descrição de sinais de áudio com base na magnitude do espectro do sinal em bandas especificas.

O PCP ficou estabelecido como sendo um vetor de 12 dimensões representando a


intensidade relativa de cada um dos 12 semitons da escala igualmente temperada no espectro
do sinal de entrada, sendo representado visualmente por um histograma de 12 barras. Esse
espectro pode ser comparado a um conjunto de vetores para estimar a nota ou acorde
correspondente ao áudio classificado (FUJISHIMA, 1999).

Existem variações quanto à forma de obtenção do PCP, mas geralmente essas


abordagens são constituídas das mesmas etapas. Primeiro, um fragmento do sinal sonoro de
entrada no domínio do tempo é transformado em um espectro X(.) no domínio da frequência
pela Transformada Discreta de Fourier de Curto Termo1, do inglês Discret Short-Time Fourier
Transform (DSTFT), representada na Equação (7) (SHEH, 2003).

𝑁−1

𝑋𝐷𝑆𝑇𝐹𝑇 [𝑘, 𝑛] = ∑ 𝑥[𝑛 − 𝑚] ∙ 𝜔(𝑚) ∙ 𝑒 −𝑗2𝜋𝑘𝑚/𝑁 (7)


𝑚=0

1
Também pode ser chamado de “Transformada de Fourier de Tempo Curto”
Onde k indica o índice do eixo das frequências, com 0 ≤ k ≤ N – 1;

n é o centro da janela de curto termo;

𝜔(𝑚) é uma janela de Hanning de N pontos.

Em seguida, o PCP é obtido pela fórmula apresentada na Equação (8) (OSMALSKY,


2012).

2
𝑃𝐶𝑃∗ (𝑝) = ∑||𝑋(𝑙)|| 𝛿(𝑀(𝑙), 𝑝)
(8)
𝑙

Onde PCP*(p) é um vetor não normalizado, definido por p = 0, 1, ..., 11;

𝛿(. , . ) representa o delta de Kronecker;

𝑀(𝑙) é definido pela Equação (9) (OSMALSKY, 2012).

−1, 𝑠𝑒 𝑙 = 0
𝑙
𝑀(𝑙) = (𝑓𝑠 ∙ ) 𝑁 (9)
12𝑙𝑜𝑔2 [ 𝑁 ] 𝑚𝑜𝑑 12, 𝑠𝑒 𝑙 = 1, … , − 1
𝑓𝑟𝑒𝑓 2
{

Onde 𝑓𝑟𝑒𝑓 é a frequência de referência correspondente a PCP* (0), por exemplo, para
uma escala iniciada em C, a frequência de referência é de 130,80Hz;

N é o número de raias espectrais na DFT do sinal de entrada e fs é a frequência de


amostragem.

Após esse processo, deve-se normalizar o vetor obtido de forma a facilitar a comparação
entre vetores PCP para áudios de intensidades diferentes, isso faz com que a energia seja
representada como um valor relativo. A normalização é realizada ao dividir a energia de cada
raia pela energia total do PCP não normalizado, conforme mostrado na Equação (10)
(OSMALSKY, 2012).

𝑃𝐶𝑃∗ (𝑝)
𝑃𝐶𝑃(𝑝) = 11 ∗
∑𝑗=0 𝑃𝐶𝑃 (𝑝) (10)

Onde p é o índice da raia que se quer normalizar.


Esta representação proporcional da contribuição das 12 notas no sinal de um acorde
apresenta robustez quanto a fatores como mudança de timbre e intensidade do som
(FUJISHIMA, 1999). Como mostrado na Figura 9, um mesmo acorde executado em diferentes
instrumentos apresentará os mesmos 3 picos, correspondentes as notas que formam o acorde.

Figura 9 - Representação do acorde C (Dó Maior) para Violão e Piano pelo vetor PCP

Fonte: Osmalsky (2012)

Apesar do PCP se mostrar um sistema robusto para fazer a descrição dos componentes
do sinal do acorde, ele se mostra insuficiente para bons resultados na classificação dos acordes.
Como mostrado no trabalho de Osmalsky et al. (2012), uma abordagem utilizando
simplesmente o algoritmo do Nearest Neighbors (1-NN) (DEZA et al., 2009), onde não há fase
de aprendizagem, apenas medindo a distância entre as raias com vetores padrão apresentou uma
taxa de erro de 8% para acordes de violão e porcentagens ainda maiores para outros acordes.
Por esse motivo, se fez necessária à implementação de um algoritmo de aprendizado de
máquina em conjunto com o classificador PCP para realizar o reconhecimento dos acordes.

3.4 Aplicação Web


Na computação, entende-se Web como um conjunto de serviços e funcionalidades
interconectados por meio do protocolo internet (DWYER, 2016). Nesse contexto, a Aplicação
Web é um caso particular de serviço eletrônico, caracterizado como um sistema executável em
um navegador de internet, podendo estar hospedado na internet por meio de um servidor, ou
salvo localmente no dispositivo do usuário, que tem seu estado afetado de acordo com a
navegação e a entrada de dados do usuário (user input) (GRINBERG, 2018).
De maneira geral, o desenvolvimento de aplicações Web envolve a integração entre o
back-end, composto pelo servidor que hospeda a aplicação e coordenada a lógica de
funcionamento e de interação entre suas diferentes funcionalidades e o front-end, que compõe
a interface visual que será exibida para o usuário.

As subseções a seguir descrevem as ferramentas e recursos utilizados para viabilizar a


Aplicação Web desenvolvida para este trabalho.

3.4.1 Python
Na computação, o termo Linguagem de Programação designa a função de comunicação
com as estruturas padronizadas de semântica junto a sintaxe para especificação de um código
que ao ser processado por um dispositivo, irá especificar o conjunto de instruções a seres
executadas por esse dispositivo (SEBESTA, 2004).

O Python é uma linguagem de programação de alto nível, ou seja, sua sintaxe possui um
alto nível de abstração de conceitos da lógica computacional, se aproximando mais da
linguagem humana, tendo recebido notoriedade por sua sintaxe clara e simplificada em relação
suas antecessoras (BORGES, 2014). Tendo sido escolhida como principal linguagem de
programação para o desenvolvimento do nosso sistema.

Um dos motivos para a escolha da linguagem Python é sua vasta coleção de bibliotecas
disponibilizadas por desenvolvedores terceiros, muitas delas providenciando soluções
personalizadas para tipos específicos de problemas (SUMMERFIELD, 2010). Durante o
desenvolvimento do projeto se mostraram especialmente uteis as bibliotecas: Urlib que facilita
o processamento de URLs, Python Audio Converter, capaz de fazer a manipulação de
metadados de áudio, youtube_dl, voltada para a realização de download de vídeos do YouTube
em diversos formatos e a SoX (Sound Exchange) que permite o processamento dos sinais de
áudio digitalizados (BITTNER, 2016).

3.4.2 Flask
Um framework é uma biblioteca, ou coleção de bibliotecas, que busca resolver
parcialmente problemas com uma abordagem genérica, podendo solucionar problemas
específicos a depender da configuração e da programação da aplicação (DWYER, 2016).
A ferramenta Flask é um framework que utiliza linguagem de programação Python para
desenvolvimento do back-end de Aplicações Web. O Flask é classificado como um “micro-
framework” devido ao seu tamanho reduzido em comparação com outros padrões de
frameworks, sendo projetado para fornecer um núcleo com funções básicas e com possibilidade
expansão, com a instalação de outras funcionalidades, o que torna o Flask um framework
otimizado para cada aplicação (GRINBERG, 2018).
Para este trabalho, o Flask foi utilizado no desenvolvimento da Aplicação Web que
possui uma interface interativa para o recebimento da música a ser transcrita e exibição dos
resultados da transcrição. Sua escolha se deu pela integração com a linguagem Python e pelo
seu núcleo de funcionalidades simplificado.

3.4.3 Bootstrap
Bootstrap é um framework de código aberto que fornece comandos para a criação do
front-end em aplicações Web, combinando funcionalidades de diferentes ferramentas de
desenvolvimento de interfaces gráficas como a linguagem de marcação HTML, a linguagem de
estilo CSS, e a linguagem de programação JavaScript, permitindo a implementação
simplificada de diversos modelos de componentes interativos como tabelas, formulários e
botões (SANTIAGO, 2020).

3.4.4 Extensão de áudio .WAV


Um arquivo WAV é um arquivo de áudio salvo no formato WAVE, um formato de
arquivo de áudio digital padrão utilizado para armazenar dados de áudio. Os arquivos WAV
podem conter gravações de áudio com taxas de amostragem e taxas de bits diferentes, mas
geralmente são salvos em um formato estéreo (dois canais de áudio) de 44,1 kHz e 16 bits, que
é o formato padrão usado para áudio de CD. (.WAV, 2021) A amplitude de um áudio de
extensão .wav é transformada em bits. Para 16 bits, os valores de amplitude do áudio podem
ser representados graficamente por valores de 0 a 65.536.

3.4.5 FFmpeg
O FFmpeg é uma biblioteca de código aberto e um conversor de áudio e vídeo em
diversos formatos, o qual consegue trabalhar com taxas arbitrárias de amostragem, ou até
redimensionamento de vídeos. O FFmpeg lê a partir de um determinado número de arquivos de
entrada especificado pela opção -i (input), e grava em um determinado número de arquivos de
saída. A partir disso, é possível escolher diversos parâmetros, como a taxa de amostragem, o
bit rate e o número de canais de um áudio, o que torna a biblioteca relevante para a manipulação
de arquivos de música com linguagem de programação. (BINGHAM et al., 2000)
A Figura 10 mostra o diagrama de uma conversão realizada pela biblioteca FFmpeg de
um áudio .wav genérico para um áudio com os parâmetros escolhidos como padrão do projeto.

Figura 10 - Conversão dos parâmetros de um áudio .wav

Fonte: Autores (2021)

3.4.6 API do Youtube


Uma Interface de Programação de Aplicação, do inglês, Application Programing
Interface (API) é um termo que designa um padrão de formato de dados, rotinas e funções para
realizar o acesso a um determinado dispositivo, serviço Web ou sistema operacional, a fim de
permitir a integração entre diferentes serviços (DWYER, 2016).

YouTube é uma plataforma de compartilhamento de vídeos online mantida pela empresa


Google. A chamada API do YouTube permite, disponibilizada gratuitamente pelo Google,
permite realizar a integração de vídeos do Youtube com a Aplicações Web e o acesso a métricas
dos vídeos como o Tempo Decorrido e Status de Reprodução do vídeo. Neste trabalho, O
YouTube foi escolhido por ser uma plataforma ampla na área musical, utilizado inclusive para
lançamentos oficiais de músicas e vídeo clipes por parte de artistas e gravadoras. Além disso, a
API do Youtube possui funcionalidades úteis para realização do sincronismo entre cifra e vídeo.
4 METODOLOGIA
Esta sessão apresenta os métodos pelos quais o grupo abordou a resolução do problema
de transcrição de acordes de violão. A solução proposta une conceitos de Inteligência Artificial,
Processamento de Sinais e de Desenvolvimento de aplicações Web. A Figura 11 exibe um
fluxograma com a visão macro do sistema desenvolvido.

Figura 11 - Fluxograma do sistema desenvolvido

Fonte: Autores (2021)

A etapa de processamento interno do sistema pode ser subdividida em 5 etapas,


conforme o fluxograma da Figura 12. Cada uma dessas etapas será descrita de forma mais
aprofundada nesse capítulo.
Figura 12 - Fluxograma de etapas do Processamento Interno do sistema

Fonte: Autores (2021)

4.1 Extração e conversão do áudio


A biblioteca youtube_dl foi utilizada para a extração do áudio de um vídeo do Youtube
diretamente para o formato .WAV. Também foi utilizada a ferramenta SoX, em conjunto com
a FFmpeg, para padronizar o formato dos áudios gravados, em termos de frequência e em
quantidade de canais.

Sendo assim, os arquivos de áudios gravados foram todos padronizados em taxa de bits,
amostragem e número de canais, conforme os parâmetros descritos na Tabela 3.
Tabela 3 - Padronização dos parâmetros dos áudios utilizados.

Amostragem Taxa de bits Número de Canais


44100 Hz 16 bits/s 1 (Mono)

Fonte: Autores (2021)

4.2 Separação do Instrumental do áudio


O processo chamado de decomposição musical, do inglês, Audio Source Separation,
consiste na decomposição de uma música em seus elementos constitutivos, tais como vocais,
baixos e baterias. Cada um desses elementos constitutivos possui características distintas, como
a quantidade e intensidade de frequências que os compõe, possibilitando a decomposição da
música (TAKAHASHI, 2017).

Como dito anteriormente, o presente trabalho está baseado no estudo de Rondón et al


(2020) para detecção de notas musicais, em que havia a necessidade de que o áudio a ser
reconhecido contivesse apenas a parte instrumental das canções, sem os vocais, para que os
resultados fossem satisfatórios. Nosso trabalho busca propor uma solução para esta limitação
ao fazer uso de Redes Neurais Convolucionais, generalizando o algoritmo para que ele possa
detectar acordes em músicas contendo os instrumentos e os vocais simultaneamente.

Baseado no trabalho de Takahashi et al (2017), o chamado Removedor de Vocais, do


Inglês, Vocal Remover, é um sistema de código aberto que realiza a separação dos vocais e os
instrumentais de uma música em áudios distintos, tendo seu princípio de funcionamento
baseado nas Redes Neurais Convolucionais, a ferramenta foi treinada utilizando um banco de
dados composto por 50 músicas apresentando uma taxa de distorção de sinal (SDR) média de
apenas 5%.

Essa ferramenta foi integrada ao sistema desenvolvido pelo grupo com o intuito de
aumentar a acurácia das transcrições ao possibilitar que a rede processe o áudio contendo apenas
os instrumentos musicais, sem os vocais, pois, como demonstrado por Rondón et al. (2020), o
reconhecimento dos acordes pela rede neural se torna menos acurado em áudios que contenham
voz, além dos instrumentos.

A Figura 13 mostra o diagrama de funcionamento para um áudio genérico, antes e


depois da aplicação da RNA para remoção de vocais. As componentes que pertencem à voz são
suprimidas e o resultado é salvo em um arquivo contendo apenas a parte instrumental da música.
Figura 13 - Diagrama de funcionamento da RNA para remoção de vocais em uma música genérica. O
sinal contendo a voz e os instrumentos é separado em dois arquivos diferentes.

Fonte: Autores (2021)

4.3 Separação do áudio em segmentos


O processo de divisão do sinal de áudio a ser classificado em segmentos menores busca
fazer com que cada subdivisão do áudio possua apenas um acorde a ser classificado,
aproximando a duração das amostras de áudio a serem classificadas com a duração das amostras
de áudio utilizadas durante o treinamento, o que melhora a acurácia geral da rede (DA SILVA
NUNES et al. 2010).

A duração dos seguimentos de áudio, denominada janela, ficou estabelecida em 2


segundos, tendo esse valor sido escolhido de maneira experimental, por ter apresentado uma
melhor taxa de acerto nas transcrições realizadas.

4.4 Análise Espectrográfica


Para a realização do pré-processamento, foram utilizadas duas principais ferramentas.
A Transformada Discreta de Fourier (TDF) e o PCP.

Para a manipulação inicial do arquivo, utilizou-se a TDF. A transformada de Fourier


aproxima qualquer função contínua, como a soma de funções senos e cossenos. A TDF executa
a mesma tarefa, mas com sinais discretos, e permite identificar componentes periódicas em seu
sinal, favorecendo a análise desses dados (OPPENHEIM et al., 2012).

Aplicando isso a sinais musicais, a TDF permite a decomposição em senos e cossenos


das diferentes notas de vários instrumentos musicais como a flauta, o saxofone e o piano, de
forma que as suas componentes de frequência, amplitude e fase sejam coletadas para posterior
reconstrução. Da mesma forma, algumas características básicas do som associadas à sua forma
de onda, como intensidade e timbre, podem ser avaliadas (OSORIO et al. 2012).

O algoritmo PCP tem sido a escolha para extrair as características dos dados para um
reconhecedor automático de notas músicas, desde que Fujishima (1999) introduziu o algoritmo.
Em sua versão básica toma como entrada um vetor que representa o sinal de som no domínio
de tempo e retorna um vetor de 12 componentes representando o conteúdo de frequência do
sinal em cada uma das notas da escala musical (também é disponível em 24 e 36 componentes).
Para cada instancia, o PCP mostra como saída quão presente é a componente principal da nota
analisada.

A partir desses conceitos, é possível extrair as características de um sinal de áudio e


aplicar suas componentes nas entradas da rede neural.

4.5 Geração dos Dados de Treinamento para o Reconhecimento de Acordes


O sistema foi treinado para realizar o reconhecimento de 10 acordes do grupo das tríades
maiores e menores. Esse conjunto de acordes é o mesmo que o escolhido no trabalho de Rondón
et al. (2020) que serviu como base para esse projeto, possibilitando a comparação direta dos
resultados entre as duas redes. A Tabela 4 mostra os acordes que compões o conjunto de dados,
bem como o símbolo e as notas musicais que os constituem.
Tabela 4 - Conjunto de Acordes utilizado no treinamento dos modelos

Nome do Acorde Símbolo Tônica Terça Quinta


Dó Maior C Dó Mi Sol
Ré Menor Dm Ré Fa Lá
Ré Maior D Ré Fa♯ Lá
Mi Menor Em Mi Sol Si
Mi Maior E Mi Sol♯ Si
Fá Maior F Fá Lá Dó
Sol Maior G Sol Si Ré
Lá Menor Am Lá Do Mi
Lá Maior A Lá Do♯ Mi
Si Menor Bm Si Ré Fá♯

Fonte: Autores (2021)

O banco de dados do trabalho Rondón et al. (2020) é construído a partir de gravações


dos 10 acordes com o auxílio de três violões de aço e um de nylon. Cada acorde foi tocado 200
vezes, sendo estes divididos em quatro partes (50 acordes para cada violão). Ao todo, foram
tocados 2000 vezes, sendo 1000 em um ambiente comum (por comum, entende-se com ruído
do ambiente), e 1000 gravadas em uma câmara de isolamento acústico.

Para efeito de comparação com os resultados obtidos no Rondón et al. (2020), foi
construído uma base de dados semelhante. Foram gravados os mesmos 10 acordes, 2000 vezes,
utilizando 4 violões. Porém, devido às limitações de equipamentos, não foi possível realizar as
gravações em uma câmara de isolamento acústico, logo, todas as notas foram emitidas em
ambientes com ruído. A Tabela 5 sumariza as comparações entre o banco de dados original e o
banco de dados gerado pelo grupo.

Tabela 5 - Composição do Banco de Dados gerado

Dataset Tipo de violão Total de gravações Em ambiente comum Em câmara acústica Acordes
Original 3 de aço + 1 de nylon 2000 1000 1000 10
Criado 3 de aço + 1 de nylon 2000 2000 0 10
Fonte: Autores (2021)
Após a geração do conjunto de acordes, esses dados são computados pelo algoritmo de
PCP e seus resultados alocados para um arquivo de extensão csv, os quais servirão de entrada
para a rede.

O arquivo gerado possui 12 colunas, referentes a cada uma das notas principais. Esses
valores são gerados pelo algoritmo PCP. As colunas são preenchidas com valores de intensidade
de cada nota em questão, cada linha é uma amostra do conjunto de dados, que é um vetor de 12
dimensões, conforme mostrado na Tabela 6.

Tabela 6 - Arquivo .csv gerada pelos valores de saída do algoritmo PCP.

C C# D D# E F F# G G# A A# B
1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra 1º amostra
2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra 2º amostra
3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra 3º amostra
4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra 4º amostra
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra nº amostra

Fonte: Autores (2021)

Todas as etapas anteriores constituem o pré-processamento da rede, exibido na Figura 14,


composto pela padronização das características dos áudios, análise de Fourier e o algoritmo
PCP. Com o pré-processamento realizado, será possível iniciar o treinamento da rede.

Figura 14 - Etapas do pré-processamento dos dados na etapa de treinamento.

Fonte: Autores (2021)

4.6 Rede Neural Artificial para Reconhecimento de Acordes


Essa Sessão vai explorar os processos realizados para a obtenção da Rede Neural
Artificial utilizada para o reconhecimento de acordes no projeto, desde a geração do seu
conjunto de dados para o treinamento, o processo de escolha da topologia da rede, o treinamento
propriamente dito e a validação da rede.
4.6.1 Escolha da Topologia
Foram escolhidas 4 topologias de rede, as quais foram testadas com alterações na
quantidade de neurônios das camadas intermediárias, com o objetivo de se medir a diferença
na acurácia para cada topologia.

Todas as 4 topologias possuem as mesmas camadas iniciais e finais. As camadas iniciais


são computadas através de 12 neurônios, representados pelas 12 saídas do algoritmo PCP. A
saída é composta de 10 neurônios, que represente os 10 acordes escolhidos no trabalho. A
Tabela 7 representa as topologias usadas no treinamento. A coluna “numeração” atribui índice
as topologias, em razão da praticidade de realizar a citação de cada rede ao decorrer do texto.

Tabela 7 - Topologias utilizadas durante o treinamento (As camadas estão separadas por hífen).

Numeração Topologia
1 12-30-10
2 12-38-24-10
3 12-30-15-30-20-12
4 12-24-48-20-48-20-10

Fonte: Autores (2021)

Posteriormente, na sessão de Resultados, serão discutidos detalhes sobre os resultados


e sobre a escolha da arquitetura da rede para o treinamento.

4.6.2 Hiperparâmetros para o treinamento da rede


Os parâmetros utilizados foram os mesmos utilizados no trabalho de Rondón et al.
(2020), que são: 𝜂 = 0.001, número de épocas = 100 e a função de ativação escolhida foi a
sigmoide.

4.6.3 Conjunto de Teste


Para o conjunto de teste da rede, foram utilizados um violino, um acordeão, outro violão
e um piano e suas notas gravadas e testadas na topologia escolhida. Para esta etapa, não houve
alterações referentes ao trabalho original, pois não foi possível a aquisição de tais instrumentos
pelos membros do grupo. O objetivo de utilizar esses instrumentos é a experimentação da
detecção de notas por outros mecanismos, uma vez que a emissão de um acorde não depende
de um instrumento, mas sim de sua frequência.
4.7 Aplicação Web
A Aplicação Web desenvolvida em Flask, é constituída da Página Inicial e da Página de
Exibição dos Resultados. Uma árvore estrutura de arquivos que compõe a Aplicação Web
desenvolvida pode ser visualizada no Apêndice A.
A Página Inicial é responsável por receber a URL do YouTube do usuário e acionar o
processo de transcrição dos acordes do vídeo por meio do botão “Transcrever”, redirecionando
para a Página de Exibição do Vídeo ao final desse processo. O layout dessa página pode ser
observado na Figura 15. O código HTML referente à página inicial pode ser encontrado no
Apêndice F.

Figura 15 - Layout da Página Inicial da Aplicação Web

Fonte: Autores (2021)

A Página de Exibição dos Resultados é constituída por um player do Youtube integrado


à aplicação com a exibição dos acordes de forma sincronizada ao vídeo, de forma que são
exibidos três acordes por vez, como o exemplificado na Figura 16. O acorde em destaque no
centro correspondente ao acorde atual, o acorde no lado esquerdo corresponde ao acorde
anterior e o acorde no lado direito corresponde ao próximo acorde. O código HTML referente
à página de exibição dos Resultados pode ser encontrado no Apêndice G.
Abaixo da exibição dos acordes está a barra de duração do acorde atual, indicando ao
usuário quando ocorrera a troca para o próximo acorde. A Barra de duração é possui uma
gradação de 0 a 7, o número mostrado na barra indica o tempo de duração dos acordes em
segundos, indo de 0 a 6 para acordes de até 6s de duração, e exibindo “6+” para acordes com
duração maior que 6 segundos.

Figura 16 - Página de Exibição dos Resultados

Fonte: Autores (2021)

Ambas as páginas possuem um cabeçalho e um rodapé. O cabeçalho exibe o nome do


trabalho e um ícone que quando clicado, faz com que a aplicação seja redirecionada à página
inicial. O Rodapé exibe o nome dos autores do projeto, a faculdade e o curso para o qual ele
foi desenvolvido. O código HTML referente aos elementos do cabeçalho e rodapé, comuns a
todas as páginas da aplicação, pode ser encontrado no Apêndice E.
Todo o processamento interno da Aplicação Web foi programado em Python e o
Apêndice B mostra o código do arquivo app.py que inicializa a aplicação. As visualizações a
serem exibidas para o usuário são controladas pelo arquivo views.py, presente no Apêndice C.
Todas as demais funções necessárias para o funcionamento da aplicação estão concentradas no
arquivo functions.py descrito no Apêndice D.

4.8 Testes Realizados


A avaliação do processo de transcrição musical foi medida pelas comparações entre os
resultados obtidos e os acordes originais das músicas, por meio de duas ferramentas estatísticas:
a Taxa de Acerto e a Maior Subsequência Comum, do inglês, Longest Common Subsequence
(LCS) (PAOLI, 2016).
A taxa de acerto, ou acurácia, é dada pelo número de acertos dividido pelo número total
de elementos da sequência dos resultados desejados (DA SILVA NUNES et al. 2010), para o
nosso caso, os resultados desejados correspondem à sequência de acordes da música original.
Por outro lado, a métrica LCS é um modo eficaz de comparar a similaridade de duas
sequências, verificando a maior quantidade de elementos em uma mesma ordem, possuindo
aplicações em computação e em outras áreas como a do sequenciamento genético
(APOSTOLICO et al., 1987).
A abordagem mais comum para aplicação do algoritmo LCS é a utilização de uma
matriz que compara, dois a dois, os elementos das sequências, seguindo a regra de que o valor
de cada célula com elementos iguais será igual ao valor da célula localizada na diagonal superior
esquerda incrementando em 1. Caso os elementos sejam diferentes, o valor da célula
corresponderá ao maior valor entre as células localizadas diretamente acima ou à esquerda. Ao
final do processo, o maior número da matriz será correspondente à quantidade de elementos da
LCS. A Figura 17 ilustra esse processo para as sequencias A=abcdbb e B=cbacbaaba, cujo LCS
é de 4 elementos.

Figura 17 - Exemplo de matriz para o cálculo do LCS de 4 elementos para as sequencias A = abcdbb e B =
cbacbaaba

Fonte: APÓSTILICO et al. (1987)


Pra a realização dos testes, a sequência de acordes originais das músicas foi extraída do
website CifraClub2 sendo necessária a conversão manual para um formato da sequência onde a
representação de um acorde a cada de 2 segundos de áudio, de forma similar aos resultados
obtidos na saída do sistema desenvolvido.
Além da comparação dos resultados do sistema desenvolvido neste trabalho com a
música original, também foram comparados os resultados do sistema proposto por Rondón et
al. (2020) com as mesmas músicas originais, mostrando as diferenças de resultados entre as
duas abordagens.
A música escolhida para a realização dos testes foi Imagine, do músico inglês John
Lennon em duas versões: A versão original de 1971, remasterizada em 2010 com o
acompanhamento de múltiplos instrumentos (Piano, Baixo, Bateria, e instrumentos de corda)
(LENNON, 2017) e a versão somente com Voz e Violão, interpretada pelo músico Caico
Antunes, extraída de um vídeo aula do website CifraClub do ano de 2020 (ANTUNES, 2020).

2
https://www.cifraclub.com.br/
5 RESULTADOS
Este capítulo tem a finalidade de apresentar os resultados das transcrições realizadas,
bem como a Aplicação Web desenvolvida para este projeto.

5.1 Banco de dados


Os áudios foram gravados conforme descrito na seção 4.5 Geração do Banco de Dados.
Realizando a análise espectral das gravações, é possível notar a presença de ruído, devido à
gravação ter sido realizada em um ambiente sem isolamento acústico. Os dados gerados estão
disponíveis3 e abertos para serem baixados e utilizados. A Tabela 8 mostra parte da tabela
gerada para o banco de dados criado.

Tabela 8 - Exemplo de uma das tabelas de valores de intensidade dos acordes gravados pelo grupo.

C C# D D# E F F# G G# A A# B
0,00092474 0,110325365 0,00232842 0,001462 0,312763 0,013527 0,002085 0,002595 0,015573 0,523804 0,004129 0,010484
0,001885749 0,010357825 0,003580702 0,007459 0,618462 0,054344 0,010024 0,005278 0,01757 0,225302 0,007594 0,038144
0,001232622 0,179354887 0,001691871 0,002522 0,542073 0,013123 0,010016 0,00169 0,008371 0,230875 0,00538 0,003671
0,000890025 0,093377956 0,001786343 0,006455 0,589194 0,024664 0,006383 0,007842 0,011831 0,247427 0,004879 0,005271
0,001082109 0,113005959 0,00270199 0,001726 0,408331 0,047026 0,005144 0,002377 0,005957 0,388872 0,00459 0,019186
0,001425478 0,050727927 0,002099017 0,00305 0,445557 0,049317 0,009981 0,006512 0,023267 0,376622 0,003991 0,02745
0,001142162 0,114994892 0,004170626 0,005241 0,391644 0,054757 0,00698 0,003773 0,03299 0,366969 0,001169 0,016169
0,001408445 0,070071094 0,0037059 0,001803 0,545449 0,033232 0,014538 0,00299 0,020108 0,293629 0,003396 0,009671
0,000587528 0,133057781 0,002049963 0,001061 0,408128 0,007194 0,008239 0,001931 0,022962 0,405605 0,003859 0,005325
0,003348224 0,119845913 0,005250043 0,003578 0,409022 0,131615 0,031823 0,003054 0,028468 0,232814 0,008808 0,022374
0,001278047 0,154671088 0,001799677 0,002371 0,473489 0,020327 0,008365 0,002517 0,01275 0,315782 0,002896 0,003754
0,001159458 0,039984877 0,004500568 0,003735 0,476996 0,055493 0,008042 0,003197 0,019377 0,362517 0,003417 0,021582

Fonte: Autores (2021)

A Figura 18 mostra o exemplo de um gráfico do PCP para uma amostra do acorde de


Lá maior (A), a fim de proporcionar uma análise mais visual sobre como os dados se comportam
após o pré-processamento.

3
https://drive.google.com/file/d/1FEQgKn03532rb5RJYBbmNx633NoMg2RS/view?usp=sharing
Figura 18 - Gráfico de um acorde de Lá maior (A)por intensidade, gerado pelo PCP.

Gráfico de Acorde x intensidade

0.5
0.45
0.4
0.35
intensidade

0.3
0.25
0.2
0.15
0.1
0.05
0
C C# D D# E F F# G G# A A# B
Acorde

Fonte: Autores (2021)

5.2 Treinamento da RNA para Reconhecimento de Acordes


Foram realizados os treinamentos das quatro topologias, a fim de escolher a melhor
dentre elas para o projeto. Os resultados são mostrados na Tabela 9.

Tabela 9 - Valores de Acurácia e Erro para cada topologia na fase de treinamento.

Topologia Acurácia Erro


1 98,65 0,0117
2 90 0.0934
3 96 0,039
4 81 0,199

Fonte: Autores (2021)

A métrica utilizada foi a “Acurácia Categórica”, que calcula a porcentagem de predições


que são iguais aos valores reais para a codificação one-hot (ACCURACY, 2021). Em conjunto
com o treinamento, a Tabela 10 exibe os resultados obtidos, para cada topologia, com os dados
de validação com outros instrumentos.
Tabela 10 - Valores de Acurácia obtidos na fase de validação, utilizando outros instrumentos.

Topologia Acurácia Piano (%) Acurácia Violão (%) Acurácia Violino (%)
1 88 93 74
2 88 90 79
3 86 90 72
4 85 83 82

Fonte: Autores (2021)

Com base nos resultados obtidos, a topologia escolhida foi a 1 (12-30-10). Ressalta-se
que esta topologia já apresentou bons resultados no trabalho original de Rondón et al (2020) e
novamente apresenta neste trabalho as maiores taxas de acerto. A Figura 19 mostra a matriz de
confusão gerada pela topologia escolhida para o teste com X acordes gravados apenas com
violão.

Figura 19 - Matriz de confusão da topologia escolhida.

Fonte: Autores (2021)

Após os testes com a detecção de acordes, foram realizados experimentos com a RNA
para remoção dos vocais. Em tais testes, mediu-se a eficácia do sistema em músicas contendo
apenas voz e violão e músicas contendo voz e diversos instrumentos musicais. Para isso, foram
realizados testes com a música Imagine4 em duas versões: A original de 1971, interpretada pelo
músico John Lennon, e a versão voz e violão de 2020, interpretada pelo músico Caico Antunes.

5.3 Resultados dos Testes com a RNA para Remoção dos Vocais
Para fins de visualização, as Figura 20 a 22 exibem demonstram a ação da RNA para
remoção dos vocais com gráficos dos sinais do trecho de uma música contendo vocais e
instrumental, seguida de suas duas decomposições em um áudio contendo apenas instrumental
e outro contendo apenas vocais por unidade de tempo. Na Figura 20 se encontra o sinal de áudio
completo, na Figura 21 está o sinal já filtrado, com apenas o som instrumental e na Figura 22,
apenas o sinal de voz compõe o arquivo de áudio.

Figura 20 - Gráfico do Sinal de Áudio Completo x Tempo.

Fonte: Autores (2021)

4
Single de John Lennon do álbum Imagine. Apple Records, 1971. 3’03’’
Figura 21 - Gráfico do Sinal Instrumental x Tempo.

Fonte: Autores (2021)

Figura 22 - Gráfico do Sinal Vocal x Tempo.

Fonte: Autores (2021)

A aplicação da RNA para remoção dos vocais é uma das principais diferenças do nosso
sistema de reconhecimento de acordes em relação ao proposto por Randón et al.(2020). Os
resultados da RNA de Reconhecimento de acordes para uma perspectiva musical de Acurácia
e de Maior Subsequência Comum (LCS) para a comparação da versão original de 1971 da
canção Imagine do cantor John Lennon nesses dois sistemas são mostrados na Tabela 11.

Tabela 11 - Acurácia e LCS para a versão original (contendo múltiplos instrumentos) da canção Imagine

Sistema Acurácia (%) LCS (%)


Autores 77,78 78,89
Rondón et al. (2020) 71,11 72,22

Fonte: Autores (2021)


Na Tabela 12Tabela 11 são exibidos os resultados dos testes realizados para a
comparação da versão com apenas voz e violão da canção Imagine, interpretada pelo músico
Caico Antunes.

Tabela 12 - Acurácia e Semelhança LCS para a versão com apenas Voz e Violão da canção Imagine

Sistema Acurácia (%) Semelhança LCS (%)


Autores 90,10 90,10
Rondón et al. (2020) 83,17 86,14

Fonte: Autores (2021)

5.4 Análise do Tempo de Processamento


O tempo de processamento para a realização da transcrição também é um dado
relevante, visando à viabilidade da aplicação. Os testes foram realizados em um computador
com processador Intel® Core™ i5-8265U CPU @ 1.60GHz 1.80 GHz com 8GB de memória
RAM. A Tabela 13 mostra um comparativo entre os tempos de processamento do sistema
desenvolvido com o sistema do trabalho de Rondón et al. (2020).

Tabela 13 - Comparação entre tempo de duração das músicas e tempo de processamento

Música duração Tempo de processamento Tempo de processamento


(s) – Autores (s) - Rondón et al. (2020) (s)
Imagine (Original) 188 212 23
Imagine 202 247 24
(Voz e Violão)

Fonte: Autores (2021)


5.5 Discussão dos Resultados
Os resultados se comportaram como o esperado. Embora não utilizada nenhuma câmara
de isolamento acústico, os ruídos não interferiram de maneira significativa no resultado final
da grande maioria das notas, sendo elas classificadas de maneira correta pela análise gráfica.
Topologias mais robustas e com mais camadas intermediárias apresentaram resultados
piores, isso se dá provavelmente pelo problema de Overfitting (DA SILVA NUNES et al.,
2010). O Overfitting indica que a rede neural aprendeu de forma exagerada sobre os dados de
treinamento, decorando como se comportam os padrões apresentados durante a fase de
aprendizagem. Esse problema pode acontecer por algumas razões, como uma rede neural de
grande topologia para uma quantidade de dados limitada, o que apresenta baixo erro apenas
para os dados de treino, e um comportamento pior quando os dados são testados ou validados
(LAWRENCE, 2000), ou seja, não há generalização.
Os resultados da RNA para reconhecimento de acordes foram similares aos do trabalho
original (Rondón et al. 2020), o que comprova a consistência de ambos os projetos. A Tabela
14 compara os resultados utilizando a exatidão categórica, que avalia se a predição tem o valor
máximo no mesmo índice que o valor máximo do resultado esperado, obtidos na validação do
modelo obtido pelo grupo em comparação ao modelo original (RONDÓN et al. 2020).

Tabela 14 - Comparação dos resultados de validação com o trabalho original.

Trabalho original Trabalho atual


Instrumento Exatidão categórica Exatidão categórica
Violão 95.00% 93.00%
Piano 91.00% 88.00%
Violino 82.00% 79.00%

Fonte: Autores (2021)

De acordo com a Tabela 14, é possível notar que o modelo original obteve melhores
valores de acurácia. Esse resultado pode ser atribuído ao fato do projeto percursor utilizar
câmara de isolamento acústico, enquanto neste projeto todos os acordes foram gravados por um
microfone comum em um ambiente ruidoso. Embora haja essa diferença, o presente trabalho
obteve resultado satisfatório, com variação do acerto de menor que 3%.
Para algumas músicas, a RNA para reconhecimento de acordes não se comportou
adequadamente. Diversos fatores podem ter interferido nos resultados, como a qualidade do
áudio importada, devido a plataforma Youtube comprimir parte dos áudios de seus vídeos
(YOUTUBE HELP, 2021). Para cobrir isso, é recomendável a utilização da extração do áudio
em altas taxas de transferência de bit, porém, tais taxas tornam a utilização do projeto inviável
devido ao tamanho dos arquivos de áudio e o tempo necessário para manipulá-los. A
compressão de áudio pode interferir em algumas frequências que podem ser essenciais para que
a rede proposta possa fazer a distinção entre os acordes.
A RNA para remoção dos vocais atuou melhor em versões acústicas nas quais o cantor
utiliza apenas um violão. Dessa forma, o arquivo de áudio relativo aos instrumentos musicais é
apenas o de um violão, o que aproxima mais a rede de seus dados de treinamento. Já para uma
música com bateria, guitarra, baixo e teclado, o áudio dos instrumentos musicais terá a
contribuição de todos esses dispositivos simultaneamente, diminuindo a taxa de acerto da RNA
para reconhecimento de acordes de forma significativa. Isso ocorre porque nas RNAs, quanto
mais os dados de teste foram parecidos com os dados de treino, melhores serão os resultados, o
que justifica a obtenção de um erro menor quando apenas um cantor e um violão estão emitindo
frequências no áudio. Este problema, decorrente de quando a distribuição dos dados de treino
difere significativamente da distribuição dos dados de teste é chamado “Covariate shift”
(BICKEL et al. 2009).
Além disso, notou-se um problema que se perpetua desde o trabalho anterior, que é o
tamanho da janela para detecção os acordes no sinal de áudio. Através de testes, foi
demonstrado que, com uma janela fixada em 2 segundos, quando o ritmo da música é mudado
drasticamente, a detecção de acorde perde sua sincronização com o sinal, comprometendo o
processo.
Os tempos de processamentos apresentados na Tabela 13 demonstram que, apesar de
aumentar sua acurácia, o processo de remoção dos vocais demanda um tempo considerável no
processo de transcrição.
Os resultados também demonstraram que, apesar de apresentar uma menor acurácia e
LCS para os áudios que utilizam múltiplos instrumentos em comparação a áudios contendo
apenas o violão, as transcrições para essas músicas com múltiplos instrumentos ainda
apresentaram transcrições relativamente acuradas. Isso denota que a solução do algoritmo PCP,
em conjunto com as RNAs possui um nível de generalização suficiente para reconhecer acordes
em outros instrumentos musicais, mesmo tendo sido treinada apenas com o violão.
É importante destacar que as músicas utilizadas durante os testes possuíam outros
fatores diferentes além dos instrumentos musicais. Variáveis como a qualidade da gravação, o
timbre de voz do vocalista e o ritmo da música também são diferentes entre as duas versões de
“Imagine” testadas, podendo influenciar os resultados observados.
6 CONCLUSÃO
Este trabalho trouxe a proposta de solucionar alguns problemas encontrados em sistemas
de transcrição automática de acordes musicais. Na literatura é possível identificar uma
dificuldade geral na identificação de acordes musicais em arquivos de áudio que contenham,
além dos instrumentos musicais, os vocais da canção. A solução proposta para este problema é
a de realizar a remoção dos vocais do áudio antes que ele seja processado pelo sistema de
reconhecimento de acordes. sendo este processo de remoção realizado por meio de uma RNA.
Dessa forma, buscou-se a otimização da detecção de acordes musicais em áudios em que
possuam os vocais dos cantores simultaneamente com instrumentos músicas, em especial
violões.

Foi também desenvolvida uma Aplicação Web para facilitar a utilização do sistema pelo
usuário. A aplicação se mostrou uma forma visual e interativa de apresentação dos acordes
transcritos, de forma sincronizada com as músicas e indicando a duração de cada acorde,
levando o foco do trabalho para a resolução de um problema conhecido, para uma experiência
direta do usuário, interagindo visualmente com os acordes tocados, sincronizados com a música
escolhida pelo vídeo introduzido por ele.

Em conjunto com esses objetivos, teve-se a meta de realizar testes e comparações com
o trabalho de Rondón et al. (2020) que detectava notas de violão para arquivos de áudio. O
grupo gerou um banco de dados similar ao desse trabalho, além de utilizar parâmetros também
semelhantes, verificando a aplicabilidade do projeto.

O banco de dados foi gerado com sucesso pelos integrantes do grupo, que exceto pelo
fato de não possuírem câmaras de isolamento acústico, foram fiéis aos modos de gravação do
projeto inicial. Os modelos foram treinados com base nos dados novos, concluindo que a
topologia escolhida no trabalho anterior é a mais adequada também para os novos dados.

A RNA para remoção de vocais conseguiu separar a voz do violão de maneira


satisfatória. Os sinais são extraídos do áudio completo e, logo em seguida, o áudio com os
vocais é descartado, enquanto o de instrumentos é utilizado como entrada na RNA de
reconhecimento de acordes, formando um só algoritmo.
Como um dos objetivos do trabalho, foi comparada a eficácia do trabalho original de
detecção de acordes com este trabalho, que utiliza a filtragem do áudio antes da detecção.
Notou-se melhora significativa na acurácia do projeto, que foi de aproximadamente 71% para
78% na versão com múltiplos instrumentos e de 83% para 90% na versão com apenas voz e
violão. Já no LCS a melhora foi de 72% e 79% para a versão com múltiplos instrumentos e de
86% para 90% na versão com apenas voz e violão. Esse aumento da acurácia se dá pelo fato de
que o projeto anterior faz a detecção da harmonia em arquivos que contêm diversos
instrumentos e vocais, enquanto neste trabalho, apenas os instrumentos são detectados,
descartando-se o sinal de voz.

Quanto ao tempo de processamento, verificou-se um aumento de aproximadamente 10


vezes com a implementação da RNA para remoção dos vocais em relação ao sistema que não
adota esse algoritmo. A depender da aplicação é preciso avaliar se o aumento da demanda de
processamento é justificável pelo ganho de acurácia obtido.

Para trabalhos futuros, é recomendável a inclusão de amostras de treinamento para


outros instrumentos musicais, não apenas o violão, além de aumentar a variedade de acordes
que possam ser detectados, deixando o sistema mais completo. Além disso, um trabalho que
pode melhorar o sistema significativamente é a implementação de uma lógica para a adoção de
janelas de duração variável, de modo que a duração dos segmentos de áudio a serem
reconhecidos pela rede se alterem conforme o andamento da música a ser transcrita. Assim, a
variedade de músicas possíveis para transcrição aumentará, o que possibilitará uma melhor taxa
de acertos das transcrições realizadas pelo modelo para detecção de acordes em músicas de
ritmos distintos.
7 REFERÊNCIAS

ABRAHAM, Ajith. Artificial neural networks. Handbook of measuring system design, 2005.

ACCURACY metrics. [S. l.], 30 set. 2021. Disponível em:


https://keras.io/api/metrics/accuracy_metrics/. Acesso em: 30 set. 2021.

ANTUNES, Caico. IMAGINE - John Lennon (aula simplificada) | Como tocar no violão.
Youtube, 04 jun. 2020. Disponível em: <https://www.youtube.com/watch?v=Yu_XsTeYaJk>.
Acesso em: 15 set. 2021.

APOSTOLICO, Alberto; GUERRA, Concettina. The longest common subsequence problem


revisited. Algorithmica, v. 2, n. 1, p. 315-336, 1987.

BARBANCHO, Ana M. et al. Automatic transcription of guitar chords and fingering from
audio. IEEE Transactions on Audio, Speech, and Language Processing, v. 20, n. 3, p. 915-
921, 2011.

BICKEL, Steffen; BRÜCKNER, Michael; SCHEFFER, Tobias. Discriminative learning under


covariate shift. Journal of Machine Learning Research, v. 10, n. 9, 2009.

BINGHAM, Fabrice et al. ffmpeg Documentation. [S. l.], 20 dez. 2000. Disponível em:
https://ffmpeg.org/ffmpeg.html. Acesso em: 30 set. 2021.

BITTNER, Rachel; HUMPHREY, Eric; BELLO, Juan. Pysox: Leveraging the audio signal
processing power of sox in python. In: Proceedings of the International Society for Music
Information Retrieval Conference Late Breaking and Demo Papers. 2016.

BORGES, Luiz Eduardo. Python para desenvolvedores: aborda Python 3.3. Novatec
Editora, 2014.

CASTEL-BRANCO, Gonçalo Ferreira Ferrão. Identificação de Instrumentos Musicais em


Música Polifónica. 2019. Tese de Doutorado. Universidade de Coimbra.
CifraClub. Disponível em: <https://www.cifraclub.com.br>. Acesso em: 20 Set. 2020

CRUZ, Fernando William. Necessidades de Informação Musical de Usuários Não


Especializados. 2008. 325 p. Tese (Doutorado) - Faculdade de Economia, Administração,
Contabilidade e Ciência da Informação da Universidade de Brasília, Brasília/DF, 2008.

CYBENKO, George. Approximation by superpositions of a sigmoidal function. Mathematics


of control, signals and systems, v. 2, n. 4, p. 303-314, 1989.

DA COSTA, Ennio Cruz. Acústica técnica. Editora Blucher, 2003.

DA SILVA ASSIS, Lucas. O uso de uma Rede Neural Artificial Supervisionada para obtenção
do fator de carga de um alimentador. Universidade Federal de Goiás. 2015.

DA SILVA NUNES, Ivan ; SPATTI, Danilo Hernane; FLAUZINO, Rogério Andrade. Redes
neurais artificiais para engenharia e ciências aplicadas-curso prático. São Paulo: Artliber,
2010.

DAVIS, Doug. Adventures in Physics. Eastern Illinois University. 2003. Disponível em


<https://ux1.eiu.edu/~cfadd/3050/> Acesso em 20 jul. 2021.

DE JESUS, Willsander. Identificação e Classificação de Acordes Musicais aplicando a


Transformada de Fourier. Revista de Matemática, v. 1, 2020.

DE OLIVEIRA, Prabhát Kumar. Classificação de Eletrocardiograma utilizando Redes Neurais.

DEZA, Michel Marie; DEZA, Elena. Encyclopedia of distances. In: Encyclopedia of


distances. Springer, Berlin, Heidelberg, 2009. p. 1-583.

DWYER, Gareth. Flask by Example. 1. [S. l.], 2016.

FERREIRA, Alessandro dos Santos. Redes neurais convolucionais profundas na detecçao de


plantas daninhas em lavoura de soja. 2017.

FFmpeg. Disponível em: <https://www.ffmpeg.org//>. Acesso em: 6 ago. 2020


FUJISHIMA, Takuya. Real-time chord recognition of musical sound: A system using common
lisp music. Proc. ICMC, Oct. 1999, p. 464-467, 1999.

GRINBERG, Miguel. Flask Web Development. 2. [S. l.], 2018.

GUIMARÃES, Alaine Margarete et al. Módulo de validação cruzada para treinamento de redes
neurais artificiais com algoritmos backpropagation e resilient propagation. Publicatio UEPG:
Ciências Exatas e da Terra, Agrárias e Engenharias, v. 14, n. 01, 2008.

HAAS, W. Bas. Music information retrieval based on tonal harmony. 2012. Tese de
Doutorado. Utrecht University

HECHT-NIELSEN, Robert. Theory of the backpropagation neural network. In: Neural


networks for perception. Academic Press, 1992. p. 65-93.

HERRERA-BOYER, Perfecto; PEETERS, Geoffroy; DUBNOV, Shlomo. Automatic


classification of musical instrument sounds. Journal of New Music Research, v. 32, n. 1, p.
3-21, 2003.

KASSLER, Michael. Toward musical information retrieval. Perspectives of New Music, p.


59-67, 1966.

KOVÁCS, Zsolt László. Redes neurais artificiais: fundamentos e aplicacoes. [S.l: s.n.], 1996.

LAWRENCE, Steve; GILES, C. Lee. Overfitting and neural networks: conjugate gradient and
backpropagation. In: Proceedings of the IEEE-INNS-ENNS International Joint Conference
on Neural Networks. IJCNN 2000. Neural Computing: New Challenges and Perspectives
for the New Millennium. IEEE, 2000. p. 114-119.

LENNON, John. Imagine (Remastered 2010). Youtube, 03 mai. 2017. Disponível em:
<https://www.youtube.com/watch?v=rAn-AWXtHv0>. Acesso em: 15 set. 2021.

LUDWIG-MAYERHOFER, Wolfgang. ILMES-Internet-Lexikon der Methoden der


empirischen Sozialforschung. 2004.
MED, Bohumil. Teoria da música. Brasília: Musimed, 1996.

MOTTOLA, L. Table of Musical Notes and Their Frequencies and Wavelengths. Lutherie
Information Website for builders of stringed musical instruments. Retrieved, v. 21, p. 29,
2020.

MOUTINHO, Adriano Martins; NETO, Luiz Biondi. Métodos de Pré-Processamento de Sinais


Aplicados ao Treinamento de Redes Neurais Artificiais. In: II Congresso Brasileiro de
Computação, Universidade do Vale do Itajaí-Univale, Sata Catarina. 2002.

NETO, José Pedro de Santana. Solução Computacional para Reconhecimento de


Harmonias Musicais. 2015. Trabalho de Conclusão de Curso (Graduação - Engenharia de
Software) - UNB, [S. l.], 2015.

OGASAWARA, Angélica Soares et al. Reconhecedor de notas musicais em sons


polifônicos. Trabalho de Conclusao de Curso, Graduacao em Engenharia Eletrica.
Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2008.

OLIVEIRA, Renata et al. Redes neurais convolucionais aplicadas à preensão robótica.


In: Anais do 13 Congresso Brasileiro de Inteligência Computacional. Curitiba, PR:
ABRICOM, 2017. p. 1-11

OPPENHEIM, Alan V.; SCHAFER, Ronald W. Processamento em tempo discreto de


sinais. Tradução Daniel Vieira. 3ª ed.-São Paulo: Pearson Education do Brasil, 2012.

OSMALSKY, Julien et al. Neural networks for musical chords recognition. In: Journées
d'informatique musicale. 2012. p. 39-46.

OSORIO, Jimy Alexander Cortes; KNOTT, Andrew M.; OSORIO, José Andrés Chaves.
Aproximación a la síntesis de la música a través del análisis de fourier. Scientia et technica, v.
1, n. 52, p. 129-135, 2012.

PAOLI, Antônio Roberto. Um Estudo Avançado do Problema da Maior Subsequência


Comum. 2016. Monografia (Bacharelado em em Ciência da Computação) — Universidade
Federal da Bahia, Bahia, 2016.
PURVES, Dale et al. The Auditory System. In: NEUROSCIENCE. 3. ed. Sunderland, MA
USA: Sinauer Associates, 2004. cap. 12, p. 303-334.

Python Audio Converter. Disponível em: <https://pypi.org/project/AudioConverter/>.


Acesso em: 6 ago. 2020

RAMOS, João Víctor et al. Diferentes abordagens evolutivas aplicadas no processo de


transcrição automática de partituras musicais em tablaturas. 2015. Dissertação de
Mestrado. Universidade Tecnológica Federal do Paraná.

RONDÓN, Andrés; RUERDA, Camilo; ROJAS, Iván. Redes neuronales aplicadas en la


detección de acordes de guitarra acústica. 05/05/2020. Disponível em
<https://github.com/amrondonp/Chords.py/blob/master/paper.pdf> Acesso em 27 fev. 2021

ROSSING, Thomas D.; STUMPF, Folden B. The science of sound. American Journal of
Physics, v. 50, n. 10, p. 955-955, 1982.

SALAMON, Justin; GÓMEZ, Emilia. Melody extraction from polyphonic music signals using
pitch contour characteristics. IEEE Transactions on Audio, Speech, and Language
Processing, v. 20, n. 6, p. 1759-1770, 2012.

SANTANA NETO, José Pedro de. Solução computacional para reconhecimento de harmonias
musicais. 2015. 116 f., il. Monografia (Bacharelado em Engenharia de Software) Universidade
de Brasília, Brasília, 2015.

SANTIAGO, Cynthia Pinheiro et al. Desenvolvimento de sistemas Web orientado a reuso com
Python, Django e Bootstrap. Sociedade Brasileira de Computação, 2020.

SANTOS, Alan et al. Uma abordagem de classificação de imagens dermatoscópicas utilizando


aprendizado profundo com redes neurais convolucionais. In: Anais do XVII Workshop de
Informática Médica. SBC, 2017.

SCALVENZI, Rafael Rubiati. Classificação inteligente de sinais musicais utilizando a


transformada Wavelet-Packet. 2018.
SEBESTA, Robert W. Concepts of programming languages. Pearson Education India, 2004.

SHEH, Alexander; ELLIS, Daniel PW. Chord segmentation and recognition using EM-trained
hidden Markov models. 2003.

SOX. Disponível em: < https://pypi.org/project/sox/>. Acesso em: 6 ago. 2020

SUMMERFIELD, Mark. Programming in Python 3: a complete introduction to the Python


language. Addison-Wesley Professional, 2010.

TAKAHASHI, Naoya; MITSUFUJI, Yuki. Multi-scale multi-band densenets for audio source
separation. In: 2017 IEEE Workshop on Applications of Signal Processing to Audio and
Acoustics (WASPAA). IEEE, 2017. p. 21-25.

TANGUIANE, Andranick S. Artificial perception and music recognition. Berlin: Springer-


Verlag, 1993.

Urlib. Disponível em: < https://docs.python.org/3/library/urllib.html>. Acesso em: 6 ago. 2020

VAN PROOIJEN, Kees. A theory of equal‐tempered scales. Journal of New Music Research,
v. 7, n. 1, p. 45-56, 1978

WAV File Extension. [S. l.], 3 maios 2021. Disponível em


<https://fileinfo.com/extension/wav>. Acesso em: 30 ago. 2021

WHIBLEY, Simon et al. WAV Format Preservation Assessment. 2016.

WU, Jianxin. Introduction to convolutional neural networks. National Key Lab for Novel
Software Technology. Nanjing University. China, v. 5, n. 23, p. 495, 2017.

YouTube. Disponível em: <youtube.com>. Acesso em: 14 ago. 2020

YouTube API. Disponível em: < https://developers.google.com/youtube>. Acesso em: 14 ago.


2020
Youtube Help. Recommended Upload Encoding Settings.. Disponível em
<https://support.google.com/youtube/answer/1722171?hl=en&topic=2888648&ctx=topic>
Acesso em: 30 set. 2021.

ZAMBIASI, Saulo Popov. Arquitetura das Redes Neurais. [S. l.], 2010. Disponível em:
https://www.gsigma.ufsc.br/~popov/aulas/rna/arquitetura/. Acesso em: 26 ago. 2021.

ZAPATA, Jose Ricardo et al. Assigning a confidence threshold on automatic beat annotation
in large datasets. In: 13th International Society for Music Information Retrieval
Conference, 08/10/2012, Porto, Portugal. 2012. p. 157-162.

ZHANG, Lisa. Convolutional Neural Networks. Computer Science University of Toronto.


Disponível em <https://www.cs.toronto.edu/~lczhang/360/lec/w04/convnet.html> Acesso em:
09 Ago. 2021
APÊNDICE A – ESTRUTURA DE ARQUIVOS DA APLICAÇÃO WEB
DESENVOLVIDA

ChordsWebApp
├───app
│ ├───blueprints
│ │ └───__init__.py
│ │ └───functions.py
│ │ └───views.py
│ ├───static
│ │ ├───css
│ │ │ └───styles.css
│ │ └───images
│ │ ├───guitar_icon_white.ico
│ │ ├─── guitar_icon_white.png
│ │ └───if_logo_horizontal.png
│ ├───templates
│ │ ├───base.html
│ │ └───home.html
│ │ └───video.html
├───chords
│ ├───models
│ ├───neural_network
│ ├───preprocessing
│ └───util
├───model
│ └───ivector
└───vocal-remover-master
├───.ipynb_checkpoints
├───appendix
├───lib
└───models
APÊNDICE B – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA – APP.PY

from flask import Flask


from app.ext import configuration
from app.blueprints import views

app = Flask(__name__)
configuration.init_app(app)
views.init_app(app)

if (__name__ == '__main__'):
app.run()
APÊNDICE C – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA – VIEWS.PY
from flask import Flask, render_template, request
from app.blueprints.functions import *
import os
import youtube_dl

def init_app(app):

@app.route('/')
def index():
return render_template("home.html")

@app.route('/video', methods=['GET', 'POST'])


def video():
return render_template("video.html")

@app.route('/extract', methods=['GET', 'POST'])


def extract():

try:
os.remove('D:/GitHub/ChordsWebApp/app/static/audio.wav')
except:
print ("File not found")

link = request.form['musicName']

'''
#Extrai musica do YouTube
baixaYoutube(link)

#Separa Instrumental dos Vocais


separaVocais()

#Transcreve o acompanhamento
chordsTranscreve()
'''

#Link
linkid= get_id(link)
print("ID do Video = ", linkid)

#Formata os acordes para exibição


os.chdir('D:/GitHub/ChordsWebApp')

arquivotxt = open ('chords.txt','r')


arquivotxt = arquivotxt.read()
arquivotxt = arquivotxt.rstrip('\n')
dicAcordes = arquivotxt.split(' ')

acordesUnicos = []
listaBinaria = []
for i in range (len(dicAcordes)-1):
if dicAcordes[i] != dicAcordes[i+1]:
dicAcordes[i] = dicAcordes[i].capitalize()
acordesUnicos.append(dicAcordes[i])
listaBinaria.append('1')
else:
listaBinaria.append('0')

#O ultimo acorde sempre entra


dicAcordes[len(dicAcordes)-1] = dicAcordes[len(dicAcordes)-1].capitalize()
acordesUnicos.append(dicAcordes[len(dicAcordes)-1])

#Primeiras e ultimas posicoes como espaços em branco


acordesUnicos.insert(0,' ')
acordesUnicos.append(' ')

p=0
tam=len(dicAcordes)
print ("Dicionario de acordes: ", dicAcordes)
print ("Acordes Unicos: ", acordesUnicos )
print ("Lista Binaria: ", listaBinaria)

return render_template("video.html", linkid=linkid, listaBinaria=listaBinaria, tam=tam, acordesUnicos=acordesUnicos, p=p)


APÊNDICE D – PROGRAMA DA APLICAÇÃO WEB DESENVOLVIDA –
FUNCTIONS.PY
from urllib.parse import urlparse, parse_qs
import youtube_dl
import os
import pac

# Funções
def baixaYoutube(link):
print("Baixando do youtube...")

#Baixa a música a partir do Youtube ID


ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'wav',
'preferredquality': '192',
}],
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:


info_dict = ydl.extract_info(link, download=False)
video_title = info_dict.get('title', None)

path = f'D:/GitHub/ChordsWebApp/app/static/audio.wav'

ydl_opts.update({'outtmpl':path})

with youtube_dl.YoutubeDL(ydl_opts) as ydl:


ydl.download([link])

def separaVocais():
#Separa Instrumental dos Vocais
os.chdir("D:/GitHub/ChordsWebApp/vocal-remover-master/")
os.system("python inference.py --input D:/GitHub/ChordsWebApp/app/static/audio.wav")
print("parou!!!")
print("Vocais separados!")
os.replace("D:/GitHub/ChordsWebApp/vocal-remover-
master/audio_Instruments.wav", "D:/GitHub/ChordsWebApp/audio_Instruments.wav")
os.replace("D:/GitHub/ChordsWebApp/vocal-remover-master/audio_Vocals.wav", "D:/GitHub/ChordsWebApp/audio_Vocals.wav")
os.chdir("D:/GitHub/ChordsWebApp")

def chordsTranscreve():
os.chdir("D:/GitHub/ChordsWebApp/")
#Converte a taxa de amostragem do áudio para 16Kb mono
pac.convert_wav_to_16bit_mono("D:/GitHub/ChordsWebApp/audio_Instruments.wav", "D:/GitHub/ChordsWebApp/audio_Instruments.
wav")
os.chdir("chords")
os.system("python split.py D:/GitHub/ChordsWebApp/audio_Instruments.wav")
os.replace("chords.txt", "D:/GitHub/ChordsWebApp/chords.txt")

def get_id(url):
u_pars = urlparse(url)
quer_v = parse_qs(u_pars.query).get('v')
if quer_v:
return quer_v[0]
pth = u_pars.path.split('/')
if pth:
return pth[-1]
APÊNDICE E – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB
DESENVOLVIDA – BASE.HTML

<!doctype html>
<html lang="pt-br">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!-- Icon -->


<link rel="icon" href="{{ url_for('static', filename = 'images/guitar_icon_white.ico') }}" type="image/png">

<!-- Bootstrap CSS -->


<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-
9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

<!-- CSS -->


<link rel="stylesheet" href="static/css/styles.css">

<!-- JS -->

<title>{% block title %}Transcrição Musical{% endblock %}</title>


</head>

<body class="Frame">
<header class="Row">
<nav class="navbar navbar-expand-lg navbar-dark">
<a class="navbar-
brand" href="/"><img id="logo" src="/static/images/guitar_icon_white.png">Inteligência Artificial Aplicada à Transcrição de Acordes de Vi
olão</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-
expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">

{% block navbar %}
{% endblock %}

</ul>
</div>
</nav>

{% with messages = get_flashed_messages() %}


{% if messages %}
<div class="alert alert-warning">
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endwith %}

</header>

<main>
{% block content %}
{% endblock %}
</main>

<footer class="Row Expand">


<div class="container">
<div class="row">
<div class="col-md-6">
<span>Engenharia Eletrônica
<br />
Desenvolvido Por:
<br>
Alan Belem Santos
<br>
Fernandes Luiz Figueredo
<br>
Igor Fernandes Moura
<br/>
Orientador: Miguel Angelo de Abreu de Sousa
</div>
<div class="col-md-6">
<img id="logo-if" src="static/images/if_logo_horizontal.png" alt="IFSP">
</div>
</div>
</div>
</footer>

<!-- Optional JavaScript -->


<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-
DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-
Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-
OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
APÊNDICE F – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB
DESENVOLVIDA – HOME.HTML

{% extends 'base.html '%}

{% block navbar %}
{% endblock %}

{% block content %}
<form action="{{url_for('extract')}}" id="transcreve-musica" method="POST">
<div class="container">
<div class="jumbotron" id="texto-inicial">
<h1 class="display-4">Insira a URL do YouTube:</h1>
<hr class="my-4">

<div class="col-4">

</br>
</br>

<input type="text" class="form-control form-control-


lg" name="musicName" id="inputsongname" placeholder="URL do Vídeo do YouTube">
</br>

</div>

</br>
<button class="btn btn-primary btn-lg" type="submit" href="/acordes" target="_blank" role="button">Transcrever</button>
</div>
</div>

</form>

{% endblock %}
APÊNDICE G – SCRIPTS DOS TEMPLATES DA APLICAÇÃO WEB
DESENVOLVIDA – VIDEO.HTML
{% extends 'base.html '%}

{% block navbar %}
{% endblock %}

{% block content %}
<div class="container">
<div class="jumbotron" id="texto-inicial">
<h1 class="display-4">Transcrição: </h1>
<hr class="my-4">

<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="player">
</div>

<script>
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// 3. This function creates an <iframe> (and YouTube player)


// after the API code downloads.

linkID = link

var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '360',
width: '640',
videoId: '{{linkid}}',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
})
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
event.target.playVideo();
console.log('currentTime:', player.getCurrentTime())
}

// 5. The API calls this function when the player's state changes.
// The function indicates that when playing a video (state=1),
// the player should play for six seconds and then stop.
function onPlayerStateChange(event) {
binarylist={{listaBinaria|tojson}}
uniquechords={{acordesUnicos|tojson}}
if(event.data==1) { // playing
myTimer = setInterval(function(){
var time;
time = player.getCurrentTime();
$("#timeHolder").text(time);
console.log(time);

j=0
for (var i = 0; i<{{tam}}; i++)
{
i2 = Math.trunc(time/2)

if (binarylist[i2]==1){
if (Math.trunc(time)%2 == 1){
document.getElementById('duracaobar').innerHTML = '0';
document.getElementById('duracaobar').style["width"]="0%";
}

else {
document.getElementById('duracaobar').innerHTML = '1';
document.getElementById('duracaobar').style["width"]="12%";
}

else if (binarylist[i2]==0 && binarylist[i2+1]==1){


if (Math.trunc(time)%2 == 1){
document.getElementById('duracaobar').innerHTML = '2';
document.getElementById('duracaobar').style["width"]="24%";
}

else {
document.getElementById('duracaobar').innerHTML = '3';
document.getElementById('duracaobar').style["width"]="36%";
}
}
else if (binarylist[i2]==0 && binarylist[i2+1]==0 && binarylist[i2+2]==1){
if (Math.trunc(time)%2 == 1){
document.getElementById('duracaobar').innerHTML = '4';
document.getElementById('duracaobar').style["width"]="48%";
}

else {
document.getElementById('duracaobar').innerHTML = '5';
document.getElementById('duracaobar').style["width"]="60%";
}
}

else if (binarylist[i2]==0 && binarylist[i2+1]==0 && binarylist[i2+2]==0){


if (Math.trunc(time)%2 == 1){
document.getElementById('duracaobar').innerHTML = '6';
document.getElementById('duracaobar').style["width"]="75%";
}

else {
document.getElementById('duracaobar').innerHTML = '+6';
document.getElementById('duracaobar').style["width"]="100%";
}
}

if (time>2*i && time<2*(i+1))


{
document.getElementById('Aesquerdo').innerHTML = uniquechords[j];
document.getElementById('Acentral').innerHTML = uniquechords[j+1];
document.getElementById('Adireito').innerHTML = uniquechords[j+2];
}

if (binarylist[i]!=0){
j=j+1
}

},
100);

}
else { // not playing
clearInterval(myTimer);
}
}
</script>

<br>
<br>
<br>

<div class="row">
<div class="col-sm">
<h1 class="h2 font-weight-bold" id="Aesquerdo"></h1>

</div>
<div class="col-sm-3">
<h1 class="display-2 text-center font-weight-bold p-3 mb-4 bg-danger text-black" id="Acentral"><storng></storng></h1>
</div>
<div class="col-sm">
<h1 class="h2 text-right font-weight-bold" id="Adireito"></h1>
</div>
</div>

<br>
<h1>duração: </h1>
<div class="progress" style="height: 32px;">
<h4 class="progress-bar" role="progressbar" style="width: 50%" aria-valuenow="75" aria-valuemin="0" aria-
valuemax="100" id="duracaobar">2</h4>
</div>

</div>

</div>

<br>
</div>

{% endblock %}

Você também pode gostar