73
UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO EXTRAÇÃO DE CONHECIMENTO MUSICAL A PARTIR DE EXECUÇÕES VIOLONÍSTICAS TRABALHO DE GRADUAÇÃO Aluno: Alexandre Sarmento Alves de Sá ([email protected])

Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

UNIVERSIDADE FEDERAL DE PERNAMBUCOCENTRO DE INFORMÁTICA

GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

EXTRAÇÃO DE CONHECIMENTO MUSICALA PARTIR DE EXECUÇÕES VIOLONÍSTICAS

TRABALHO DE GRADUAÇÃO

Aluno: Alexandre Sarmento Alves de Sá ([email protected])Orientadora: Patrícia Cabral de Azevedo Restelli Tedesco ([email protected])

Recife, 13 de Fevereiro de 2006.

Page 2: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

AgradecimentosAgradeço à minha mãe Iara Sarmento, por todo seu amor e pela

boa formação que tive, e à minha namorada Fabiana Magalhães, pelo amor, carinho, e, principalmente, pela paciência e compreensão.

À minha orientadora Patrícia, pela compreensão, apoio e orientação, fundamentais para a realização deste trabalho.

Agradeço a todo o pessoal da D’Accord, em especial, Américo Amorim, pela imensa compreensão nos momentos em que precisei dar prioridade a este trabalho, e Hugo Santana, por ser tão prestativo com o seu vasto conhecimento em computação musical.

Gostaria de agradecer ao Centro de Informática e à UFPE (professores e funcionários) por alicerçarem minha construção profissional, e aos grandes irmãos que lá dentro a vida me deu, pois eles foram fundamentais para a minha construção pessoal, a saber: Diogo Alves, Jarbas Jacome, Gandhi (Cleiton Márcio), Chicão (Francisco Valadares), Magão (Arlei Calazans), Zumbi (Marcos Pereira), Dedeco (André Dantas), Capial (Tiago Sampaio), Adonay (José Thiago Rolim), Bárbara Siqueira, Cabelinho (Eduardo Vinícius), Eduardo Mazza, Marcos Cardoso, Nara Falcão, Daniel Thiago, Jayro Januário, Eudes Raphael, Gato Mestre (Bruno Bourbon) e Clylton Galamba.

Gostaria de agradecer também a Márcio Dahia e a Ernesto Trajano por serem tão prestativos quando precisei.

-I-

Page 3: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

ResumoO D’Accord Violão Player é um Sistema de Simulação

Instrumental que foi desenvolvido especialmente para ensinar a tocar violão e guitarra. Sua proposta de ensino consiste em reproduzir músicas em um braço virtual de violão, enquanto o aluno-usuário observa e repete em seu violão real, aprendendo assim por imitação. Um fator até então crítico para tornar essa solução aplicável em larga escala é o processo de criação das músicas, que hoje necessita da entrada manual e detalhada de todas as informações contidas nela contidas, tornando o trabalho falho e improdutivo. Este projeto apresenta uma abordagem inovadora e semi-automática para o processo de criação dessas músicas. O sistema proposto substitui as inúmeras telas e componentes do sistema de edição antigo, por um novo sistema capaz de extrair de um violão MIDI (Musical Instrument Digital Interface) todo o conhecimento musical necessário para a criação de uma música, dando mais liberdade ao músico e reduzindo significativamente o tempo de edição.

-II-

Page 4: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Sumário

Agradecimentos...........................................................................................................I

Resumo..........................................................................................................................II

Sumário........................................................................................................................III

Índice de Figuras........................................................................................................V

Índice de Tabelas....................................................................................................VII

Índice de Tabelas....................................................................................................VII

Índice de Equações...............................................................................................VIII

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

2. Natureza do Problema.........................................................................................4

2.1 O que é uma performance violonística?..................................................................4

2.2 O D’Accord Violão Player......................................................................................6

2.2.1 Formato de representação musical...................................................................7

2.2 Extração do conhecimento......................................................................................8

2.2.1 A melodia de uma performance violonística..................................................12

2.2.2 Extração dos ritmos........................................................................................13

2.2.3 Extração dos acordes......................................................................................15

2.2.4 Extração do dedilhado....................................................................................17

2.3 Utilização do conhecimento..................................................................................18

3. Estado da Arte.......................................................................................................20

3.1 Extração dos padrões rítmicos...............................................................................20

3.1.1 Flexible Extraction of Patterns: FlExPat........................................................21

3.2 Geração do dedilhado............................................................................................25

3.2.1 Mão esquerda..................................................................................................26

3.2.2 Mão direita......................................................................................................30

4. O sistema proposto: D’Accord Recognizer.................................................32

4.1 Arquitetura.............................................................................................................32

4.2 Módulo de Gravação e Execução..........................................................................35

4.2.1 Metrônomo (Seqüenciador)............................................................................36

4.2.2 Infra-estrutura de MIDI..................................................................................38

-III-

Page 5: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

4.2.3 Gravação (eventos MIDI)...............................................................................39

4.2.4 Execução (playback e reprodução).................................................................39

4.3 Módulo de Edição..................................................................................................40

4.3.1 Conversão de melodia....................................................................................42

4.3.2 Gerador de Dedilhado.....................................................................................42

4.3.3 Extrator de Padrões......................................................................................43

4.3.4 Identificador de Acordes................................................................................44

5. Conclusões e Trabalhos Futuros....................................................................45

6. Referências............................................................................................................46

Apêndice A – Algoritmo de conversão de melodia polifônica de múltiplas vozes em melodia polifônica de voz simples.............................48

-IV-

Page 6: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Índice de FigurasFigura 1 - Disposição esquemática de quatro eventos MIDI............................................5

Figura 2 - A tela principal do D’Accord Violão Player e seus principais elementos.......6

Figura 3 - Rótulos dos dedos da mão esquerda e direita..................................................6

Figura 4 - Representação de um ritmo (a) e de um acorde (b).........................................7

Figura 5 - Processo de criação de uma música no D’Accord Violão Editor....................9

Figura 6 - Processo de criação de uma música no sistema proposto..............................11

Figura 7 - Melodias monofônica (a) e polifônica (b)......................................................12

Figura 8 - Melodia polifônica de múltiplas vozes..........................................................13

Figura 9 – Representação em partitura de três fragmentos musicais..............................15

Figura 10 – Restrição no uso dos dedos em melodias polifônicas de múltiplas vozes...18

Figura 11 - Cálculo da similaridade entre dois fragmentos no FlExPat.........................23

Figura 12 - Subgrafo estrela construído na etapa de comparação do FlExPat...............24

Figura 13 - Algoritmo da fase de classificação do FlExPat............................................25

Figura 14 - Topologia do grafo construído para a geração do dedilhado.......................27

Figura 15 - Grafo gerado a partir de um fragmento de seqüência musical.....................28

Figura 16 - Tabela para cálculo do esforço horizontal entre o indicador e o anelar.......29

Figura 17 – Exemplo de posicionamento da mão direita................................................30

Figura 18 - Padrão de projeto Fachada...........................................................................32

Figura 19 - Padrão de projeto Singleton (UML).............................................................33

Figura 20 - Arquitetura do sistema.................................................................................33

Figura 21 - Fluxo da informação no processo de criação da música..............................34

Figura 22 - Modelagem (a) e funcionamento (b) do sistema de notificação..................36

Figura 23 - Diagrama de classes do Metrônomo............................................................37

Figura 24 - Diagrama de classes dos componentes de MIDI (captura e reprodução).. . .38

Figura 25 - Especificação do gerenciador de Gravação e do filtro de entrada dos

eventos.............................................................................................................................39

Figura 26 – Especificação do seqüenciamento músical..................................................40

Figura 27 - Representação da performance violonística (como uma melodia polifônica

de voz simples)................................................................................................................41

Figura 28 - Visão geral dos componentes de edição......................................................41

Figura 29 - Localização de acordes em melodias polifônicas de múltiplas vozes.........42

Figura 30 - Modelagem dos algoritmos de geração de dedilhado..................................43

-V-

Page 7: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 31 - Modelagem da extração de padrões.............................................................43

Figura 32 - Modelagem do algoritmo de identificação de acordes.................................44

Figura 33 - Obtenção da informação harmônica e da cifra.............................................44

-VI-

Page 8: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Índice de Tabelas

Tabela 1 - Análise comparativa dos algoritmos de extração de padrões........................20

-VII-

Page 9: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Índice de Equações

Equação 1 - Cálculo indutivo das similaridades entre dois fragmentos.........................23

Equação 2 - Equação para cálculo do peso entre duas posições de dedilhado...............28

-VIII-

Page 10: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

1. IntroduçãoSistemas de Simulação Instrumental (Instrumental Performance

Systems – IPS) têm como propósito o ensino de instrumentos musicais. A metodologia de ensino desses sistemas consiste em exibir performances musicais em um instrumento virtual simulado em computador. Assim, o aluno pode, por imitação, aprender a tocar o instrumento desejado de forma mais fácil do que com os métodos eruditos, como partituras, e de forma mais completa do que com os métodos mais populares, como cifras1 e tablaturas2 [Cabral, 2001a].

O D’Accord Violão Player é um Sistema de Simulação Instrumental que foi concebido no Centro de Informática da UFPE com a finalidade específica de ensinar a tocar violão e guitarra [Cabral,

2001a]. Sua metodologia é caracterizada pela exibição de músicas completas sendo executadas em um braço virtual de violão. Cada música possui um conjunto de informações musicais específicas (e.g. acordes, letra, ritmo) e bem definidas em um formato de arquivo próprio.

Com a finalidade de permitir a criação desse tipo de conteúdo, principalmente em larga escala, foi desenvolvido o D’Accord Violão Editor [Cabral, 2002], um sistema que permite a elaboração das músicas a serem executadas no D’Accord Violão Player. Uma das características desse editor é que ele necessita da entrada manual e detalhada de todas as informações contidas na música, tornando a edição um trabalho falho e improdutivo. Dessa forma, é atribuído ao usuário o papel de construir a música detalhadamente a partir do seu conhecimento musical adquirido, obrigando-o a transformar todas as informações pertencentes à música (e.g., acordes, ritmos, solos) em dados minuciosos e granulares (e.g., notas, tempos).

1 Cifra é a informação textual da letra de uma música junto com seus acordes. Para que um músico possa tocar utilizando essa notação, é necessário que ele tenha conhecimento prévio da música.2 Tablatura é uma notação específica para violão e guitarra, que requer conhecimento prévio da música.

-1-

Page 11: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Outra grande deficiência apresentada por este processo de edição está no aspecto rítmico da música, pois as batidas3 criadas geralmente são monótonas e repetitivas, não representando com naturalidade a expressão de um músico em um violão real. Um grande esforço já foi feito na tentativa de solucionar este problema com o sistema Cyber-João [Dahia, 2003], desenvolvido no CIn - UFPE, que captura fragmentos musicais tocados por músicos consagrados e os reutiliza de forma adaptativa para gerar acompanhamentos rítmicos automaticamente. Esta abordagem resolve o problema da naturalidade dos ritmos, porém não simplifica seu processo de criação, pois, para cada novo ritmo que se deseja criar, é preciso escolher músicos de renome, selecionar suas músicas mais representativas e realizar um novo trabalho de mineração e obtenção dos padrões (ou fragmentos) musicais.

O objetivo deste trabalho é apresentar um processo inovador para a criação dessas músicas, dando mais liberdade ao usuário e reduzindo significativamente o tempo de edição. A solução aqui apresentada substitui os papéis que o músico-usuário e o sistema desempenham nesse processo. O sistema construído é capaz de extrair todo o conhecimento necessário à criação de uma música, bastando para isso que o músico-usuário realize uma única performance violonística, ou seja, faça uma simples execução da música em um violão, desde que este esteja equipado com a tecnologia MIDI (Musical Instrument Digital Interface) [MIDI, 2002].

O sistema proposto dá um passo à frente na construção de editores para músicas, pois utiliza um instrumento real como interface entre o músico e o computador, permitindo criar todo o conteúdo de uma música de forma semi-automática e rápida.

Além das vantagens citadas, tal sistema se apresenta como uma nova forma de documentar ou representar obras musicais de maneira fidedigna, capturando nuances que não são obtidas por

3 Batida é a execução realizada por um violonista para dar marcação rítmica a uma música. Para músicos destros, a batida é realizada com a mão direita.

-2-

Page 12: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

nenhum dos métodos tradicionais de representação musical: tablaturas ou partituras.

Dando seqüência ao documento, o capítulo 2 apresenta os principais problemas inerentes à extração de conhecimentos musicais a partir de uma performance violonística. Em seguida, no capítulo 3 é apresentado o que existe no estado da arte para solucionar os problemas encontrados. O capítulo 4 contém a especificação do sistema proposto e, por fim, a conclusão do trabalho é apresentada no capítulo 5.

-3-

Page 13: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

2. Natureza do ProblemaEste tópico é introduzido com a definição do que venha a ser

uma performance violonística dentro do contexto deste projeto. Em seguida, é feita uma descrição detalhada do funcionamento e da estrutura da música do D’Accord Violão Player. Depois, são apresentados os principais problemas que se encontram durante a extração do conhecimento necessário para a construção de uma música. Por fim, é detalhado como esse conhecimento extraído é utilizado.

2.1 O que é uma performance violonística?

Uma performance é, dentre outras definições, qualquer atividade artística que possa incluir dança, poesia ou música [Ferreira, 1975]. O termo violonístico é uma característica daquilo que tem violão ou que é relativo ao violão. Assim, quando um músico toca um violão, ele está produzindo (ou executando) uma performance violonística.

Por ser uma forma de expressão artística e musical, tal performance é constituída de elementos visuais (e.g. gestos, técnicas, emoções) e elementos sonoros (e.g. freqüências4, amplitudes5, silêncios6). No contexto deste projeto, interessarão apenas os aspectos sonoros da performance violonística.

Através de um violão convencional (acústico), é possível, com o uso de um microfone, capturar os elementos sonoros de forma analógica, ou seja, em forma de ondas. Porém, processar esses sinais para ter como saída dados que indiquem quais freqüências estão sendo utilizadas é extremamente custoso e impreciso. Uma outra abordagem que pode ser utilizada para capturar os elementos

4 Freqüência é a característica de uma onda sonora que proporciona a sensação de agudo ou grave.5 Amplitude é a característica de uma onda sonora que proporciona a sensação de volume.6 O silêncio é a ausência do som e também é considerado um elemento musical.

-4-

Page 14: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

sonoros é a utilização de um violão MIDI, que é esteticamente idêntico a um violão convencional, mas que possui um dispositivo extra de processamento que transforma as ondas sonoras (i.e. sinais analógicos) em dados musicais (i.e. valores digitalizados de freqüência, amplitude, etc.). Os dados apresentados como saída pelo violão MIDI são estruturados de acordo com o protocolo MIDI [MIDI, 2002], que será explicado a seguir.

O protocolo MIDI foi concebido para realizar a troca de dados musicais entre instrumentos que façam uso desta mesma tecnologia. Em MIDI, o dado musical é descrito através de eventos de início e fim (eventos conhecidos como on e off) que descrevem precisamente o instante, a freqüência e o volume de cada nota que está sendo executada ou transmitida (veja esquema representativo na figura 1).

Figura 1 - Disposição esquemática de quatro eventos MIDI.

Uma outra característica do protocolo MIDI é que seus eventos podem ser transmitidos concorrentemente através do uso de canais. Os canais MIDI são utilizados para permitir uma separação dos dados musicais transmitidos. No caso do violão MIDI, os eventos enviados são separados em canais específicos, onde cada canal corresponde a uma corda7 do instrumento.

Neste trabalho, quando se falar de performance violonística, serão considerados apenas os dados musicais decorrentes do contato do músico com o violão. Esse nível de informação é considerado como dado bruto, pois a simples informação de instante, freqüência, corda e volume de uma nota não contêm em si qualquer informação sobre a qual acorde ela pertence, nem com quais dedos ela está sendo

7 As cordas constituem a dimensão vertical do braço do violão. Um violão convencional possui 6 cordas.

-5-

Page 15: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

tocada, ou seja, trata-se puramente de dados musicais, sem qualquer conhecimento musical em si.

2.2 O D’Accord Violão PlayerPara permitir uma melhor compreensão deste trabalho, esta

seção apresenta uma breve introdução a cerca da estrutura da música e do funcionamento do D’Accord Violão Player.

Como exposto anteriormente, este software propõe ensinar a tocar violão através de músicas sendo simuladas em um violão virtual. Neste violão virtual são apresentadas todas as informações necessárias para que o aluno-usuário repita o que vê e com isso reproduza a música da forma mais fiel possível em seu violão real (figura 2).

Figura 2 - A tela principal do D’Accord Violão Player e seus principais elementos.

Durante a execução de uma música, o braço virtual (composto por 6 cordas e 12 casas) indica ao aluno-usuário o que ele deve fazer com as mãos esquerda e direita. São utilizadas bolas azuis para indicar quais dedos devem ser utilizados e onde eles devem ser posicionados. A figura 3 mostra uma correspondência entre os dedos e seus respectivos rótulos (de acordo com a didática musical, não se utilizam os

dedos assinalados com um X).

Mão esquerda(acordes)

Mão direita(ritmo)

Rótulos indicando os dedos utilizados

Rótulos indicando os dedos utilizados

Letra cifrada(i.e. letra com acordes)

Karaokê

-6-

Page 16: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 3 - Rótulos dos dedos da mão esquerda e direita.

A seguir são apresentados os elementos que constituem uma música.

2.2.1 Formato de representação musical

A música executada pelo D’Accord Violão Player é composta pelos seguintes elementos:

Uma letra cifrada: descrição textual da letra junto com os acordes;

Um karaokê: informa o instante em que cada sílaba da letra é selecionada durante a execução da música;

Um conjunto de ritmos: um ritmo é a informação de como a mão direita do músico irá puxar as cordas no decorrer do tempo. Para isso, cada ritmo é constituído por uma relação dedo x tempo, como mostra a figura 4a;

Um conjunto de acordes: um acorde mostra o que deve ser feito com a mão esquerda quando um ritmo está sendo tocado. Ele é formado por um conjunto de notas, e cada nota possui as seguintes informações: uma casa e uma corda, utilizadas para seu posicionamento no braço do violão, e um rótulo indicando qual dedo deve ser utilizado para tocá-la (figura 4b);

Um conjunto de solos: um solo é composto por um conjunto de notas livres de contexto, ou seja, que não pertencem a acorde algum e são tocadas sem a presença de um ritmo. São utilizados para reproduzir no braço do violão um comportamento irregular, onde as notas não seguem um padrão rítmico definido.

(b)(a)-7-

Page 17: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 4 - Representação de um ritmo (a) e de um acorde (b).

Como visto na figura 2, o braço virtual exibe as informações para uso das mãos direita e esquerda. A mão esquerda “monta” um acorde no braço do instrumento, enquanto a mão direita executa um ritmo para “puxar” as cordas e fazê-las soarem. Um ritmo define o comportamento da mão direita durante um curto período de tempo, geralmente durante um ou dois compassos8, e é utilizado de forma recorrente (em ciclos) para dar a impressão de que a música está seguindo um certo padrão rítmico. Logo, para diferentes ritmos, os acordes terão suas cordas puxadas de diferentes maneiras ao longo do tempo e a música irá soar como sendo tocada por diferentes estilos musicais.

Essas informações (e.g. letra, karaokê, acordes, ritmos e solos) constituem o conhecimento contido na música do D’Accord Violão Player. Este conhecimento é criado com o uso da ferramenta D’Accord Violão Editor.

A performance violonística (i.e. conjunto de eventos MIDI) não contém qualquer informação sobre a letra da música e seu karaokê, e, por isso, não faz parte do escopo deste projeto tratar do processo de criação desse conteúdo. Em contrapartida, é possível extrair da performance violonística todos os acordes, ritmos e solos, ou seja, todo o conhecimento violonístico pertencente à música. A próxima seção aborda a extração desse conhecimento, mostrando a natureza e as características de cada um dos problemas.

8 Compasso é uma medida musical. Na partitura, um compasso é o que está compreendido entre duas barras verticais.

Acorde(conjunto de notas)

Nota(casa, corda e dedo)Tempo (Batidas)

Ded

os

PIMA

I

AM

P

-8-

Page 18: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

2.2 Extração do conhecimentoComo visto anteriormente, o conteúdo de uma música do

D’Accord Violão Player possui as seguintes informações: os acordes; os ritmos que são utilizados para executar esses acordes; os solos; e os dedos da mão esquerda e direita que serão utilizados (informação que aqui será tratada com o nome de dedilhado).

-9-

Page 19: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

No processo de criação da música definido pelo D’Accord Violão Editor, o músico-usuário atua como fonte direta desses conhecimentos e dados, e utiliza apenas o teclado e/ou mouse como interface de comunicação com o computador. Assim, o sistema de edição criado anteriormente trabalha de forma completamente passiva. Tudo que ele faz é realizar a persistência das informações recebidas no formato de arquivo da música.

O Editor cria o conteúdo da música através de telas e/ou passos de edição, e estes se comportam de acordo com a figura a seguir, onde é possível ver o processo de criação dos ritmos (a), acordes (b) e solos (c).

Figura 5 - Processo de criação de uma música no D’Accord Violão Editor.

Sistema

Processo de edição

Conhecimento musical

a)

b)

c)

-10-

Page 20: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Este processo proposto pelo Editor apresenta as seguintes características e/ou problemas:

a) Edição dos ritmos: o processo de criação de um ritmo via interface gráfica (i.e. simulação dos dedos da mão direita no keypad do teclado) é uma solução que na prática demonstrou-se ineficaz. Esta abordagem apresentou problemas de usabilidade e de delay (i.e. atrasos significativos ao capturar o instante exato de pressionamento das teclas);

b) Edição dos acordes: o músico-usuário tem escrever a letra cifrada da música (que na prática é sempre coletada da internet), e o Editor irá extrair os acordes a partir do texto cifrado. Depois é preciso escolher, na base de acordes do Editor, quais posições de cada acorde serão ser utilizadas (pois um mesmo acorde pode ser tocado de várias formas no braço do violão);

c) Edição dos solos: a criação dos solos na música é feita através da importação de arquivos MIDI, coletados da internet ou criados em alguma ferramenta externa de edição/criação de arquivos MIDI. Este processo demanda muito esforço, acarretando em falta de produtividade, pois geralmente os arquivos retirados da internet precisam ser revisados e adaptados para a música, e o uso de uma ferramenta externa acaba tornando-se indispensável;

d) Edição do dedilhado: graças à base de acordes utilizada, os acordes já possuem a informação de dedos da mão esquerda, e os dedos da mão direita são provenientes da definição do ritmo.

Na prática, esse processo de edição demonstrou ser extremamente lento e desgastante para o usuário, o que inviabiliza a produção de músicas em larga escala. Em virtude das dificuldades encontradas, é preciso realizar uma reestruturação do processo de

-11-

Page 21: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

criação da música definido pelo Editor. A alternativa que este projeto apresenta é eliminar a responsabilidade do músico-usuário de produzir explicitamente todo esse conhecimento musical.

Isso é possível através da utilização de um violão MIDI. Quando o músico executar uma performance violonística, implicitamente ele estará produzindo todo o conhecimento musical necessário para a criação do conteúdo violonístico de uma música, pois ele executa os acordes, toca-os no ritmo desejado, executa solos, e utiliza os dedos da forma mais cômoda e conveniente possível. (Figura 6)

O papel do sistema proposto é tornar explícito todo esse conhecimento pertencente à performance violonística. Para isso, é preciso realizar uma extração do conhecimento, pois, como vimos, todo o conteúdo produzido por um violão MIDI é formado por dados granulares e sem qualquer noção de contexto musical em si.

Figura 6 - Processo de criação de uma música no sistema proposto.

Enfim, tomando a performance violonística como única entrada do músico para a elaboração do conhecimento musical, o problema da obtenção do conhecimento consiste em extrair quais acordes estão presentes na música, quais ritmos foram utilizados para tocar os acordes, quais solos foram tocados e quais dedos o músico utilizou.

As seções seguintes apresentam em detalhes cada um desses problemas de extração, descrevendo a terminologia utilizada e contextualizando cada um deles.

-12-

Page 22: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

2.2.1 A melodia de uma performance violonística

Antes de prosseguir com a apresentação dos problemas a cerca da extração do conhecimento, é preciso considerar a natureza da melodia contida na performance violonística.

Uma melodia pode ser monofônica ou polifônica. A primeira se caracteriza por ter no máximo uma nota sendo tocada ao mesmo tempo, enquanto a segunda pode ter duas ou mais notas simultâneas. A Figura 7 mostra exemplos desses dois tipos de melodia. É apresentado também um diagrama Tempo x Freqüência MIDI das melodias, pois esta notação facilitará a visualização de certos problemas mais adiante.

Figura 7 - Melodias monofônica (a) e polifônica (b).

Uma melodia polifônica pode ser classificada de acordo com a disposição de suas notas ao longo do tempo. Se suas notas simultâneas apresentarem uma disposição regular (i.e., mesmo instante de início e mesma duração), ela é classificada como melodia polifônica de voz simples (Figura 7b). Se suas notas simultâneas apresentarem uma disposição irregular (i.e., diferentes instantes de início e/ou diferentes durações), ela é classificada como melodia polifônica de múltiplas vozes, como mostra a figura a seguir.

(b)(a)

Tempo

Freq

üênc

ia M

IDI

Freq

üênc

ia M

IDI

Tempo

-13-

Page 23: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 8 - Melodia polifônica de múltiplas vozes.

A execução de uma música em um violão produz uma melodia polifônica, pois são tocadas várias cordas ao mesmo tempo. Porém, a melodia produzida é geralmente irregular, pois contém notas que fazem parte de um ou mais acordes, o que a caracteriza como uma melodia polifônica de múltiplas vozes.

2.2.2 Extração dos ritmos

No contexto do violão, um padrão rítmico é a forma com que o músico utiliza os dedos da mão direita para puxar as cordas ao longo da música, periodicamente. A regularidade e a forma de como isso é feito no decorrer do tempo é o que caracteriza o padrão rítmico.

Como os padrões rítmicos são entidades que se repetem ao longo da música, este é um problema caracterizado como mineração de dados seqüenciais, uma sub-área da mineração de dados onde estes estão dispostos de forma seqüencial [Rolland, 2001]. Uma característica deste problema é que se deseja encontrar fragmentos que sejam semelhantes em determinadas características, ou seja, que apresentem um comportamento padrão. Por isso, esta é uma atividade denominada como extração de padrões seqüenciais.

Uma característica presente no processo de extração de padrões, independente da solução adotada, é a necessidade de dividir a música em fragmentos e realizar uma comparação desses fragmentos para medir seu grau de semelhança de alguma forma.

Tempo

Freq

üênc

ia M

IDI

-14-

Page 24: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

No contexto da nossa aplicação, é necessário também, após esta extração realizada, inferir quais dedos da mão direita o músico utilizou para tocá-los, pois é essa informação que constitui essencialmente um padrão rítmico no violão. A extração do conhecimento a cerca da utilização dos dedos será abordada pelo item 2.2.5 que caracteriza o problema de extração dos dedos utilizados na performance violonística.

Comparação

Ao comparar diferentes fragmentos musicais, é imprescindível ressaltar que a característica mais importante para a identificação de padrões rítmicos é a disposição de suas informações musicais em relação ao tempo. Assim, é possível que dois fragmentos diferentes possuam a mesma informação rítmica e por isso sejam consideramos como duas ocorrências de um mesmo padrão.

Para que os padrões seqüenciais extraídos sejam efetivamente ocorrências rítmicas, a comparação dos fragmentos precisa apresentar o seguinte comportamento:

Considerar a existência de espaços vazios: esta é uma característica bastante desejada na extração de padrões musicais, visto que é bastante comum um músico utilizar pausas (ausência de notas) e notas de transição para enriquecer a música (veja os fragmentos 1 e 2 da figura 9, nos tempos T2 e T3, respectivamente);

Comparar aproximadamente: é preciso que a comparação desconsidere pequenas variações nos fragmentos, permitindo um casamento (matching) aproximado das seqüências, pois dificilmente dois fragmentos serão exatamente iguais. O resultado desse tipo de comparação é chamado de similaridade;

Considerar apenas aspectos rítmicos: a comparação dos fragmentos deve ressaltar apenas

-15-

Page 25: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

características rítmicas como ataque9 e duração, ignorando os atributos melódicos.

Permitir melodias polifônicas. A seguir, é apresentado um exemplo com três fragmentos

musicais. De acordo com as características descritas acima para o processo de comparação, é possível considerar esses fragmentos como sendo três ocorrências de um mesmo padrão rítmico, mesmo que apresentem diferenças nos atributos melódicos (posicionamento vertical das notas) e haja notas “faltando” em determinados fragmentos (há espaços vazios nos fragmentos 2 e 3 em relação ao fragmento 1).

Figura 9 – Representação em partitura de três fragmentos musicais.

Apesar de apresentarem diferenças rítmicas (de duração e até ausência de notas) nos instantes T2 e T3, se comportam como variações de um mesmo padrão rítmico.

2.2.3 Extração dos acordes

Um acorde ocorre na música quando duas ou mais notas partilham um mesmo instante de tempo. A extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas.

9 Ataque é o momento da entrada de uma nota em um compasso.

T1 T2 T3 T4 T5 T6

Fragmento 1

Fragmento 2

Fragmento 3

Padrão rítmico A

Variação 1 do padrão A

Variação 2 do padrão A

-16-

Page 26: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

O processo de identificação dos acordes consiste em descobrir qual é sua natureza musical, ou seja, descobrir a sua informação harmônica (i.e. identificar o “papel morfológico” de cada uma de suas notas), e, a partir daí, descobrir a sua cifra10 (ex.: A, Dm, C7, etc.).

É importante salientar que só é preciso realizar o trabalho de identificação dos acordes nos trechos onde houve padrões extraídos, pois os padrões rítmicos são aplicados diretamente sobre os acordes, e não há necessidade de identificar acordes onde não houve ocorrências de padrões na música.

Embora os conceitos envolvidos sejam simples, a duas seções a seguir explicam o que está por trás dos problemas de descoberta da informação harmônica e da cifra de um acorde.

Informação harmônica

Cada acorde possui uma nota dominante chamada de tônica. As demais notas exercem um papel semântico em relação à tônica, e esse papel é chamado de intervalo. A informação harmônica de um acorde consiste dessas duas informações: a nota tônica e o intervalo das demais notas. Essa informação harmônica corresponde a um nível mais sutil de abstração em relação ao simples conjunto de notas, e pode ser utilizada para a obtenção da cifra de um acorde.

Cifra

A cifra de um acorde é uma notação abreviada para seu nome. Ela pode ser descoberta a partir da informação harmônica de um conjunto de notas. A nota tônica diz qual vai ser o tom do acorde (e.g., C – “dó”, D – “ré”, etc.) e os intervalos informam quais características o acorde possui (e.g., m – “menor”, 7 – “sétima”, etc.).

10 A cifra de um acorde é a abreviação de seu nome. Por exemplo, a cifra do acorde “dó maior” é “C”, do “ré menor” é “Dm”, do “lá menor com sétima” é “Am7”, etc.

-17-

Page 27: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

2.2.4 Extração do dedilhado

Este é um problema um pouco diferente dos outros, pois a performance violonística não possui qualquer informação a respeito dos dedos que o músico utilizou. Essa informação na verdade precisa ser inferida, gerada. Tratando-se, portando, de um problema de geração de dedilhado.

Ao executar uma performance, o músico utiliza seu conhecimento para descobrir qual a forma mais conveniente de utilizar os dedos. Com a mão esquerda, o músico posiciona os acordes e os solos no braço do violão, e com a mão direita ele puxa as cordas para produzir o som. A geração dos dedos da mão esquerda e da mão direita constituem diferentes problemas, visto que estão regidos por diferentes regras de utilização.

Mão direita

A geração dos dedos da mão direita é feita sobre os padrões rítmicos extraídos, pois, de acordo com a seção 2.2.2, o conteúdo de um padrão rítmico é essencialmente os dedos da mão direita a serem utilizados ao longo do tempo. Portanto, para cada um dos fragmentos rítmicos extraídos, é preciso realizar uma inferência para obter quais dedos da mão direita podem ser utilizados.

Mão esquerda

Para gerar os dedos da mão esquerda, é preciso considerar a performance violonística como um todo (acordes e solos), pois, durante a execução, o músico segue um fluxo lógico na utilização dos dedos com a finalidade de minimizar o esforço realizado.

Como visto na seção 2.2.1 sobre a natureza das melodias, a performance violonística representa uma melodia polifônica de múltiplas vozes, onde é possível a ocorrência de diferentes acordes partilhando uma mesma nota (figura 8). Neste caso, para que a

-18-

Page 28: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

geração do dedilhado seja realizada corretamente, é preciso que as notas em comum entre dois ou mais acordes sejam detectadas, e que a geração do dedilhado seja feita com a restrição de que essas notas utilizem o mesmo dedo (figura 10).

Figura 10 – Restrição no uso dos dedos em melodias polifônicas de múltiplas vozes.

Na figura acima, dois acordes partilham a mesma nota N1. Para tocar essa nota, ambos os acordes devem utilizar o mesmo dedo.

2.3 Utilização do conhecimentoO resultado do processo de extração é constituído por: Padrões rítmicos: uma lista de padrões rítmicos

extraídos e a indicação dos pontos da performance violonística onde suas ocorrências foram detectadas;

Acordes: uma lista dos acordes encontrados dentro das faixas de ocorrência dos padrões rítmicos;

Solos: uma lista de conjuntos de notas indicando o ponto de início de cada conjunto na performance;

Dedilhado: as indicações de utilização dos dedos da mão esquerda estão armazenadas nas notas, sejam elas pertencentes aos acordes ou aos solos. Os dedos da mão direita estão presentes nos padrões rítmicos extraídos e processados.

Acorde 1

Tempo

N1

Freq

üênc

ia

Acorde 2

Nota em comum

-19-

Page 29: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Esse conhecimento musical extraído da performance violonística constitui essencialmente o conteúdo da música e pode ser aplicado diretamente para a sua construção.

A extração de todo este conhecimento a partir de uma execução musical em um violão real abre inúmeras possibilidades, pois a aplicabilidade é imensa (e.g., produzir dados musicais para análise de terceiros, produzir conteúdo musical em larga escala, etc.). Como citado no primeiro capítulo, além de revolucionar o processo de criação de uma música no contexto do projeto D’Accord Violão Player, o processo de extração desde conhecimento pode ser utilizado para documentar obras musicais de uma forma extremamente natural e eficiente. Para este tipo de trabalho, uma grande vantagem seria a documentação das obras na forma de conhecimento musical digitalizado, permitindo consultas mais completas e eficientes, enriquecendo o trabalho dos musicólogos.

-20-

Page 30: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

3. Estado da ArteEste capítulo apresenta o estado da arte no âmbito dos

principais problemas apresentados. A primeira seção aborda a extração de padrões, mostrando uma análise comparativa das soluções existentes e detalhando a que mais se adequa ao projeto. Por fim, são descritas as soluções encontradas para a geração do dedilhado de cada uma das mãos.

3.1 Extração dos padrões rítmicosComo visto, a extração de padrões é um problema

caracterizado como mineração de dados seqüenciais, onde se busca encontrar ocorrências de padrões rítmicos ao longo dos dados (i.e. performance violonística).

Essa é uma tarefa computacionalmente cara, pois é preciso realizar uma subdivisão dos dados seqüenciais em fragmentos e estes precisam ser comparados entre si para que seja aferido quão são semelhantes.

Existem vários algoritmos que realizam a extração de padrões. A seguir, é exibido um quadro comparativo com os algoritmos existentes [Meredith, 2001a], ressaltando suas características em relação ao que se deseja de um algoritmo de extração de padrões de acordo com o que foi citado na seção 2.2.2.

FlExPat[Rolland, 2001]

SIATEC[Meredith, 2001a]

GCTMS[Cambouropoulos, 1999] [Hsu, 1998]

Permite espaços vazios (gaps) Sim Sim Não Não

Compara aproximadamente (matching)

Sim Sim11 Sim Não

Considera polifonia Sim Sim Não Não

Complexidade de tempo O(n2) O(n3) ? O(n4)

Complexidade de espaço O(n2) O(n3) ? ?

11 Porém encontra poucas classes de casamento (matching) aproximado.

-21-

Page 31: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Tabela 1 - Análise comparativa dos algoritmos de extração de padrões

Descrever detalhadamente cada um destes algoritmos fugiria do escopo deste projeto, visto que as características da tabela são suficientes para a escolha da solução apropriada (mais detalhes sobre o estudo comparativo por ser encontrado em [Meredith, 2001a]). De acordo com a análise, o FlExPat apresentou as melhores características para a extração dos padrões rítmicos, pois é o mais eficiente (i.e. de ordem n2) e satisfaz os três requisitos desejados (i.e. gaps, matching aproximado e polifonia), se adaptando perfeitamente às necessidades deste trabalho.

As próximas seções apresentarão com mais detalhes as características e o funcionamento do FlExPat.

3.1.1 Flexible Extraction of Patterns: FlExPat

FlExPat foi desenvolvido com base em algoritmos da bioinformática utilizados para extrair padrões em cadeiras de DNA (constituídas por uma seqüência de letras). O princípio é o mesmo, porém várias adaptações foram feitas visando diminuir o custo computacional e estender a natureza da seqüência, visto que seus elementos deixam de ser letras e passam a ser dados simbólicos (notas ou acordes), cada um com vários atributos (i.e. freqüência, duração, ataque, etc.).

O algoritmo recebe como entrada uma performance violonística (i.e. seqüência), e apresenta como saída um conjunto de padrões (i.e. subseqüências), onde cada padrão é formado por um protótipo (i.e. fragmento mais representativo do padrão) e suas demais ocorrências.

O FlExPat realiza este trabalho em duas fases: Comparação: nesta fase, a seqüência é dividida

em fragmentos (i.e. subseqüências) e são calculadas as similaridades entre todos pares de fragmentos;

-22-

Page 32: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Classificação: esta fase classifica os fragmentos de acordo com suas similaridades, agrupando os mais semelhantes em padrões.

A seguir, o algoritmo é apresentado em suas duas fases.

Comparação

Esta fase divide a seqüência em fragmentos e realiza o cálculo da similaridade entre todos os pares de fragmentos que obedeçam a determinados parâmetros estabelecidos pelo algoritmo. Esses parâmetros limitam a quantidade de comparações definindo um subconjunto de fragmentos válidos dentre todos os fragmentos possíveis, evitando assim que comparações desnecessárias sejam feitas.

A parametrização do que vai ser comparado é uma das as principais razões da eficiência do FlExPat, pois em uma seqüência de tamanho N há 2N fragmentos possíveis, e para compará-los dois a dois seria preciso C2N,2 operações, um número da ordem de O(N4). Este custo pode ser ainda maior considerando o algoritmo de comparação dos fragmentos.

Para definir o que é um fragmento válido a ser comparado, o FlExPat apresenta os seguintes parâmetros:

Tamanho mínimo (TMIN): indica a quantidade mínima de elementos que um fragmento deve ter;

Tamanho máximo (TMAX): indica a quantidade máxima de elementos de um fragmento;

Sobreposição máxima: indica quão sobrepostos podem estar dois fragmentos a serem comparados. A sobreposição de fragmentos acontece quando ambos compartilham um mesmo “pedaço” da seqüência. Este parâmetro limita a quantidade máxima de elementos em comum que dois fragmentos a serem comparados podem ter.

-23-

Page 33: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Outra razão de sua eficiência está no método de comparação. É utilizado um modelo de cálculo de similaridades com base no Edit Distance [Levenshtein, 1965] [Mongeau, 1990]. Este modelo aplica conceitos de programação dinâmica para armazenar as similaridades já calculadas e aproveitá-las posteriormente no cálculo de novas similaridades.

A similaridade de dois fragmentos quaisquer pode ser calculada através da seguinte fórmula, onde S[i][t] é o fragmento que tem início na posição ‘i’ da seqüência e tem tamanho ‘t’, e S[k] é um elemento da seqüência, para N = tamanho da sequência, 1 i N, TMIN t

TMAX e 1 k N:

Simil(S[i][m-1], S[j][n-1]) + CustoSub(S[i + m], S[j + n])Simil(S[i][m], S[j][n]) = menor custo Simil(S[i][m-1], S[j][n]) + CustoDel(S[i + m])

Equação 1 - Cálculo indutivo das similaridades entre dois fragmentos.

Para dois fragmentos quaisquer S[i][m] e S[j][n], a similaridade entre eles é dada indutivamente a partir da similaridade de seus sub-fragmentos de menor tamanho S[i][m-1] e S[j][n-1] já calculados anteriormente a partir do caso base. As funções CustoSub, CustoDel e CustoIns significam, respectivamente, o custo de substituir, “deletar” e inserir um elemento em um dado fragmento, e são utilizadas de acordo com a figura a seguir para calcular novos valores de similaridade a partir de valores já calculados. Sejam dois fragmentos de tamanho 4 e 3, cujos elementos (a, b, c, d, x, y e z) podem ser iguais ou diferentes entre si:

Fragmentos:

Seqüência: ... ... ... ...

Equação: Simil( , ) =

1 i i+m j j+n N

S[i][m=4] S[j][n=3]

a b c d x y z

a b c d x y z

a b c

a b c

a b c d

x y

x y z

x y z

d

d z

-24-

Page 34: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Simil( , ) + CustoSub( , )

menor Simil( , ) + CustoDel( )

Simil( , ) + CustoIns( )

Figura 11 - Cálculo da similaridade entre dois fragmentos no FlExPat.

À medida que estes valores são calculados, é construído um grafo chamado Grafo de Eqüipolência, que possui como vértices todos os fragmentos válidos da seqüência ({S[i][t]| 1 i N e TMIN t

TMAX}) e como arestas as similaridades já calculadas entre eles. Porém, só são criadas arestas entre os fragmentos que apresentarem uma similaridade maior que um certo limite, chamado de Limiar de Similaridade Local (L). Isso evita que dois fragmentos muito diferentes sejam considerados na fase de classificação.

Este grafo é utilizado na próxima fase, que classifica os fragmentos em padrões de acordo com suas similaridades.

Classificação

Como visto, o grafo de eqüipolência é uma estrutura que guarda a similaridade entre todos os fragmentos da seqüência. A etapa de classificação realiza um processamento sobre esse grafo com a finalidade de extrair subgrafos, onde cada subgrafo corresponde a um padrão encontrado na seqüência.

Como conseqüência do processo de construção do grafo de eqüipolência, cada vértice (i.e. fragmento) está ligado a um conjunto de outros vértices adjacentes. Um vértice e seus adjacentes formam um subgrafo estrela, como mostra a figura 12, onde o vértice central

Valores já calculados

-25-

Page 35: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

é o protótipo e os vértices adjacentes são os fragmentos similares ao protótipo, ou seja, suas ocorrências.

Figura 12 - Subgrafo estrela construído na etapa de comparação do FlExPat.

Um parâmetro deve ser utilizado para indicar se um subgrafo estrela irá ou não ser aceito como um padrão. Os parâmetros mais comuns são:

Valor mínimo para a similaridade total: um subgrafo é aceito de acordo com a soma das similaridades entre o vértice central e seus adjacentes;

Valor mínimo para a média das similaridades: análogo ao parâmetro anterior, porém com o cálculo da média;

Quantidade mínima de vértices adjacentes: análogo aos outros parâmetros, porém considerando a quantidade de ocorrências encontradas para o protótipo.

O algoritmo da fase de classificação utiliza um limiar de aceitação (Q) referente ao valor do parâmetro utilizado para verificar se um subgrafo será aceito.

A seguir, é apresentado o algoritmo de extração dos padrões a partir do grafo de eqüipolência. É utilizando como exemplo o parâmetro de aceitação que se baseia na quantidade mínima de vértices adjacentes (i.e. quantidade mínima de ocorrências).

Vértice central(protótipo) Vértices adjacentes

(ocorrências)

-26-

Page 36: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Algoritmo: Entrada: Grafo de eqüipolência (GE), Limiar de aceitação (Q) Saída: Uma lista de padrões (i.e. subgrafos aceitos)

Passo 0: Criar uma lista vazia L de subgrafos. Passo 1: Para cada vértice v em GE: Passo 1.1: Calcular QuantidadeMinimaVertices(v) Passo 1.2: Se QuantidadeMinimaVertices(v) > Q então, adicione à lista L o subgrafo estrela cujo vértice central é v. Passo 2: Retorne L.

Figura 13 - Algoritmo da fase de classificação do FlExPat.

3.2 Geração do dedilhadoComo visto anteriormente, é preciso considerar diferentes

soluções na descoberta do dedilhado para cada uma das mãos, visto que elas possuem diferentes funções na execução de uma performance violonística (i.e. a esquerda posiciona as notas no braço do violão e a direita puxa suas cordas).

A seguir são apresentadas as alternativas do estado da arte para inferir o dedilhado das mãos.

3.2.1 Mão esquerda

A geração do dedilhado para a mão esquerda consiste em escolher os dedos para executar os acordes e notas de forma a produzir o mínimo de esforço possível para o músico.

Esse problema pode ser caracterizado como a escolha de um melhor caminho, onde os elementos da performance constituem os passos ao longo deste caminho e os dedos correspondem às alternativas entre cada passo e seu sucessor.

A mais recente publicação sobre geração de dedilhado para mão esquerda [Radicioni, 2005] utiliza uma abordagem de busca em grafo para achar o melhor caminho. Essa solução considera todas as possibilidades de utilização dos dedos, e calcula o melhor caminho com base em limitações biomecânicas da mão do músico, simulando

-27-

Page 37: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

assim um processo bastante real de escolha dos dedos. O algoritmo também permite o processamento de melodias polifônicas, o que torna possível sua aplicação na melodia da performance violonística.

A solução desenvolvida por [Radicioni, 2005] será adotada, visto que suas características satisfazem as necessidades do sistema proposto (i.e. permite melodias polifônicas e apresenta grande semelhança com um processo cognitivo real de escolha dos dedos).

O algoritmo recebe como entrada uma seqüência de notas e/ou acordes, e realiza a geração do dedilhado em duas etapas (construção do grafo e escolha do melhor caminho) que serão descritas a seguir.

Construção do grafo

O grafo montado pelo algoritmo apresenta uma topologia em forma de colunas, onde cada coluna corresponde a um elemento da seqüência (i.e. uma nota ou um acorde), e cada vértice corresponde a uma possibilidade de dedilhado para seu elemento correspondente (Figura 14).

Figura 14 - Topologia do grafo construído para a geração do dedilhado.

Os vértices da coluna possuem uma ou mais posições de dedilhado <corda, casa, dedo>, uma para cada nota que seu elemento correspondente possuir (e.g. se o elemento for uma simples nota, o vértice terá 1 posição de dedilhado, se o elemento for um acorde com 4 notas, o vértice terá 4 posições de dedilhado).

...

...

...

...... ......

Possibilidadesde uso dos dedos

Elemento1

Elemento2

Elemento3

Elemento4 ...

-28-

Page 38: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Uma das características do violão, é que o som de uma nota pode ser produzido a partir de mais de uma posição <corda, casa>. Esta particularidade faz com que o algoritmo se preocupe também em gerar todas as posições <corda, casa> possíveis para cada nota, comportamento que será desconsiderado pelo sistema proposto porque suas notas já dispõem de tal informação. De acordo com a definição do conteúdo de uma performance violonística, apresentada na seção 2.1, cada nota possui a informação da corda onde ela foi produzida e, com as informações de corda e freqüência de uma nota, é possível descobrir também de em qual casa do violão ela foi produzida (onde, casa = freqüênciaevento - freqüênciacorda). Assim, é possível saber exatamente em qual posição <corda, casa> do violão cada nota foi produzida.

O exemplo a seguir (figura 15) mostra um grafo gerado a partir de um pequeno trecho de seqüência musical contendo duas notas e um acorde. A informação de <corda, casa> da nota é mantida no grafo, pois esta informação é utilizada para calcular o custo de transição entre os elementos.

Figura 15 - Grafo gerado a partir de um fragmento de seqüência musical.

Na figura acima, cada vértice corresponde a uma possibilidade de dedilhado para seu respectivo elemento na seqüência. Em

{<6, 1, 1>}

{<6, 1, 2>}

{<6, 1, 3>}

{<6, 1, 4>}

{<5, 2, 1>}

{<5, 2, 2>}

{<5, 2, 3>}

{<5, 2, 4>}

{<5, 2, 1>; <4, 2, 2>; <3, 2, 3>}{<5, 2, 1>; <4, 2, 3>; <3, 2, 2>}{<5, 2, 2>; <4, 2, 1>; <3, 2, 3>}{<5, 2, 2>; <4, 2, 3>; <3, 2, 1>}{<5, 2, 3>; <4, 2, 1>; <3, 2, 2>}{<5, 2, 3>; <4, 2, 2>; <3, 2, 1>}{<5, 2, 1>; <4, 2, 1>; <3, 2, 1>}

-29-

Page 39: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

vermelho, é destacado um caminho como possível solução para o problema da geração de dedilhado.

É importante ressaltar que este algoritmo apresenta uma lacuna no tratamento de melodias polifônicas, pois não processa corretamente as melodias de múltiplas vozes descritas na seção 2.2.1, quando há acordes compartilhando uma ou mais notas entre si. Porém, o sistema proposto desenvolveu uma solução para este problema, que será apresentada na seção 4.3.

Escolha do melhor caminho

A dificuldade é medida considerando-se duas fontes de esforço: os deslocamentos vertical e horizontal, também chamados de disposição dos dedos e reposicionamento da mão, respectivamente. São atribuídos pesos a esses deslocamentos de forma a priorizar um conforto biomecânico para o músico.

O custo de transição entre duas posições de dedilhado p e q é calculado através da seguinte equação, onde p = <cordap, casap, dedop> e q = <cordaq, casaq, dedoq>:

Peso (p, q) = EsforçoHorizontal (p, q) + EsforçoVertical (p, q)

Equação 2 - Equação para cálculo do peso entre duas posições de dedilhado.

O esforço horizontal é um valor estabelecido entre [0.5, 5] e é dado em função das variações nas casas e nos dedos, onde casa = casaq - casap. O valor é dado por tabelas em função do casa, onde há uma tabela para cada par de dedos utilizados. Para uma melhor visualização do problema, imagine que os dedos utilizados foram o indicador e o anelar, e o deslocamento de casas casa foi igual a 2. Neste caso, de acordo com a tabela da figura 16, o esforço horizontal foi igual a 0.5.

-30-

Page 40: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 16 - Tabela para cálculo do esforço horizontal entre o indicador e o anelar.

O esforço vertical é dado da seguinte forma: se o deslocamento for dito como confortável, o peso é 0.25, se for desconfortável, o peso é 5. Um deslocamento vertical é confortável quando:

Dedos adjacentes (e.g., indicador-médio) apresentarem um corda igual a 0 ou 1, onde corda = cordaq - cordap;

Dedos não adjacentes (e.g., indicador-anelar) apresentarem um corda igual a 0 ou 3;

E quando os dedos indicador-mínimo apresentarem um corda igual a 0 ou 4.

Quando posições de dedilhado são executadas simultaneamente, i.e., quando o vértice é um acorde, é preciso calcular, além do custo de transição, o custo de execução do próprio vértice, que é medido como se suas posições fossem tocadas sequencialmente. O peso de um acorde é dado somando-se o peso de transição entre cada um dos seus pares de notas. Tomando como exemplo um acorde a com três posições p1, p2 e p3, seu peso é dado por Pesoa = Peso(p1, p2) + Peso(p1, p3) + Peso(p2, p3). Para vértices com uma única posição, este custo não é computado, pois, colocar um único dedo no braço do violão não requer esforço algum do músico.

Para encontrar o melhor caminho do grafo, o algoritmo percorre todas as alternativas possíveis somando o peso de um vértice com o peso da transição para o próximo vértice, e assim sucessivamente. O

casa

Esfo

rço

Hor

iz. (

peso

)

Tabela para uma transição indicador-anelar

-31-

Page 41: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

caminho que apresentar o menor somatório de pesos é então a melhor alternativa de dedilhado para a seqüência de notas e acordes da performance violonística.

3.2.2 Mão direita

Atualmente só há uma publicação [Trajano, 2004] que propõe solução para este problema.

A solução apresentada em [Trajano, 2004] segue o mesmo princípio da geração de dedilhado para a mão esquerda: os possíveis dedilhados são vértices de um grafo e a melhor solução é o caminho que utiliza os dedos da forma mais confortável para o músico. O que difere uma solução da outra é a terminologia, o cálculo dos custos, e algumas particularidades que serão descritas a seguir.

O algoritmo apresenta os seguintes conceitos: Posição da Mão (pm): posição dos dedos da mão

direita em relação às cordas que eles irão puxar. Corresponde a uma 6-tupla, onde cada posição representa uma corda e seus valores representam os dedos (P - polegar, I - indicador, M - médio, A – anela ou x - ausência de dedo). Por exemplo, a posição da mão (x, P, I, M, A, x) indica que os dedos da mão direita irão puxar as seguintes cordas:

Figura 17 – Exemplo de posicionamento da mão direita.

Conjunto de Posições da Mão (PM): é um conjunto que contém todas as posições relevantes para pm;

-32-

Page 42: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Custo de Transformação ( T(pmA, pmB) ): é a função que estabelece o custo de transição entre duas posições pmA e pmB PM, definida com o objetivo de evitar movimentações na posição da mão;

Custo de Aplicação ( A(pmA, corda) ): é a função que calcula o custo de aplicação da posição pmA relativo a uma determinada corda, definia com o objetivo de evitar posições de difícil execução.

Os parâmetros do algoritmo são as funções de custo de transição (T) e de aplicação (A), e o conjunto de posições possíveis para a mão (PM).

O algoritmo realiza a construção do grafo aplicando todas as possibilidades de posição da mão para cada conjunto de notas simultâneas. Em seguida, ele calcula os custos a fim de encontrar a melhor seqüência de transições, obtendo assim o melhor dedilhado.

-33-

Page 43: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

4. O sistema proposto: D’Accord Recognizer

Este capítulo descreve o sistema proposto em termos de sua arquitetura. A próxima seção apresenta uma visão geral da arquitetura do sistema e a integração de seus módulos. As seções seguintes detalham o funcionamento dos módulos e suas respectivas modelagens.

4.1 ArquiteturaA modelagem do sistema proposto foi feita utilizando o padrão

de projeto Fachada (Facade) [Gamma, 1999]. O sistema está dividido em três camadas básicas: GUI, i.e., interface gráfica; FACHADA, i.e., camada de transição; e CORE, camada onde são realizados os processamentos do sistema. Essa divisão é importante, pois dá ao sistema uma maior portabilidade entre as ferramentas de desenvolvimento integrado (IDEs), visto que geralmente cada IDE apresenta uma solução própria para criação de interface gráfica12, o que acaba amarrando o desenvolvimento do sistema a uma única ferramenta.

Figura 18 - Padrão de projeto Fachada.

Os componentes da camada de processamento foram modelados seguindo o padrão de projeto Gerenciador (Manager Design Pattern) [Sommerland, 1998]. O padrão agrupa todo o processamento realizado sobre classes afins em objetos de

12 Exemplos: o Borland C++ da Borland Software Corporation utiliza a VCL (Visual Component Library); o Visual C++ da Microsoft utiliza a MFC (Microsoft Foundation Classes).

GUI

FACHADA

CORE

-34-

Page 44: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

gerenciamento chamados Gerenciadores. Essa separação faz com que modificações no funcionamento dos gerenciadores sejam feitas de forma independente, e permite o reuso desses componentes por outros projetos. Cada gerenciador utiliza também o padrão de projeto Singleton, que modifica a modelagem da classe de forma a permitir uma única instancia sua no sistema (i.e., o construtor da classe é privado e o acesso à instancia única é dado através do método estático ‘GetInstancia’) (figura 19). Isso é feito para centralizar o acesso aos gerenciadores.

Gerenciador

m_sInstancia : Gerenciador*

GetInstancia() : Gerenciador&Gerenciador()

<<Singleton>>

Figura 19 - Padrão de projeto Singleton (UML).

A figura 20 mostra a arquitetura geral do sistema, contendo os principais módulos e os relacionamentos entre os gerenciadores criados.

Música

D’Accord Recognizer

COREFACHADA

GUI

GerenciadorCore

GerenciadorEdição

Extrator de Padrões

Identificador de Acordes

Gerador de DedilhadoGerenciadorMetrônomo

GerenciadorMidi

GerenciadorExecução

GerenciadorGravação

-35-

Page 45: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 20 - Arquitetura do sistema.

O sistema pode ser dividido em dois principais módulos: Gravação e Execução: é responsável pela infra-

estrutura de gravação e execução (playback) do sistema, e é composto pelos componentes de gerenciamento da Execução, Gravação, Metrônomo e Midi;

Edição: este módulo é utilizado para construção e acesso ao conteúdo da música. Constituído pelos componentes: Gerador de Dedilhado, Extrator de Padrões e Identificador de Acordes.

O diagrama a seguir mostra o fluxo da informação musical desde o início da gravação até a criação de uma música.

Figura 21 - Fluxo da informação no processo de criação da música.

GerenciadorEdiçãoExtrator de Padrões

Identificador de Acordes

Gerador de Dedilhado

GerenciadorMidi

GerenciadorGravação

Eventos MIDI

Eventos MIDI

Eventos MIDISeqüência de Notas e Acordes

(1) Seqüência de Notas e Acordes(com dedilhado)

(2) Lista de Padrões Rítmicos(fragmentos da seqüência)

Seqüência de Acordes

Música

(1)

(2)

-36-

Page 46: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

As seções seguintes descrevem o funcionamento e a modelagem dos componentes do sistema.

4.2 Módulo de Gravação e ExecuçãoPara solucionar o problema proposto, foi preciso modelar uma

infra-estrutura de gravação da performance violonística e de reprodução dos elementos extraídos (para dar um feedback ao usuário e para permitir um playback durante a gravação).

Como visto anteriormente, o sistema recebe a performance do violão na forma de eventos MIDI. A obtenção dessas informações MIDI é realizada em conjunto pelos gerenciadores de Gravação e de Midi, que terão suas modelagens descritas logo mais adiante.

A execução de informações musicais (e.g., execução de eventos MIDI, execução de uma música no D’Accord Violão Player) é realizada através um seqüenciamento. Seqüenciamento musical consiste em disparar um temporizador13 a fim de executar a informação musical no tempo exato em que ela deve ser reproduzida.

A princípio, o D’Accord Recognizer adotaria a modelagem de seqüenciamento proposta por [Cabral, 2001c] utilizada no D’Accord Violão Player, porém, uma particularidade do Recognizer é a necessidade de realizar uma sincronização entre a gravação e a reprodução da informação musical para fins de playback. Em virtude dessa característica, foi proposta uma nova modelagem para o seqüenciamento de informações musicais.

Para solucionar este problema, a estrutura de temporização foi modelada isoladamente, sem qualquer dependência com a execução ou a gravação das informações. Essa estrutura de temporização foi encapsulada e chamada de Metrônomo14. Assim, o que o módulo de gravação e execução fazem é “ouvir” o Metrônomo e realizar suas ações de forma totalmente independente. Isso é feito através da 13 Dispositivo que produz pulsos regulares ao longo do tempo.14 Metrônomo é uma ferramenta que serve para auxiliar músicos no controle do andamento (velocidade) de uma música. Isso é feito através da reprodução de sinais (visuais ou sonoros) continuamente em intervalos de tempo iguais. A velocidade é medida em BPM (batidas por minuto).

-37-

Page 47: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

modelagem de notificadores, onde um Notificador é responsável por avisar aos Ouvites quando um determinado evento acontece.

Como o processo de notificação deve ser bastante eficiente (i.e., a velocidade do metrônomo pode chegar mais de 280 notificações por segundo), o sistema de notificação foi proposto através da utilização de ponteiros para métodos. A Figura 22 mostra a modelagem de um Notificador e um Ouvinte quaisquer (a), e mostra também que o processo de notificação é utilizado entre os componentes de Midi e Gravação (b).

OuvinteOuviu_Evento(...) : void

Notificadorm_vOuvintesEvento : vector<FOuvinteEvento*>

AdicionarOuvinte_Evento(fpOuvinteEvento : FOuvinteEvento) : voidOnEvento()

Figura 22 - Modelagem (a) e funcionamento (b) do sistema de notificação.

A seguir são apresentados os componentes de Metrônomo, Gravação, Execução e MIDI.

4.2.1 Metrônomo (Seqüenciador)

O Metrônomo faz parte do processo de seqüenciamento (execução) e gravação através do sistema de notificação descrito anteriormente.

Existem várias formas de implementar a temporização (i.e., produzir eventos em intervalos de tempo regulares), que pode ser

(a)

(b)

GerenciadorMetrônomo

GerenciadorMidi

GerenciadorExecução

GerenciadorGravação

Notifica instante

Notifica evento MIDI

(notificador)

(notificador)

(ouvinte)

(ouvinte)

Notifica instante

-38-

Page 48: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

feita com o uso de componentes de terceiros ou através da própria API do Windows®. Por isso, este serviço foi encapsulado em uma classe abstrata chamada Temporizador.

A figura a seguir mostra a modelagem do Metrônomo, que possui como classe de fronteira o GerenciadorMetronomo. O Temporizador implementa os serviços de notificação e define uma interface (i.e., métodos abstratos) para a temporização. A classe TemporizadorMaxMidi implementa o Temporizador utilizando um componente do framework MaximumMidi [Messick, 1997]).

TemporizadorMaxMidi

IniciarSequenciador() : voidPararSequenciador() : voidSetBpm(nBpm : int) : voidNotificarMaxMidiTick()

Temporizadorm_nTimeStamp : intm_nBpm : intm_vOuvintesTick : vector<FOuvinteTick*>

<<virtual>> IniciarSequenciador() : void<<virtual>> PararSequenciador() : void<<virtual>> SetBpm(nBpm : int) : voidAdicionarOuvinte_Tick(pfOuvinteTick : FOuvinteTick*) : void<<virtual>> NotificarTick() : void

<<implementa>>

GerenciadorMetronomo<<Singleton>>

m_pSequenciador : Temporizador*

IniciarMetronomo() : voidPararMetronomo() : voidSetBpm(nBpm : int) : voidAdicionarOuvinte_Tick(pfOuvinteTick : FOuvinteTick*) : void

Figura 23 - Diagrama de classes do Metrônomo.

O processo de notificação do tempo é feito da seguinte forma: a cada instante de tempo, o método Sequenciador::NotificarTick() é chamado para repassar o evento ocorrido aos métodos presentes no vetor Sequenciador::m_vOuvintesTick. Como vimos, quem solicita o serviço de notificação de ticks são os gerenciadores de Execução e de Gravação.

Na modelagem da figura 23 foram apresentados apenas os métodos e atributos relevantes para a solução do problema de seqüenciamento.

Como proposto pelo padrão de projeto Gerenciador, o funcionamento do Metrônomo foi encapsulado na classe GerenciadorMetronomo, que possui uma interface bastante simples de forma a simular o comportamento de um metrônomo real (Iniciar,

-39-

Page 49: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Parar, SetBpm). O GerenciadorMetronomo apresenta outros serviços também como: gerenciar o compasso da música e notificar as batidas à interface gráfica.

4.2.2 Infra-estrutura de MIDI

A infra-estrutura de MIDI encapsula a comunicação com o dispositivo de MIDI (placa de som). Nela é realizado o processo de captura dos eventos MIDI de entrada (i.e., eventos provenientes do violão MIDI). Os eventos recebidos são repassados para o gerenciador de Gravação através do sistema Notificador/Ouvinte descrito anteriormente. Aqui também é realizada a reprodução de eventos MIDI, para fins de playback.

A figura a seguir mostra a modelagem do módulo de gerenciamento MIDI. A interceptação e notificação dos eventos MIDI são feitas pela classe abstrata EntradaMidi (implementada por EntradaMaxMidi) e a classe SaidaMidi (implementada por SaidaMaxMidi) é responsável pela reprodução de eventos MIDI. Todos esses serviços são encapsulados na classe GerenciadorMidi.

EntradaMaxMidi

AbrirEntradaEventos()FecharEntradaEventos()OnMaxMidiIn()

SaidaMaxMidi

TocarNota()PararNota()

EntradaMidim_pfOuvinteEventoMidi : FOuvinteEventoMidi*

<<virtual>> AbrirEntradaEventos() : void<<virtual>> FecharEntradaEventos() : voidSetOuvinte_EventoMidi(pfOuvinteEventoMidi : FOuvinteEventoMidi*) : void

<<implementa>>

SaidaMidim_nVolumePrincipal : intm_aInstrumentos : int[QUANT_CANAIS]m_aVolumes : int[QUANT_CANAIS]

<<virtual>> TocarNota(nCanal : int, nFreqMidi : int, nVolume : int = -1) : void<<virtual>> PararNota(nCanal : int, nFreqMidi : int) : void

<<implementa>>

GerenciadorMidi<<Singleton>>

m_pEntradaMidi : EntradaMidi*m_pSaidaMidi : SaidaMidi*

AbrirEntradaEventosMidi() : voidFecharEntradaEventosMidi() : voidSetOuvinte_EventoMidi(pfOuvinteEventoMidi : FOuvinteEventoMidi*) : voidTocarNota(nCanal : int, nFreqMidi : int, nVolume : int = -1) : voidPararNota(nCanal : int, nFreqMidi : int) : void

-40-

Page 50: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 24 - Diagrama de classes dos componentes de MIDI (captura e reprodução).

4.2.3 Gravação (eventos MIDI)

A gravação é feita de forma a capturar os eventos MIDI provenientes da performance violonística. A sincronização entre a gravação e a execução é feita pelo Metrônomo, que mantém uma contagem única do tempo. O gerenciador de Gravação ouve os instantes de tempo (ticks) do Metrônomo para saber o tempo de entrada de cada evento MIDI em relação ao playback.

Antes de serem armazenados, os eventos MIDI passam por um filtro que realiza uma limpeza e uma posterior quantização15. A limpeza consiste em remover os eventos indesejados que são provocados por ruídos, provavelmente em virtude de restrições tecnológica com o violão MIDI.

GerenciadorGravacao<<Singleton>>

m_nTimeStamp : intm_vEventosMidi : vector<EventoMidi*>

LigarGravacao()DesligarGravacao()GetEventosMidiGravados() : vector<EventoMidi*>&Ouviu_EventoMidi(...) : voidOuviu_Tick(nTimeStamp : int) : void

Fil troEntradam_parametros : ParametrosFiltroEntrada

Aplicar(vEventos : vector<EventoMidi*>&) : void

ParametrosFil troEntrada

Figura 25 - Especificação do gerenciador de Gravação e do filtro de entrada dos eventos.

4.2.4 Execução (playback e reprodução)

Em um processo de seqüenciamento, a informação musical é transformada em eventos ao longo do tempo, e estes são disparados durante a execução para reproduzir um determinado comportamento musical. Elementos comuns a esse processo são o Evento, o Temporizador e o Disparador (responsável por tocar o evento).

Como visto, o seqüenciamento realizado pelo D’Accord Recognizer retira o temporizador dos componentes de seqüenciamento da música. O módulo de execução passa a ser 15 Quantização é o processo de ajustar o instante de cada evento de acordo com uma granularidade de tempo pré-definida. Isso é feito para corrigir erros muito pequenos (na maioria das vezes imperceptíveis) que o músico comete com relação ao tempo de entrada de algumas notas.

-41-

Page 51: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

notificado pelo Metrônomo a cada evento de instante de tempo (tick). Foram reutilizados os componentes de seqüenciamento do D’Accord Violão Player, porém sem o temporizador e sem alguns eventos desnecessários ao Recognizer, visto que ele só precisa reproduzir o conhecimento musical extraído da performance.

A figura a seguir apresenta os componentes do processo de seqüenciamento utilizado pelo sistema.

EventoSolom_nCorda : intm_nCasa : int

EventoAcordem_nIdAcorde : long long intm_strNomeAcorde : string

EventoDedoDireitom_bEventoOn : boolm_nDedo : int

EventoSoloOnm_nDedo : int

EventoSoloOff

Eventom_nTimeStamp : int

DisparadorEventos

TocarEvento()

GerenciadorExecucaom_eventos : vector<Evento*>m_disparadorEventos : DisparadorEventos

LigarExecucao() : voidDesligarExecucao() : voidAdicionarEventos(vEventos : vector<Evento*>) : voidLimparEventos() : voidOuviu_Tick(nTimeStamp : int) : void

<<Singleton>>

Figura 26 – Especificação do seqüenciamento músical.

4.3 Módulo de EdiçãoO módulo de edição é responsável por processar os eventos

MIDI gravados, a fim de extrair o conhecimento musical necessário para a construção da música.

Como exporto anteriormente, um dos principais problemas para o processamento da performance violonística é o fato de ela se caracterizar como uma melodia polifônica de múltiplas vozes (seção 2.2.1). O sistema propôs uma solução, criando um algoritmo que converte uma melodia polifônica de múltiplas vozes em uma melodia polifônica de voz simples. Não foi encontrada na literatura nenhuma solução para esse problema, o que torna imensa a aplicabilidade da

-42-

Page 52: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

conversão frente ao processamento de melodias polifônicas de múltiplas vozes.

Este módulo recebe os eventos MIDI gravados (i.e., performance na forma de melodia de múltiplas vozes), e, antes de aplicar os algoritmos de extração do conhecimento, é feita uma conversão desses eventos em um objeto da classe Performance, que é uma representação interna da performance violonística como uma melodia polifônica de voz simples.

A seguir é apresentada a modelagem da classe Performance, pois ela é a estrutura que engloba os dados musicais a serem processados pelos algoritmos de obtenção do conhecimento musical.

Performancem_elementos : vector<Elemento>

AtrTimeStampAtrAtaque

AtrFrequenciaMidi

AtrDuracao

AtrDedoEsquerdo

AtrDedoDireitoAtrCasa

AtrCorda

Elementom_notas : vector<Nota>

0..*0..*

Atributo

Notam_atributos : vector<Atributo>

1..*1..*

1..*1..*

Figura 27 - Representação da performance violonística(como uma melodia polifônica de voz simples).

O módulo de edição possui como classe de fronteira o GerenciadorEdicao, que encapsula o acesso a todos os algoritmos através de uma simples chamada de método: ‘AssimilarEventosGravados’.

-43-

Page 53: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

IdentificadorAcordesEspecialista

Musicam_sequenciaAcordes : Sequencia<Acorde>m_sequenciaPadroes : Sequencia<Padrao>m_sequenciaSolos : Sequencia<Solo>

IdentificadorAcordesIdentificarAcordes()

<<implementa>>

ExtratorPadroesExtrairPadroes()

FragmentoPerformancem_pPerformance : Performance*m_nElementoInicio : intm_nQuantidadeElementos : int

ExtratorPadroesFLexPet<<implementa>>

GerenciadorEdicao<<Singleton>>

m_pExtratorPadroes : ExtratorPadroes*m_pGeradorDedilhadoMaoEsquerda : GeradorDedilhado*m_pGeradorDedilhadoMaoDireita : GeradorDedilhado*m_pIdentificadorAcordes : IdentificadorAcordes*m_musica : Musica

AssimilarEventosGravados(vEventosMidi : vector<EventoMidi*>&)EventosMidiToPerformance(vEvts : vector<EventoMidi*>&) : Performance*

Performancem_elementos : vector<Elemento>

GeradorDedilhadoMaoDireita

GeradorDedilhadoMaoEsquerdaGeradorDedilhado

GerarDedilhado()

<<implementa>>

<<implementa>>

Figura 28 - Visão geral dos componentes de edição.

A próxima seção apresenta o algoritmo de conversão da melodia da performance violonística. As seções seguintes apresentam a modelagem dos algoritmos utilizados para geração do dedilhado, extração dos padrões e identificação dos acordes, respectivamente.

4.3.1 Conversão de melodia

Para converter uma melodia polifônica de múltiplas vozes em uma de voz simples (GerenciadorEdicao::EventosMidiToPerformance), é preciso localizar os acordes dentre as notas distribuídas irregularmente ao longo do tempo, conforme mostra o exemplo da figura 29.

Acorde 1

-44-

Page 54: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Figura 29 - Localização de acordes em melodias polifônicas de múltiplas vozes.

O algoritmo recebe como entrada os eventos MIDI, e apresenta como saída a mesma informação melódica, porém com as características de uma melodia polifônica de voz simples, que no D’Accord Recognizer é representada pela classe Performance.

O pseudocódigo do algoritmo de conversão de melodias está disponível no Apêndice A.

4.3.2 Gerador de Dedilhado

A geração do dedilhado foi modelada de acordo com os algoritmos apresentados anteriormente no capítulo 3.

GeradorDedilhadoGerarDedilhado()

GeradorDedilhadoMaoDireitaGerarDedilhado(perf ormance : Perf ormance&) : v oidCustoTransicao(posicaoMaoA, posicaoMaoB : char*) : intCustoAplicacao(posicaoMao : char*, corda : int) : int

GeradorDedilhadoMaoEsquerdaGerarDedilhado(perf ormance : Perf ormance&) : v oidPeso(posA, posB : PosicaoDedilhado*) : intEsf orcoVertif cal(posA, posB : PosicaoDedilhado*) : intEsf orcoHorizontal(posA, posB : PosicaoDedilhado*) : int

Figura 30 - Modelagem dos algoritmos de geração de dedilhado.

Para a geração do dedilhado da mão, o custo de transformação (T) adotado pune com custos altos qualquer movimento de dedo, e beneficia com custos baixos posições que se mantêm inalteradas. O custo de aplicação (A) pune com peso infinito (custo máximo) as

Acorde 3

Acorde 2

Tempo

Freq

üênc

ia M

IDI

N1N2N3

N4

N5

N6T1

T3

T2

-45-

Page 55: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

posições que não utilizam a corda passada como parâmetro, e atribui custo zero às posições que utilizarem a corda.

4.3.3 Extrator de Padrões

Os componentes da extração de padrões implementam o FlExPat, algoritmo detalhado no capítulo 3. A modelagem utiliza interface para que a arquitetura do sistema seja extensível, permitindo assim o acoplamento de outros algoritmos de extração de padrões ao sistema, seja para o uso de um novo algoritmo ou para realizar estudos comparativos entre os algoritmos existentes.

ExtratorPadroesFLexPetExtrairPadroes(performance : Performance&) : vector<FragmentoPerformance>ConstruirGrafoEquipolencia(performance : Performance&) : GrafoEquipolencia*ExtrairSubGrafos(GrafoEquipolencia) : vector<FragmentoPerformance>CalcularDissimilaridade(elementoA, elementoB : Elemento) : int

GrafoEquipolencia<<virtual>> SetDissimilaridade(fragmentoA, fragmentoB : FragmentoPerformance; nValor : int)<<virtual>> GetDissimilaridade(fragmentoA, fragmentoB : FragmentoPerformance) : int

GrafoEquipolenciaMatriz

<<realize>>

ExtratorPadroesExtrairPadroes()

Figura 31 - Modelagem da extração de padrões.

4.3.4 Identificador de Acordes

Como visto, o processo de identificação de acordes consiste em obter a informação harmônica e a cifra de cada conjunto de notas dos fragmentos extraídos. A figura a seguir mostra a modelagem que soluciona este problema, que representa a informação harmônica com 32 bits (cada bit correspondendo a um intervalo) e a cifra com uma string.

-46-

Page 56: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

IdentificadorAcordesEspecialistaIdentificarAcordes(padroesRitmicos : vector<FragmentoPerformance>&) : Sequencia<Acorde>GetAcorde(elemento : Elemento&) : AcordeGetInformacaoHarmonica(elemento : Elemento&) : unsigned intGetCifra(nInformacaoHarmonica : unsigned int) : string

IdentificadorAcordes

IdentificarAcordes()

Figura 32 - Modelagem do algoritmo de identificação de acordes.

Foi reutilizado o módulo de identificação de acordes do D’Accord Violão Editor, que implementa a identificação através de cálculos simples para descobrir a informação harmônica e regras para obter a cifra do acorde.

A figura a seguir dá um exemplo de como isso é feito, supondo que o acorde é formado pelas freqüências 60, 63 e 67.

Figura 33 - Obtenção da informação harmônica e da cifra.

5. Conclusões e Trabalhos FuturosO sistema proposto é pioneiro, pois integra diversas soluções

específicas, até então utilizadas isoladamente, para resolver um problema mais amplo: extrair conhecimento musical a partir da execução de um violão. Trata-se de um trabalho original que tem

...60616263646566676869707172...

...T2m23m345b56b67m7MT...

...CC#DD#EFF#GG#AA#BC...

Notasdo acorde

Intervalosdas notas

Nomesdas notas

=> Cm

Regras:(T, 3m, 5) => m

(T, 3m, 5, 7) => m7(T, 3, 7M) => 7M

...

Informação harmônica

-47-

Page 57: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

imensa aplicabilidade prática no contexto dos softwares de IPS para instrumentos de corda, pois utiliza o próprio violão para a produção do conteúdo musical que eles reproduzem.

Durante o planejamento e a especificação do sistema, alguns problemas deram origem a novas propostas de modelagem (e.g., seqüenciamento e gravação simultâneos com o uso de um metrônomo) e um problema em especial resultou na criação de um novo algoritmo: conversão de uma melodia polifônica de múltiplas vozes em uma de voz simples. O que significa que algumas soluções apresentadas por este trabalho vêm contribuir para o crescimento do know-how acadêmico no desenvolvimento de softwares musicais.

Sem dúvida, a característica mais importante do sistema é o uso do violão MIDI como interface para a criação da música. No entanto, alguns aperfeiçoamentos precisam ser feitos com relação à utilização desde instrumento. Provavelmente devido a restrições tecnológicas ou de processamento, ele apresenta como saída dados com bastante ruído (i.e., como notas que não são efetivamente tocadas pelo músico). É preciso que seja dada uma atenção muito especial ao violão MIDI a fim de que esse problema seja superado. A iniciativa deste projeto vem somar-se aos esforços que estão sendo realizados neste sentido.

O sistema pode ser estendido de forma a otimizar também o processo de criação dos outros elementos da música: letra e karaokê. Uma sugestão, e proposta para complementação do sistema, é a aquisição do conteúdo desses elementos da música através de arquivos de karaokê (.st3 e kar), que são encontrados facilmente na internet. Dessa forma, a criação desse conteúdo se resumiria a uma simples importação de arquivo.

-48-

Page 58: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

6. Referências[Cabral, 2001a] G. Cabral, I. Santana, R. Lima, H. Santana, G.

Ramalho. Da Cifra para o Braço: Estudo dos Problemas de Execução Musical em Violão e Guitarra. IX Simpósio Brasileiro de Computação Musical (SBCM’01).

[Cabral, 2001b] G. Cabral, I. Santana, R. Lima, H. Santana, G. Ramalho. Playing Along with D’Accord Guitar. In: VIII Brazilian Symposium on Computer Music, Fortaleza: SBC ed. 2001, p. 858 – 866

[Cabral, 2001c] G. Cabral, I. Santana, R. Lima, H. Santana, G. Ramalho. Modelagem da Execução Musical em Violão e Guitarra. III Encontro Nacional de Inteligência Artificial. Fortaleza: SBC ed . 2001, 1335 – 1343

[Cabral, 2002] G. Cabral. D'Accord Guitar: Um Sistema Para Execução Violonística. Dissertação de Mestrado, Centro de Informátida da Universidade Federal de Pernambuco, Fevereiro de 2002.

[Cambouropoulos, 1999] E. Cambouropoulos; T. Crawford; C. S. Iliopoulos. Pattern Processing in Melodic Sequences: Challenges, Caveats and Prospects. In: Proceedings of the AISB'99 Convention (Artificial Intelligence and Simulation of Behaviour), Edinburgh, UK, 1999.

[Dahia, 2003] M. Dahia, H. Santana, E. Trajano, C. Sandroni, and G. Ramalho. Generating rhythmic accompaniment for guitar: The CyberJoão case study. IX Simpósio Brasileiro de Computação Musical (SBCM’03), p. 2851–2858, Campinas, Agosto de 2003.

[Dahia, 2004] M. Dahia. Gerando Acompanhamento Rítmico Automático para Violão: Estudo de Caso do Cyber-João. Dissertação de Mestrado, Centro de Informátida da Universidade Federal de Pernambuco, Março de 2004.

[Ferreira, 1975] A. B. H. Ferreira. “Novo Dicionário Aurélio da Língua Portuguesa”. Rio de Janeiro: Nova Fronteira.

[Gamma, 1999] E. Gamma, R. Helm, R. Johnson, J. Vlissides, G. Booch. “Design Patterns: Elements of Reusable Object-Oriented Software”. Addison-Wesley, 1999.

[Hsu, 1998] J. Hsu, C. Liu, A. Chen. Efficient repeating pattern finding in music databases. In: ACM 7th International Conference on Information and Knowledge Management, Association for Computing Machinery, 1998, p. 281–288

-49-

Page 59: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

[Levenshtein, 1965] V. Levenshtein. Binary codes capable of correcting deletions, insertions and reversals. Cybernetics and Control Theory, v. 10, 1965, p. 707-710.

[Meredith, 2001a] D. Meredith, G. Wiggins, K. Lemström. A Geometric Approach to Repetition Discovery and Pattern Matching in Polyphonic Music. Computer Science Colloquium, Department of Computer Science, King's College London, 2001

[Meredith, 2001b] D. Meredith, G. Wiggins, K. Lemström. Pattern induction and matching in polyphonic music and other multidimensional datasets. In: Proceedings of the Fifth World Multiconference on Systemics Cybernetics and Informatics (SCI2001), v. 10, Orlando, FL, 2001, p. 61-66

[Messick, 1997] Messick, P. “Music Applications in C++”, Manning, 1997.

[MIDI, 2002] MIDI Manufactures Association (MMA), MIDI 1.0 Specification.Disponível em: http://www.midi.org/.Acesso em 31 de Outubro de 2005.

[Miura, 2002] M. Miura, M. Yanagida. Finger-Position Determination and Tablature Generation for Novice Guitar Players". Proceedings of the 7th International Congerence on Music Perception and Cognition, pp. 701-704, Sydney, 2002.

[Mongeau, 1990] M. Mongeau, D. Sankoff. Comparison of musical sequences. Computer and the humanities. v. 24, 1990, p. 161-175.

[Radicioni, 2005] D. Radicioni, V. Lombardo. Guitar fingering for music performance. Proceedings of the International Computer Music Conference ICMC'05, Barcelona, Spain, September, 2005

[Rolland, 2001] P. Y. Rolland. FlExPat: Flexible extraction of sequential patterns. In Cercone, N., Lin, T. Y., andWu, X., editors, Proceedings of the 2001 IEEE International Conference on Data Mining (ICDM’01), pages 481–488. IEEE Computer Society.

[Sommerlad, 1998] P. Sommerlad. “The Manager Design Pattern, Pattern Languages of Program Design 3”, Addi-son-Wesley, 1998.

[Santana, 2003] H. Santana, M. Dahia, E. Trajano, and G. Ramalho. VExPat: An analysis tool for the discovery of musical patterns. IX Simpósio Brasileiro de Computação Musical (SBCM’03), p. 2859–2866, Campinas, Agosto de 2003.

[Trajano, 2004] E. Trajano, M. Dahia, H. Santana, and G. Ramalho; Automatic discovery of right hand fingering in guitar

-50-

Page 60: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

accompaniment. In Proceedings of the International Computer Music Conference (ICMC’04), pages 722–725.

-51-

Page 61: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Apêndice A – Algoritmo de conversão de melodia polifônica de múltiplas vozes em melodia polifônica de voz simples

-52-

Page 62: Proposta de Trabalho de Graduaçãotg/2005-2/asas.doc · Web viewA extração dos acordes consiste em identificar quais acordes são formados por cada um desses conjuntos de notas

Algoritmo: Entrada: Seqüência de eventos MIDI (M) (i.e., melodia de múltiplas vozes) Saída: Performance (P) (i.e., melodia de voz simples, vide modelagem)

‘evento aberto’ significa: midiOn sem seu respectivo midiOff ‘evento fechado’ significa: midiOn com seu respectivo midiOff

Passo 1: Criar conjunto vazio EI com todos os Eventos MIDI de um dado instante Passo 2: Criar conjunto vazio EE com os Eventos MIDI do elemento em formação Passo 3: Criar conjunto vazio NE com as Notas do Elemento em formação

Passo 4: Para cada timestamp (instante) ‘t’

Passo 4.1: EI = { evento M, evento.nTimeStamp = ‘t’}

Passo 4.2: Para cada midiOff EI Passo 4.2.1: EE {midiOff} Passo 4.2.2: midiOn = GetMidiOn(midiOff) Passo 4.2.3: nota = Nota(midiOn, midiOff.nTimeStamp) Passo 4.2.4: NE {nota}

Passo 4.3: se ( midiOn EI e midiOff EE) ou ( midiOn EE, midiOn é evento fechado)

Passo 4.3.1: Para cada evento aberto midiOn EE Passo 4.3.1.1: nota = Nota(midiOn, ‘t’) Passo 4.3.1.2: NE {nota}

Passo 4.3.2 elemento = Elemento(NE) Passo 4.3.3 P {elemento}

Passo 4.3.4 EE = EE - {eventos fechados de EE} Passo 4.3.5: NE =

Passo 4.3.6: Para cada midiOn EE Passo 4.3.6.1: midiOn.nTimeStamp = ‘t’

Passo 4.4: Para cada midiOn EI Passo 4.4.1: EE {midiOn}

Passo 5: Retorna P.

-53-