77
Composi¸c˜ ao Algor´ ıtmica:Gera¸c˜ ao de Solos de Blues Utilizando Modelos Markovianos Dhiego Souto Andrade Universidade Federal de Ouro Preto Monografia submetida ao Curso de Ciˆ encia da Computa¸c˜ ao da Universidade Federal de Ouro Preto paraobten¸c˜ ao do t´ ıtulo de bacharel em Ciˆ encia da Computa¸c˜ ao

Composição Algorítmica: Geração de Solos de Blues

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Composição Algorítmica: Geração de Solos de Blues

Composicao Algorıtmica: Geracao deSolos de Blues Utilizando Modelos

Markovianos

Dhiego Souto AndradeUniversidade Federal de Ouro Preto

Monografia submetida ao

Curso de Ciencia da Computacao

da Universidade Federal de Ouro Preto

para obtencao do tıtulo de bacharel em Ciencia da Computacao

Page 2: Composição Algorítmica: Geração de Solos de Blues

ii

Page 3: Composição Algorítmica: Geração de Solos de Blues

Dedico este trabalho a minha mae, exemplo de determinacao e coragem.

iii

Page 4: Composição Algorítmica: Geração de Solos de Blues

iv

Page 5: Composição Algorítmica: Geração de Solos de Blues

Composicao Algorıtmica: Geracao de Solos de Blues

Utilizando Modelos Markovianos

Resumo

Este trabalho descreve como compor solos de blues utilizando modelos Markovianos.

Serao compostos licks (pequenas sequencias de notas musicais) pelo software Guitar Pro,

atraves de tablaturas, para criar um banco de dados de licks. Em seguida a cadeia de

Markov ira mapear as probabilidades de uma nota acontecer apos uma outra se baseando

nas notas dos licks do banco. A partir deste mapeamento, uma tecnica de Selecao por

Roleta ira selecionar estocasticamente as notas mapeadas pela cadeia, gerando assim

uma nova sequencia de notas. Serao abordados tres metodos novos para a composicao.

Serao utilizadas cadeias com diferentes ordens para gerar os solos. Tambem sera estudado

um valor limiar que ira influenciar na ordem das cadeias, quando forem de ordens maiores

que 1. Este limiar ira reduzir a ordem da cadeia quando uma possıvel nota sucessora

tiver um numero de ocorrencias menor que o valor deste limiar.

v

Page 6: Composição Algorítmica: Geração de Solos de Blues

vi

Page 7: Composição Algorítmica: Geração de Solos de Blues

Composicao Algorıtmica: Geracao de Solos de Blues

Utilizando Modelos Markovianos

Abstract

This work describes a way to compose blues solos using a Markov chain. Licks (short

sequences of musical notes) will be composed by the Guitar Pro software, through tabs,

to populate a database. Then the Markov chain will map the probability of a note

happening after another, based on the notes of the database licks. From this mapping,

the Roulette selection technique will stochastically select the notes mapped in the chain,

generating a new sequence of notes. Three new methods for composition are used in

this work. Markov chains of different orders will be trained to generate the solos. A

threshold value that will influence the orders of the Markov chains is also studied in this

work, when they have orders greater than 1. This threshold will reduce the order of the

chain when a possible successor note has a smaller number of occurrences than the value

of this threshold.

vii

Page 8: Composição Algorítmica: Geração de Solos de Blues

viii

Page 9: Composição Algorítmica: Geração de Solos de Blues

Declaracao

Esta dissertacao e resultado de meu proprio trabalho, exceto onde referencia explıcita e

feita ao trabalho de outros, e nao foi submetida para obtencao de tıtulo nesta nem em

outra universidade.

Dhiego Souto Andrade

ix

Page 10: Composição Algorítmica: Geração de Solos de Blues

x

Page 11: Composição Algorítmica: Geração de Solos de Blues

Agradecimentos

Agradeco a minha mae, pelo apoio, confianca e incentivo aos estudos.

Agradeco a minha famılia, pelos conselhos e consideracao.

Agradeco aos amigos pela companhia e bons momentos.

Agradeco ao Alan, meu orientador, pela paciencia.

Agradeco aos professores do DECOM e da UFOP pelos ensinamentos.

Agradeco a UFOP, pela educacao e toda assistencia.

Agradeco a republica Manicomio pelo abrigo nesses anos de UFOP.

Agradeco ao blues, vida simples, verdadeira.

Muito obrigado.

xi

Page 12: Composição Algorítmica: Geração de Solos de Blues

xii

Page 13: Composição Algorítmica: Geração de Solos de Blues

Sumario

Lista de Figuras xvii

Nomenclatura 1

1 Introducao 3

1.1 Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3 Contribuicoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.4 Organizacao do Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Revisao da Literatura 7

2.1 Modelos de Markov em Composicao Algorıtmica . . . . . . . . . . . . . . 7

2.2 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Cadeia de Markov 11

3.1 Formulacao Matematica . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Exemplo de um modelo Markoviano para representar mudancas climaticas 13

3.3 Modelos Markovianos e suas ordens . . . . . . . . . . . . . . . . . . . . . 15

3.4 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Conceitos Musicais e Midifile 17

xiii

Page 14: Composição Algorítmica: Geração de Solos de Blues

4.1 Conceitos Musicais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.1.1 Notas musicais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.1.2 Altura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.1.3 Tom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.2 Tablatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.3 Esboco da estrutura padrao de um arquivo MIDI . . . . . . . . . . . . . 21

4.4 As classes da biblioteca Midifile . . . . . . . . . . . . . . . . . . . . . . . 22

4.4.1 Classe TickTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.4.2 Classe MFEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.4.3 Classe Midifile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.5 Representando uma melodia com a classe Midifile . . . . . . . . . . . . . 26

4.6 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 Metodologia 27

5.1 Guitar Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5.2 Arranjo Associativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.2.1 Definicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.2.2 Arvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.2.3 Conteiner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.2.4 Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.2.5 Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.3 Utilizando o Conteiner Map para representar uma cadeia de Markov . . . 33

5.3.1 Representacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.3.2 Algoritmo de treinamento a partir de sequencias . . . . . . . . . . 34

5.3.3 Algoritmo de geracao de sequencias . . . . . . . . . . . . . . . . . 34

xiv

Page 15: Composição Algorítmica: Geração de Solos de Blues

5.4 Analisando a influencia de um limiar na definicao da ordem da cadeia de

Markov ao gerar os solos . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5.5 Metodos de Representacao de Melodias . . . . . . . . . . . . . . . . . . . 38

5.6 Teste de Friedman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.7 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6 Resultados 43

6.1 Testando a consistencia da cadeia de Markov com inteiros e caracteres . . 43

6.2 Treinando cadeias de Markov com parametros diferentes . . . . . . . . . 44

6.3 Regras para a geracao dos solos . . . . . . . . . . . . . . . . . . . . . . . 45

6.4 Avaliando novos solos baseados nos licks do guitarrista Johnny Winter . 47

6.5 Conclusao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7 Conclusoes e Trabalhos Futuros 55

Referencias Bibliograficas 57

Indice Remissivo 59

xv

Page 16: Composição Algorítmica: Geração de Solos de Blues

xvi

Page 17: Composição Algorítmica: Geração de Solos de Blues

Lista de Figuras

3.1 Cadeia de Markov representada por um grafo . . . . . . . . . . . . . . . 13

3.2 Cadeia de Markov de ordem 2 . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3 Cadeia de Markov de ordem 3 . . . . . . . . . . . . . . . . . . . . . . . . 16

4.1 Exemplo Tablatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2 Tablatura com bend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.3 Tablatura com slide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.4 Tablatura com vibrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.5 Tablatura com hammer . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.1 Interface do Guitar Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.2 Arranjo Associativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3 Arvore binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.4 Arvore ternaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.5 Busca binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.6 Arranjo associativo representado por uma arvore . . . . . . . . . . . . . . 32

5.7 Representacao de uma Cadeia de Markov . . . . . . . . . . . . . . . . . . 34

5.8 Exemplo de como encontrar uma cadeia de ordem menor . . . . . . . . . 36

5.9 Exemplo de como o limiar reduz a ordem da cadeia . . . . . . . . . . . . 37

xvii

Page 18: Composição Algorítmica: Geração de Solos de Blues

xviii LISTA DE FIGURAS

5.10 Representacao de uma melodia atraves de uma partitura e uma tablatura 38

5.11 Sequencia TND, onde o primeiro numero representa o tempo que a nota

e tocada, o segundo a respectiva nota e a terceira a sua duracao. . . . . . 39

5.12 Sequencia ND, onde o primeiro numero representa a nota e o segundo a

sua duracao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5.13 O vetor de inteiros representa as notas e o vetor de numeros reais as

duracoes de uma nota . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.14 Tabela Friedman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5.15 Tabela Friedman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6.1 Cadeia de Markov TND de ordem 3 . . . . . . . . . . . . . . . . . . . . . 44

6.2 Cadeia de Markov N de ordem 1 . . . . . . . . . . . . . . . . . . . . . . . 45

6.3 Cadeia de Markov D de ordem 1 . . . . . . . . . . . . . . . . . . . . . . . 46

6.4 Cadeia de Markov ND de ordem 2 . . . . . . . . . . . . . . . . . . . . . . 46

6.5 Exemplo de tablatura de um novo solo TND de ordem 2 . . . . . . . . . 47

6.6 Exemplo de tablatura de um novo solo ND de ordem 1 . . . . . . . . . . 48

6.7 Exemplo de tablatura de um novo solo N&D de ordem 3 . . . . . . . . . 48

6.8 Melhor solo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6.9 Pior solo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Page 19: Composição Algorítmica: Geração de Solos de Blues

Nomenclatura

CE Computacao Evolutiva

IA Inteligencia Artificial

SMF Standard MIDI File

MIDI Musical Instrument Digital Interface

CA Composicao Algorıtmica

1

Page 20: Composição Algorítmica: Geração de Solos de Blues

2

Page 21: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 1

Introducao

“O blues e o lamento dos oprimidos, o grito de independencia, a paixao dos lascivos, a

raiva dos frustrados e a gargalhada do fatalista. E a agonia da indecisao, o desespero

dos desempregados, a angustia dos destituıdos e o humor seco do cınico. O blues e a

emocao pessoal do indivıduo que encontra na musica um veıculo para se expressar.”

— Paul Oliver, 1927

A composicao algorıtmica vem ha mais de um seculo ajudando a compreender e

desenvolver o campo matematico da teoria musical. E uma forma de inovacao musical,

facilitando o aprendizado e expandindo as tecnicas de composicao. Algoritmos ja haviam

sido utilizados por artistas como Mozart e John Cage para compor algumas de suas

obras, segundo Nierhaus (2009). Mozart utilizava dados para compor, arremessando-os

e se baseando no numero tirado para escolher as notas. Enquanto Cage jogava moedas

para compor, escolhendo as notas e suas duracoes de acordo com o lado das moedas que

tirava.

Uma base de dados de licks de blues serao compostos com a ajuda de um software

chamado Guitar Pro. Este software permite a composicao de partituras e tablaturas.

Pela sua facilidade de interpretacao, a composicao em tablaturas foi escolhida. Inicial-

mente todos os licks serao criados em la, por ser um tom bastante comum no blues e

por ser mais facil de ser tocado em uma guitarra. Os licks compostos serao exportados

em formato MIDI (Musical Instrument Digital Interface) atraves do Guitar Pro e clas-

sificados de acordo com seus autores. Licks de um grande guitarrista do blues, Johnny

Winter, serao utilizados para compor a base de dados deste trabalho.

3

Page 22: Composição Algorítmica: Geração de Solos de Blues

4 Introducao

Uma biblioteca em C++ chamada Midifile, que possibilita a manipulacao de arquivos

MIDI, sera utilizada para realizar importacoes e exportacoes dos licks. As cadeias de

Markov irao mapear as probabilidades de uma certa nota musical acontecer depois de

uma outra, ou seja, apos uma determinada nota sera mapeado todas as ocorrencias de

notas que a sucedem e o numero de suas ocorrencias. Serao criados modelos Markovianos

de n ordens, onde o n significa o numero de notas que precedem a nota a ser mapeada.

Apos o mapeamento, sortearemos entre as notas que sucedem um elemento vazio, isto e,

as primeiras notas das sequencias treinadas pela cadeia, para a composicao do solo. As

proximas notas a se integrarem ao novo solo serao eleitas dentre as notas que sucedem a

ultima nota eleita de acordo com a cadeia de Markov. Porem as notas que tiverem maior

ocorrencia terao maior probabilidade de serem escolhidas, onde a selecao por roleta sera

a tecnica abordada para sorteio das notas.

Serao construıdas cadeias com ordens variaveis, isto e, sera definido um valor limiar

que ira influenciar na ordem da cadeia. Caso uma nota que pode ser escolhida para

compor o solo tenha um numero de ocorrencias menor que este valor limiar, a cadeia

reduzira sua ordem ate que haja uma nota com o numero de ocorrencias maior que este

limiar, ou ate que a cadeia reduza ate a ordem 1. Quando a cadeia reduz sua ordem ate

a ordem 1, o limiar nao influencia mais e qualquer nota pode ser escolhida independente

do seu numero de ocorrencias na cadeia. Esta tecnica e abordada pela dificuldade de

encontrar uma ordem ideal para a geracao dos solos, pois ordens muito altas tendem a

gerar copias e ordens muito baixas nao conseguem fazer uma boa inducao.

As cadeias de Markov criadas poderao ter licks de um guitarrista especıfico, tentando

imitar as caracterısticas deste artista, ou ainda poderao ser formadas por juncoes de

varios guitarristas para tentar inovar nas caracterısticas dos solos.

Este e um trabalho que forma a continuacao de trabalhos passados (Biles 1994,

Verbeurgt, Dinolfo & Fayer 2004), porem com uma especificidade voltada para o blues.

1.1 Motivacao

Alguns computadores vem ao longo do tempo tentando imitar a acao humana. Um

grande desafio e implantar a criatividade em uma maquina. A composicao musical pode

se basear em algoritmos nao determinısticos, e teve Mozart como pioneiro na utilizacao

de algoritmos para compor.

Este trabalho tem como grande motivacao a simulacao da criatividade em uma

maquina atraves de algoritmos e tecnicas computacionais, com o intuito de aproximar

Page 23: Composição Algorítmica: Geração de Solos de Blues

Introducao 5

ao maximo da criatividade humana. O teste de Turing sera feito com algumas pessoas

para nos ajudar a perceber o quanto a maquina se aproximou do ser humano.

1.2 Objetivos

Os principais objetivos deste trabalho sao:

• Compor solos de blues atraves de tecnicas computacionais

• Simular a criatividade em uma maquina

• Reproduzir estilos de composicao de grandes guitarristas

• Facilitar o aprendizado de iniciantes para compor solos

• Avaliar os solos gerados

• Comparar os solos gerados em diferentes ordens da cadeia de Markov

• Reproduzir em forma de audio os solos gerados

1.3 Contribuicoes

As principais contribuicoes desta monografia sao:

• Estudo do efeito que a ordem dos modelos Markovianos influenciam na composicao

dos solos

• Simulacao de composicoes com caracterısticas de grandes guitarristas do blues

• Facilitar o aprendizado de iniciantes em composicao

• Criacao de uma biblioteca que auxilia a composicao de solos de blues

1.4 Organizacao do Texto

No Capıtulo 2, e apresentado uma revisao sobre os trabalhos que utilizaram os mo-

delos Markovianos para compor.

No Capıtulo 3, e mostrada a definicao da cadeia de Markov e suas aplicacoes.

Page 24: Composição Algorítmica: Geração de Solos de Blues

6 Introducao

No Capıtulo 4, e detalhada a interface da biblioteca Midifile. Seus metodos e atri-

butos sao explicados, assim como sua estrutura.

No Capıtulo 5 e apresentada a metodologia do trabalho. Alguns conceitos sobre

musica e estrutura de dados sao apresentados para melhor entendimento do leitor. As

ferramentas utilizadas neste trabalho e a classe implementada sao discutidas aqui.

No Capıtulo 6 sao apresentados os experimentos e os resultados obtidos.

No Capıtulo 7 e discutida a conclusao sobre este trabalho.

Page 25: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 2

Revisao da Literatura

“A musica nao mente. Se tem algo a ser mudado neste mundo, isso so vai ser possıvel

atraves da musica.”

— Jimi Hendrix, 1942-1970

Neste capıtulo, apresentaremos trabalhos passados que realizaram composicoes al-

gorıtmicas utilizando modelos Markovianos.

2.1 Modelos de Markov em Composicao Algorıtmica

Os modelos Markovianos em composicao algorıtmica analisam os diferentes estados

de um determinado acervo, e extraem as probabilidades de transicao entre si. Baseando

nas probabilidades extraıdas e possıvel gerar uma sequencia de novos estados.

Segundo Nierhaus (2009), por volta do ano de 1950, Harry F. Olson (1901 - 1982) foi

o primeiro homem a analisar o comportamento das cadeias de Markov em composicao

algorıtmica. Olson foi um engenheiro eletrico e desenvolveu o “Sintetizador Musical

Eletronico” no ano de 1955, em parceria com Henry Belar. Olson analizou onze melodias

e produziu modelos Markovianos de primeira e segunda ordem em relacao as notas e

ritmos das melodias. Olson notou que modelos Markovianos de segunda ordem geram

melodias mais harmoniosas do que de primeira ordem.

Brooks, Hopkins, Neumann & Wright (1957) utilizaram 37 melodias de corais de

estruturas rıtmicas similares para desenvolver um modelo Markoviano com analises e

geracoes subsequentes dessas melodias. As 37 melodias eram 4/4, comecavam no quarto

7

Page 26: Composição Algorítmica: Geração de Solos de Blues

8 Revisao da Literatura

tempo do compasso, a duracao de suas notas equivaliam a no mınimo uma colcheia,

as notas com a altura de 4 oitavas eram representadas por inteiros entre 2 e 99, onde

os numeros pares representam um evento de uma nova nota e os ımpares uma nota

que transitou de uma anterior. Para a realizacao desta analise todas as melodias foram

transpostas para do maior. A partir do conjunto de melodias, modelos Markovianos de

ate oitava ordem foram criados e representados em forma de octagramas. O numero de

ocorrencias de cada sequencia de oito notas tambem foram armazenados. Na geracao do

material musical algumas condicoes foram estabelecidas, como a proibicao de pausas em

algumas posicoes do compasso e as melodias deveriam terminar com uma determinada

escala de notas. Este estudo aponta 3 problemas que podem ocorrer com as estruturas

geradas pela cadeia de Markov:

• Os modelos de ordem mais baixa geram sequencias com uma aleatoriedade notavel

• Cadeias de ordem mais alta tem numero de opcoes limitado

• Sao desnecessarias analises de cadeias de ordem mais alta quando as melodias sao

bastante similares

A cadeia de Markov foi a pioneira nos processos de composicao algorıtmica. (Hiller &

Isaacson 1979) foi o primeiro trabalho a registrar o uso de algoritmos para a composicao

de musicas em um computador. Hiller & Isaacson (1979) desenvolveram um sistema

que gera notas musicais aleatorias utilizando modelos Markovianos. Este sistema foi

chamado de Illiac Suite e teve sua primeira performance no ano de 1956, ficando fa-

moso como o primeiro computador compositor. O Illiac Suite consiste em 4 acoes que

correspondem a 4 experimentos. O primeiro experimento gera cantus firmi, isto e, me-

lodias diatonicas simples a serem utilizadas para a producao de polifonia simples. No

segundo experimento algumas regras foram estabelecidas na geracao do cantus firmi. O

terceiro experimento baseou-se em demonstrar que um computador pode produzir no-

vas estruturas musicais em um estilo mais contemporaneo e codificar alguns elementos

musicais como ritmo e algumas dinamicas. E o quarto experimento consiste em tecnicas

de analise musical, como os modelos Markovianos, para produzir diferentes especies de

musica.

Em (Papadopoulos & Wiggins 1999) e feita uma revisao crıtica sobre varios algorit-

mos usados para composicao musical. Sao mostradas as principais vantagens e desvan-

tagens. As cadeias de Markov sao mencionadas como um dos algoritmos mais antigos

Page 27: Composição Algorítmica: Geração de Solos de Blues

Revisao da Literatura 9

usados em composicao e caracterizadas por sua facilidade de composicao em diferentes

generos.

Xenakis (1992) utiliza os modelos Markovianos para organizar segmentos de diferen-

tes dinamicas. Esses segmentos, chamados de “screens”consistem em sons com diferentes

dinamicas e um grupo de instrumentos. Uma cadeia de Markov e construıda definindo

as probabilidades de transicao entre os “screens”.

Feijao (2004) criou um algoritmo para compor solos de jazz em tempo real. Nele

foram implementadas tecnicas utilizadas por musicos durante os seus improvisos usando

varias regras. Se baseando em tecnicas utilizadas pelo musico durante o seu solo, um

novo modelo estocastico representado por uma cadeia de Markov ira reproduzir solos.

O usuario ira avaliar a saıda do algoritmo em tempo real, desta forma um processo de

aprendizado ira alterar os parametros da cadeia de Markov como forma de aprendizado.

O objetivo do artigo (Verbeurgt, Dinolfo & Fayer 2004) foi realizar uma nova abor-

dagem em CA (Composicao Algorıtmica) atraves de tecnicas de extracao de padroes.

Serao extraıdos padroes de composicoes ja existentes para representar o conjunto de

estados de um modelo Markoviano. As probabilidades de transicao da cadeia de Markov

serao definidas pelas sequencias musicais dessas composicoes. A tecnica de deteccao de

padroes leva em consideracao 3 dimensoes: tempo, nota e duracao. Padroes de notas

sao considerados equivalentes quando ha mudanca no tempo e na duracao de todas as

notas. Apos a extracao desses padroes e feita a cadeia de Markov, o objetivo de Ver-

beurgt, Dinolfo & Fayer (2004) e compor musicas novas. O grande desafio encontrado

neste trabalho foi sequenciar os padroes de tal forma a preservar a solidez musical.

2.2 Conclusao

Nesta secao sao apresentados alguns trabalhos que utilizaram os modelos Marko-

vianos para compor melodias, que por sinal foi pioneiro nos processos de composicao

algorıtmica, se mostrando bastante eficaz na composicao de musicas de generos variados

segundo (Papadopoulos & Wiggins 1999). Brooks, Hopkins, Neumann & Wright (1957)

concluıram que as cadeias de Markov de ordem muito baixa geram sequencias com uma

aleatoriedade notavel e as cadeias de ordem mais alta tem numero de opcoes limitado.

Assim, este e um problema historico, portanto sera estudado uma ordem intermediaria

para gerar os solos de blues, ou mesclar as ordens baixas com as altas.

Page 28: Composição Algorítmica: Geração de Solos de Blues

10

Page 29: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 3

Cadeia de Markov

“O blues e como um planeta. E um topico enorme. Voce nao pode ignorar o impacto que

ele teve e continua a ter em toda a cultura musical. E uma arvore em que todo mundo

esta balancando. Sem ela, eu nao sei onde eu estaria. E indelevel e indispensavel.”

— Tom Waits, 1949

As cadeias de Markov foram criadas pelo matematico russo Andrey Andreyevich

Markov. Nascido em Ryazan em 1856, foi professor da Universidade de S. Petersburgo,

e pioneiro nos processos estocasticos (conjunto de variaveis aleatorias indexadas a ele-

mentos pertencentes a um intervalo temporal). A cadeia de Markov e um processo

randomico onde o proximo estado depende unicamente do estado atual e pode ser apli-

cado em processos da nossa realidade para levantar dados estatısticos. Partindo de um

estado, existe uma matriz de probabilidades que definira o proximo estado. As mudancas

de um estado para outro sao chamadas de transicoes e as probabilidades associadas as

mudancas sao chamadas de probabilidades de transicao.

Segundo Dimuro, Reiser, Costa & Souza (2002), os processos markovianos sao mode-

lados formalmente por sistemas de transicoes de estados, onde os estados sao represen-

tados em termos de seus vetores probabilısticos, que podem variar no espaco temporal

(discreto ou contınuo), e as transicoes entre estados sao probabilısticas e dependem

apenas do estado corrente.

11

Page 30: Composição Algorítmica: Geração de Solos de Blues

12 Cadeia de Markov

3.1 Formulacao Matematica

Considere uma cadeia de Markov com N estados xn ∈ I, onde I e o espaco de estados

discreto da cadeia de Markov e sejam xi, xj ∈ I. Denota-se xi(t) para significar que o

processo esta no estado xi no tempo t. Se Pij e a probabilidade de transicao do estado

xi(t) para o estado xj(t+ 1), entao a matriz N ×N , dada por P = [pij], denomina-se a

matriz de transicao da cadeia de Markov.

A Tabela 3.1 e uma matriz de transicoes podendo ser interpretada da seguinte forma:

as linhas representam os estados atuais, as colunas os estados futuros e os valores

numericos sao as probabilidades de transicao entre os estados. Por exemplo a estado

estado atual 1 tem 40% de ir para o estado estado futuro 1, 30% de ir para o estado

estado futuro 2 e outros 30% de ir para o estado futuro 3, e assim analogamente para as

outras linhas. Note que para que a matriz seja consistente a soma dos valores de cada

linha deve ser igual a 1 e nao deve haver valores negativos.

Tabela 3.1: Matriz de transicao

estado futuro 1 estado futuro 2 estado futuro 3

estado atual 1 0,4 0,3 0,3

estado atual 2 0,7 0,1 0,2

estado atual 3 0,5 0,5 0

A matriz de transicao tambem pode ser dada por um diagrama de transicoes de

estados, isto e, um grafo (estrutura representada por vertices e arestas). A Figura 3.1

e um modelo Markoviano onde os vertices representam notas musicais e as arestas a

probabilidade de uma nota musical suceder outra. Neste exemplo podemos ver que a

partir do estado E, existe uma probabilidade de 30% de se continuar no estado E, 50%

de transicao para o estado A e 20% para o estado B. Partindo do estado A, temos 30%

de se continuar no estado A, 60% de transicao para o estado E e apenas 10% para o

estado B. Finalmente, a partir do estado B temos 30% de probabilidade de permanecer

no mesmo estado B, outros 30% de ir para o estado A e 40% de transicao para o estado

E.

Duas propriedades devem ser satisfeitas para que um grafo possa ser considerado um

modelo Markoviano:

Page 31: Composição Algorítmica: Geração de Solos de Blues

Cadeia de Markov 13

0.5

0.3

0.2

0.4

0.3

0.3

0.1

0.6

0.3

E A

B

Figura 3.1: Cadeia de Markov representada por um grafo

• A soma dos valores das arestas que saem do grafo devem ser iguais a 1, ou seja,

arestadesaida1 + arestadesaida2 + · · ·+ arestadesaidan = 1.

• Os valores dos arcos do grafo devem ser nao negativos.

3.2 Exemplo de um modelo Markoviano para represen-

tar mudancas climaticas

Vejamos um exemplo simples de uma cadeia de Markov modelada para representar

a mudanca de tempo, ou seja, as transicoes entre dias chuvosos e ensolarados. Vamos

considerar a seguinte matriz

P =

0, 67 0, 5

0, 33 0, 5

(3.1)

onde a primeira coluna representa as probabilidades de transicao de um dia chuvoso

para um dia chuvoso (67%) ou ensolarado (33%). A segunda coluna representa as pro-

babilidades de transicao de um dia ensolarado para um dia chuvoso (50%) ou ensolarado

(50%).

Page 32: Composição Algorítmica: Geração de Solos de Blues

14 Cadeia de Markov

Vamos supor o dia 0 como chuvoso e representa-lo atraves do vetor de estado inicial

V (0) =

1

0

(3.2)

que indica uma probabilidade de 100% do dia ser chuvoso. O tempo no dia 1 pode

ser deduzido atraves da multiplicacao V ×P , isto e:

V (1) = V (0)P =

0, 67 0, 5

0, 33 0, 5

1

0

=

0, 67

0, 33

(3.3)

Isto significa que o dia 1 tem 67% de chance de continuar chuvoso e 33% de chance

de ser ensolarado.

Analogamente,

V (2) = V (1)P =

0, 67 0, 5

0, 33 0, 5

0, 67

0, 33

=

0, 614

0, 386

V (3) = V (2)P =

0, 67 0, 5

0, 33 0, 5

0, 614

0, 386

=

0, 604

0, 396

V (4) = V (3)P =

0, 67 0, 5

0, 33 0, 5

0, 604

0, 396

=

0, 603

0, 397

V (5) = V (4)P =

0, 67 0, 5

0, 33 0, 5

0, 603

0, 397

=

0, 603

0, 397

(3.4)

Page 33: Composição Algorítmica: Geração de Solos de Blues

Cadeia de Markov 15

De acordo com o Exemplo 3.5, a formula geral e.

V (n) = V (0)P (n) = V (n−1)P (3.5)

Note que para obter as probabilidades do dia n e necessario obter as probabilidades dos n

dias anteriores. Tambem podemos perceber que a partir do quarto dia o vetor de estado

do sistema nao se altera, neste caso podemos dizer que o processo de Markov atingiu o

equilıbrio (nem todos os modelos Markovianos atingem o equilıbrio). Este vetor fixo e

chamado de vetor de estado estacionario, isto e, seu fluxo de entrada e igual ao seu fluxo

de saıda.

3.3 Modelos Markovianos e suas ordens

Os modelos Markovianos podem ser de n ordens. Dizer que uma cadeia de Markov e

de primeira ordem significa dizer que o estado futuro depende apenas do estado anterior.

Dizer que e de segunda ordem significa dizer que o estado futuro depende dos dois estados

anteriores. Resumindo, um modelo Markoviano de ordem n implica que um estado futuro

e dependente dos n estados anteriores.

Neste trabalho serao criados modelos Markovianos de ordem n. Isto e, poderemos

definir o numero de estados anteriores dos quais o estado futuro dependera.

A Figura 3.2 ilustra um modelo Markoviano de ordem 2, onde as notas F 1 e C sao

tocadas 2 vezes (40% das vezes) e 3 vezes (60% das vezes), respectivamente, apos a

sequencia das notas D e C. Da mesma forma a nota G e tocada 5 vezes (100% das vezes)

apos a sequencia das notas A e B.

Ja a Figura 3.3 ilustra um moledo Markoviano de ordem 3, onde as notas G e A

sao tocadas 1 vez (12.5% das vezes) e 7 vezes (87.5% das vezes), respectivamente, apos

a sequencia das notas D, F e G. Da mesma forma as notas B e G sao tocadas 4 vezes

(44.44% das vezes) e 5 vezes (55.66% das vezes), respectivamente, apos a sequencia das

notas C, D e F.

As diferentes ordens influenciam na harmonia e diversidade das musicas compostas

pelos modelos Markovianos.

1Usualmente a notacao musical anglo-saxonica e utilizada, onde as letras A, B, C, D, E, F, Grepresentam as notas la, si, do, re, mi, fa e sol, respectivamente

Page 34: Composição Algorítmica: Geração de Solos de Blues

16 Cadeia de Markov

DC AB

[F,2] [C,3] [G,5]

Figura 3.2: Cadeia de Markov de ordem 2

DFG CFD

[G,1] [A,7] [G,5][B,4]

Figura 3.3: Cadeia de Markov de ordem 3

3.4 Conclusao

Com o estudo das cadeias de Markov, podemos concluir que e possıvel representar um

modelo onde os estados representam notas musicais. As transicoes seriam as mudancas

de notas. As probabilidades de transicao podem ser definidas pelo numero de vezes

que uma nota sucedeu outra. Cadeias de Markov de varias ordens serao criadas, com

o intuito de encontrar as ordens que geram solos mais harmonicos e diversos. Assim

teremos um conhecimento previo de quais direcoes iremos seguir na fase de composicao

de novos solos.

Page 35: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 4

Conceitos Musicais e Midifile

Neste capıtulo falaremos sobre alguns conceitos musicais importantes para o entendi-

mento deste trabalho.Tambem sera introduzido o conceito de uma ferramenta funda-

mental para o desenvolvimento deste trabalho, a Midifile.

4.1 Conceitos Musicais

Para dar inıcio a este trabalho alguns conceitos sobre teoria musical serao explicados

nesta secao para um melhor entendimento do leitor.

4.1.1 Notas musicais

O conceito de uma nota musical depende do conceito de frequencia. Frequencia e uma

grandeza da fısica que indica o numero de oscilacoes da onda em um determinado tempo.

As frequencias que determinam as notas. A onda de uma frequencia e constituıda por:

• Amplitude: determina a altura da onda, ou seja, o seu tamanho vertical.

• Comprimento: distancia entre valores repetidos sucessivos num padrao de onda.

Uma nota musical e o termo usado para medir uma frequencia musical. Podemos rela-

cionar as notas a um alfabeto musical que possibilita associar determinadas frequencias.

A escala diatonica e composta por sete notas musicais:

• do, representada pela letra C e com frequencia de 261.625519 Hz.

• re, representada pela letra D e com frequencia de 293.664734 Hz.

17

Page 36: Composição Algorítmica: Geração de Solos de Blues

18 Conceitos Musicais e Midifile

• mi, representada pela letra E e com frequencia de 329.627533 Hz.

• fa, representada pela letra F e com frequencia de 349.228241 Hz.

• sol, representada pela letra G e com frequencia de 391.995392 Hz.

• la, representada pela letra A e com frequencia de 440 Hz.

• si, representada pela letra B e com frequencia de 493.883301 Hz.

Ja a escala cromatica e constituıda por 12 notas, sao adicionadas 5 notas na escala

diatonica com prefixos sustenido e bemol. Nesta escala o intervalo entre cada nota e

equivalente a um semitom, os sımbolos # e b significam sustenido e bemol respectiva-

mente:

• do sustenido (ou re bemol), representada pela letra C# ou Db e com frequencia

de 277.182648 Hz.

• re sustenido (ou mi bemol), representada pela letra D# ou Eb e com frequencia

de 311.126984 Hz.

• fa sustenido (ou sol bemol), representada pela letra F# ou Gb e com frequencia

de 369.994385 Hz.

• sol sustenido (ou la bemol), representada pela letra G# ou Ab e com frequencia

de 415.304688 Hz.

• la sustenido (ou si bemol), representada pela letra A# ou Bb e com frequencia de

466.163788 Hz.

4.1.2 Altura

A forma como o ouvido humano percebe a frequencia dos sons e denominada altura.

As baixas frequencias, ou seja, ondas com um baixo numero de oscilacoes em um de-

terminado tempo sao percebidas como sons graves e as altas frequencias, isto e, ondas

com alto numero de oscilacoes em um determinado tempo sao percebidas como os sons

agudos. A mınima frequencia que o ouvido humano pode perceber esta em torno de 20

Hz (unidades de frequencia) e a maxima, por volta de 20.000 Hz.

Page 37: Composição Algorítmica: Geração de Solos de Blues

Conceitos Musicais e Midifile 19

4.1.3 Tom

Um tom e a diferenca entre duas alturas. E o maior intervalo entre duas notas

sequenciais e e constituıdo por dois semitons. Tambem muito utilizado na maioria das

musicas ocidentais, pois nas musicas orientais existe o quarto de tom. No piano, a altura

entre duas teclas brancas quando ha uma tecla preta entre elas ou entre duas teclas pretas

corresponde a um tom. O semitom equivale a diferenca de altura produzida por duas

notas contıguas do piano, e o menor intervalo entre duas notas sequenciais da musica

ocidental.

A palavra tom pode ser usada para identificar uma certa altura em Hz, por exemplo,

o tom em A e de 440 Hz. As melodias criadas neste trabalho sao compostas no tom

A. Mas a palavra tom pode representar a diferenca em Hz de duas notas, por exemplo,

existe um tom entre as notas A e B, C e D. A definicao de tom pode estar relacionado

com a altura ou com intervalos.

4.2 Tablatura

A palavra tablatura vem do latim: tabulatura. Tabula e uma tabua, prancha ou lousa

em latim. Tabular alguma coisa significa coloca-la em uma tabua, prancha ou lousa. A

tablatura e uma forma de notacao musical, um modo de ler a musica. Basicamente

ela informa ao interprete o local do instrumento onde deve ser tocado. Na maioria das

vezes e usado para instrumentos de cordas trasteados. Os trastes de um instrumento de

cordas sao divisoes com diferenca de meio tom. Por abordar um contexto mais simples

de entendimento, a tablatura foi escolhida como a forma para representar os licks que

serao criados.

Na guitarra ou violao, a tablatura e representada por 6 linhas horizontais que repre-

sentam as 6 cordas. Em cada corda e sobrescrito um numero: o numero 0 significa tocar

a corda solta, o numero 1 significa tocar a corda pressionando-a na primeira divisao de

trastes do braco do violao, o 2 ignifica tocar a corda pressionando-a na segunda divisao

de trastes, e assim sucessivamente. A tablatura indica quando iniciar uma nota, porem

nao ha uma indicacao precisa de quanto tempo ela deve durar, deixando a duracao

a criterio do interprete. Por este fato caracterizamos a tablatura como uma notacao

prescritiva.

Pela Figura 4.1 podemos entender melhor a representacao de uma tablatura, onde

as letras no inıcio das linhas horizontais representam a notacao padrao de um violao ou

Page 38: Composição Algorítmica: Geração de Solos de Blues

20 Conceitos Musicais e Midifile

guitarra, E = mi, A = la, D = re, G = sol, B = si, e = mi. A primeira e a ultima

corda representam a mesma nota (mi), porem em alturas diferentes, onde e e uma nota

mais aguda e E uma nota mais grave. Os numeros que estao verticalmente alinhados

representam notas tocadas simultaneamente. As notas sao lidas da esquerda para a

direita, representando a ordem em que elas sao tocadas.

e|-------5-7-----7-8-----8-2-----2-0---------0--------------|

B|-----5-----5-------5-------3-------1---1-----1-----0-1-1--|

G|---5---------5-------5-------2-------2---------2---0-2-2--|

D|-7-------6-------5-------4-------3-----------------2-2-2--|

A|---------------------------------------------------2-0-0--|

E|----------------------------------------------------------|

Figura 4.1: Exemplo Tablatura

Existem outros sımbolos que representam certas tecnicas aplicadas as notas, como

o ’b’ que significa um bend aplicado a uma certa nota, que significa levantar a corda

tocada. Isto e apresentado na Figura 4.2.

e|-------5-7b----7-8b----8-2--|

B|-----5-----5-------5------3b|

G|---5---------5b------5------|

D|-7b------6b------5-------4--|

A|----------------------------|

E|----------------------------|

Figura 4.2: Tablatura com bend

Um ’s’ entre duas notas, que significa um slide de uma nota para outra, ou seja, voce

toca uma nota e escorrega o dedo ate atingir a outra. Isto e apresentado na Figura 4.3.

e|-------5s7----7s8----8s2----|

B|----------5-------------5s3-|

G|-----------5s7--------------|

D|-7s5-------------5----------|

A|----------------------------|

E|----------------------------|

Figura 4.3: Tablatura com slide

Um ’˜’ que representa o vibrato, que e basicamente um movimento tremido em cima

da nota tocada. Isto e apresentado na Figura 4.4.

Page 39: Composição Algorítmica: Geração de Solos de Blues

Conceitos Musicais e Midifile 21

e|-------5~-------7------8~---|

B|-----5------5~------------3-|

G|---5~---------------5~------|

D|-7-------6~--------------4--|

A|----------------------------|

E|----------------------------|

Figura 4.4: Tablatura com vibrato

E o ’h’ que significa hammer, ou seja, como se voce aplicasse uma martelada com os

dedos na nota tocada. Isto e apresentado na Figura 4.5.

e|--------------7h--------2--|

B|-----5h----5--------------3|

G|---5----------------5h-----|

D|-7------6h-------------4---|

A|---------------------------|

E|---------------------------|

Figura 4.5: Tablatura com hammer

4.3 Esboco da estrutura padrao de um arquivo MIDI

Midifile e uma classe da linguagem C++ que permite a leitura e escrita de arquivos

MIDI, (Sapp 2015). Pode ser compilado em multiplas plataformas como Linux, OS X e

Windows.

Um arquivo MIDI padrao basicamente e composto por chunks (pedacos). O primeiro

chunk e um header chunk (cabecalho) e os demais sao track chunks (faixas). O header

chunk contem dados que pertencentes a todo o arquivo e os outros pedacos definem

faixas logicas.

midifile =< headerchunk > + < trackchunk > [+ < trackchunk > ...]

Cada chunk possui 3 componentes:

1. 4 caracteres que representam o ID da faixa. Por exemplo, o ID do cabecalho e

“MThd”e o ID das faixas e “MTrk”.

2. Um valor de 4 bytes que especifica o numero de bytes da secao de dados da faixa

(item 3).

Page 40: Composição Algorítmica: Geração de Solos de Blues

22 Conceitos Musicais e Midifile

3. A secao de dados da faixa.

O header chunk consiste em uma string MThd indicando que e um cabecalho, o seu

tamanho, o formato do arquivo MIDI, o numero de faixas no arquivo e um valor de

tempo especificando unidades de tempo delta (diferenca entre 2 valores de tempo).

headerchunk = ”MThd”+ < length > + < format > + < n > + < division >

O primeiro componente do header chunk e literalmente a string MThd ou o valor

hexadecimal (0x4d546864) indicando se tratar de um arquivo MIDI. O segundo compo-

nente indica o tamanho do header chunk em bytes. O terceiro representa o formato do

arquivo MIDI, onde 0 indica formato de faixa simples, 1 indica formato em multiplas

faixas e 2 indica formato de multiplas musicas. O quarto e o numero de track chunks

que sucedem o header chunk. E o quinto e um valor em unidades de tempo delta. Se

este valor for positivo ele representa o numero de unidades por batida (ticks per beats).

Se for negativo o tempo delta esta em unidades compatıveis SMPTE.

Os track chunks consistem em uma string MTrk indicando que esta e uma faixa, o

seu tamanho e os dados dos eventos que compoem a faixa.

trackchunk = ”MTrk”+ < length > + < trackevent > [+ < trackevent > ...]

O primeiro componente do track chunk e a string MTrk que marca o inicio da faixa.

O segundo e o tamanho da faixa em bytes. O terceiro e ultimo sao os dados de eventos

que compoem a faixa, ou seja, uma sequencia de track events.

Um trackevent consiste em um tempo delta desde o ultimo evento e 1 entre 3 tipos

de eventos.

trackevent =< vtime > + < midievent > | < metaevent > | < sysexevent >

O vtime e o tempo decorrido desde o ultimo evento ate o atual. O midievent e

qualquer mensagem do canal MIDI, pode ser um note-on ou um note-off, indicando

para iniciar ou encerrar uma nota. O metaevent e um evento que pode armazenar

outras informacoes que nao sejam necessariamente sobre a nota.

4.4 As classes da biblioteca Midifile

Aqui iremos explicar os metodos e atributos da classe Midifile e como ela manipula

os arquivos MIDI.

Page 41: Composição Algorítmica: Geração de Solos de Blues

Conceitos Musicais e Midifile 23

4.4.1 Classe TickTime

A classe TickTime contem apenas 2 atributos: o tick que e um valor de tempo

em unidades proprias do MIDI chamadas de ticks e o seconds que e o valor do tick

propriamente em segundos. Esta classe e usada para construir um mapeamento de todos

os ticks de um MIDI e seus respectivos valores em segundos. Na classe Midifile e criado

um arranjo de TickTime para representar este mapeamento.

4.4.2 Classe MFEvent

A classe Midifile e composta basicamente por uma lista de MFEvent (Eventos

Midifile). Um MFEvent contem os seguintes atributos:

• O atributo time que e um inteiro representando unidades proprias do MIDI (ticks).

O valor de um tick pode ser representado tanto no modo TIME STATE DELTA

quanto no modo TIME STATE ABSOLUTE, dependendo da configuracao da

classe Midifile que guarda o MFEvent. Se o tempo estiver no modo delta, significa

que ele e a diferenca entre o inıcio do ultimo evento ate o evento atual. Caso esteja

no modo absolute, ele e um valor absoluto de tempo da faixa.

• O atributo track, um inteiro indicando o ındice da faixa que ele esta contido

• O atributo data representando os dados do evento, que se trata de um arranjo de

caracteres de 3 posicoes.

A classe MFEvent possui 7 construtores que podem receber parametros para inici-

alizar os atributos da classe MFEvent apresentados anteriormente. Um construtor de

copia tambem foi implementado para receber um objeto MFEvent como parametro,

alem de um destrutor.

Ela tambem possui algumas funcoes convenientes para analisar seu conteudo. Como

as funcoes isNoteOn e isNoteOff que enviam mensagens dizendo se a nota esta sendo

tocada ou encerrada, respectivamente. A mensagem isNoteOn contem parametros que

denotam o tom e a velocidade (intensidade da nota ao ser tocada) da nota que esta

sendo tocada. Ja a mensagem isNoteOff denota a mudanca da nota em execucao para

uma outra. Toda mensagem isNoteOn e sucedida por uma isNoteOff, senao a nota

sera tocada indefinidamente.

As mensagens podem conter dados MIDI ou nao. As mensagens que nao contem

esses dados sao chamadas de meta mensagens. Elas podem conter dados sobre alguma

Page 42: Composição Algorítmica: Geração de Solos de Blues

24 Conceitos Musicais e Midifile

alternancia no tempo da musica ou simplesmente representar a mudanca do instrumento

que o som sera tocado. As funcoes isMeta e isTempo retornam true se a mensagem e

uma meta mensagem e se a meta mensagem descreve o tempo, respectivamente.

Os getters desta classe podem retornar o valor do tempo em microssegundos (getTem-

poMicroseconds) e segundos (getTempoSeconds) para cada semınima, batimentos

por minuto (getTempoBPM), ticks por segundo (getTempoTPS) e segundos por

ticks (getTempoSPT). Tambem possui getters que retornam os valores dos comandos

MIDI como o command nibble, isto e, o valor que representa a nota a ser tocada e o

channel nibble, ou seja, o canal (instrumento) que toca a nota. Comandos MIDI podem

ser decompostos em um command nibble e um channel nibble, ambos de 4 bytes. Eles

podem ser representados por numeros binarios ou hexadecimais, porem e mais comum

serem vistos em formato hexadecimal.

4.4.3 Classe Midifile

A classe Midifile possui apenas 2 construtores que inicializam os seguintes atributos:

• events, um arranjo de MFEvent

• ticksPerQuarterNote, inicializada com o valor padrao 48, define o tempo com

48 ticks por semınima

• trackCount, indica o numero de tracks no arquivo, quando inicializada recebe o

valor 1

• theTrackState, estado do track, pode ser inicializado como split ou join. O

estado join significa que a faixa e a uniao de varias faixas em uma so, podendo ser

dividida. O estado split significa que a faixa e unica e nao pode ser dividida.

• theTimeState, estado do tempo, pode ser inicializado como delta ou absolute

• readFileName, le o nome do arquivo e retorna um arranjo de caracteres

• timemap, um arranjo de TickTime

• timemapvalid, indicando se existe ou nao um timemap construıdo

As principais funcoes da classe Midifile serao apresentadas a seguir.

Para nomear um arquivo, a funcao setFilename e utilizada.Para se obter o nome

de um arquivo usa-se a funcao getFilename.

Page 43: Composição Algorítmica: Geração de Solos de Blues

Conceitos Musicais e Midifile 25

A funcao getTrackCount retorna o numero de faixas do arquivo MIDI. A funcao

getTrackCountAsType1 tambem retorna o numero de faixas contidas em um arquivo

MIDI, mas pode retornar o tamanho dos eventos se nao estiver no estado join. Caso

esteja no estado mesclado (join) le a faixa 0 e procura pelo maior valor das faixas em

seu estado separado (unjoin).

Para deletar uma faixa e utilizada a funcao deleteTrack. Com o metodo erase um

arquivo MIDI e deixado vazio, com apenas uma faixa e nenhum dado contido nela.

O metodo addTrack adiciona uma faixa em branco no final da lista de faixas e

retorna o numero de sua posicao na lista. Com o metodo joinTracks e possıvel mes-

clar os dados de todas as faixas, porem mantendo a identidade das faixas unica, para

que a funcao splitTracks possa separar as faixas novamente. A funcao mergeTracks

combina os dados de duas faixas em uma, deixando o dado na primeira faixa listada e

movendo as outras faixas para a segunda faixa. O resultado desta funcao nao pode ser

revertido.

Esta classe tambem possui metodos que ordenam os eventos de uma unica faixa

(sortTrack) ou todas as faixas de um arquivo MIDI (sortTracks).

A variavel tempo desta classe pode ser definida como absolute ou delta, para isto os

metodos absoluteTime e deltaTime convertem a variavel para o tipo que se deseja

usar. O metodo getTimeState retorna este tipo.

Pode-se adicionar eventos com a funcao addEvent ou meta eventos com a funcao

addMetaEvent, essas funcoes retornam o numero de eventos existentes no objeto. Para

obter um evento de um ındice passado como parametro, utiliza-se a funcao getEvent.

Com a funcao getNumEvents, e possıvel obter o numero de eventos de uma faixa,

onde o ındice da faixa e passado como parametro.

E possıvel obter o numero de ticks que ocorrem durante uma semınima atraves

do metodo getTicksPerQuarterNote e definir com o metodo setTicksPerQuarter-

Note. E com a funcao getAbsoluteTickTime obtem-se o valor absoluto em Tick-

Time do tempo.

Por ultimo, as principais funcoes da classe sao a read, que le um arquivo MIDI e

guarda o seu conteudo, e write que escreve um arquivo MIDI, ou seja, exporta um

arquivo MIDI com um nome passado por parametro.

Page 44: Composição Algorítmica: Geração de Solos de Blues

26 Conceitos Musicais e Midifile

4.5 Representando uma melodia com a classe Midifile

A seguir veremos um exemplo de como criar um arquivo MIDI utilizando a classe

Midifile.

Primeiramente o construtor e chamado e logo em seguida e padronizado o tempo em

absoluto com o metodo absoluteTime da classe Midifile. Com um outro metodo desta

classe chamado addTrack sao adicionadas duas faixas ao objeto. Definimos o numero

de ticks por semınima com o metodo setTicksPerQuarterNote, geralmente o valor

padrao de numero de ticks e 48.

Um arranjo de caracteres e criado para guardar eventos e instanciado com um ta-

manho em bytes passado por parametro. Vetores de inteiros tambem sao criados para

representar as notas. Por exemplo, o numero 60 representa a nota do. Somar uma

unidade do numero implica representarmos a proxima nota de acordo com a escala

cromatica. Subtrair uma unidade no numero implica representarmos a nota anterior da

escala cromatica.

Para guardar a melodia e o tempo representados pelos vetores de inteiros no arquivo

vamos iniciar uma variavel que dara o inıcio do tempo com o valor zero e definimos um

valor para a velocidade da nota tocar ou encerrar.

Dentro de um laco de repeticao, as notas dos vetores de inteiros sao inseridas uma

por uma no arquivo com o metodo addEvent que possui 3 parametros: um inteiro

indicando a faixa que sera incluso, o tempo que o evento acontecera e o evento. Isto e

feito incluindo o vetor de notas mais agudas na faixa 1 e o vetor de notas mais graves

na faixa 2.

A funcao sortTrack entao ordena os eventos do arquivo caso eles se encontrem

desordenados. Finalmente a funcao write exporta o arquivo escrito em formato MIDI.

4.6 Conclusao

Neste capıtulo foi apresentada uma ferramenta essencial para o desenvolvimento deste

trabalho. A biblioteca Midifile possui metodos simples e de facil entendimento que abor-

dam muitas maneiras de manipulacao dos dados. Esta classe nos permite a importacao

e exportacao de arquivos MIDI trivialmente, assim com o acesso de seus componentes.

Desta forma e possıvel analisar as probabilidades de uma nota acontecer apos uma outra

em um arquivo MIDI e construir uma cadeia de Markov.

Page 45: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 5

Metodologia

“O blues nao e sempre triste. Quando estou deprimido, escuto um blues e volto a me

sentir bem.”

— John Lee Hooker, 1917-2001

Neste capıtulo serao apresentados a metodologia e tecnicas abordadas para realizar

a composicao dos solos de blues. Tambem sao apresentados as ferramentas, algoritmos

e estruturas de dados usados para desenvolver este trabalho.

5.1 Guitar Pro

O Guitar Pro e um software desenvolvido pela companhia francesa Arobas Music.

Edita e toca tablaturas para musicos que desejam obter progresso, compor ou simples-

mente aprender a tocar em seu violao ou sua guitarra. Este software possui a opcao de

escolher varios instrumentos para representar uma partitura escrita, ou seja, voce pode

escolher entre uma guitarra, piano, flauta, dentre outros para emitir o som desejado.

Sua interface tem a vantagem de permitir que se veja as notas sendo tocadas no

instrumento (as opcoes sao: piano, guitarra e baixo) ao mesmo tempo que as ouve,

facilitando o aprendizado de como tocar as notas. O Guitar Pro tambem permite o

controle dinamico do volume de todos os instrumentos que estao sendo executados em

uma faixa, permitindo um ajuste do volume de cada instrumento em tempo real, da

maneira que voce achar melhor. A Figura 5.1 mostra a interface do Guitar Pro.

Arquivos em formato MIDI podem ser importados e exportados atraves deste soft-

27

Page 46: Composição Algorítmica: Geração de Solos de Blues

28 Metodologia

Figura 5.1: Interface do Guitar Pro

ware. Desta forma, ele nos auxiliara na criacao do banco de dados de licks. Para iniciar

este trabalho vamos compor uma base com 100 licks.

Para realizar a composicao dos licks, primeiro iniciaremos um novo projeto do Guitar

Pro, onde ira aparecer em sua interface 6 linhas em branco (iguais as linhas que represen-

tam as cordas de um violao, onde voce podera inserir uma nota clicando sobre a linha e

digitando o numero correspondente ao traste do violao que a nota e representada. Apos

inserir uma nota, com as setas do teclado voce vai caminhando na linha (que representa

a corda da guitarra) e inserindo as proximas notas. Outra forma mais facil de compor

e com a opcao de tocar as notas diretamente na imagem do instrumento. Por exemplo,

pode-se clicar em um ıcone que mostrara o braco de uma guitarra e com o mouse voce

clica em cima da corda que deseja tocar e a tablatura e automaticamente escrita. Em

partes da musica como refrao, onde sao repetidas, o Guitar Pro permite a execucao

de loops, para nao ter que escrever novamente na tablatura. Apos a composicao da

tablatura, e so exporta-la para o formato MIDI na opcao export to MIDI.

5.2 Arranjo Associativo

Nos proximos capıtulos e explicado o que sao arranjos associativos e como podem ser

representados na linguagem C++.

Page 47: Composição Algorítmica: Geração de Solos de Blues

Metodologia 29

5.2.1 Definicao

Na ciencia da computacao, arranjos associativos sao definidos como um tipo abstrato

de dados composto por uma colecao de pares (chave, valor). Mapas, tabelas de sımbolo

e dicionarios sao exemplos de arranjos associativos. Quando nos referimos a associacoes,

dizemos que, podemos representar um ındice nao so com numeros, mas com qualquer

tipo de dado, por exemplo uma palavra.

A Figura 5.2 exemplifica um arranjo associativo onde a chave e o nome da pessoa e

o valor seus respectivos salarios.

Arranjo Associativo

Maria R$ 4.000,00

Chave (Índice) Valor

R$ 7.000,00

R$ 2.000,00

R$ 9.000,00

João

Ana

José

Figura 5.2: Arranjo Associativo

5.2.2 Arvores

No contexto da ciencia da computacao, uma arvore e uma estrutura de dados repre-

sentada por nodos e arestas. Um desses nodos e o elemento principal (raiz), que e ligado

por arestas a outros elementos (seus ramos ou filhos). Estes ramos tambem podem pos-

suir seus proprios ramos. Seus elementos sao dispostos em forma hierarquica. A ordem

de uma arvore e o numero maximo de ramos de cada elemento. A Figura 5.3 representa

uma arvore de ordem 2, ou simplesmente chamada de arvore binaria. Cada no pode ter

no maximo 2 nos filhos.

Page 48: Composição Algorítmica: Geração de Solos de Blues

30 Metodologia

Figura 5.3: Arvore binaria

Ja a Figura 5.4 representa a estrutura de uma arvore de ordem 3, ou arvore ternaria.

Note que na Figura 5.4 o ramo central da raiz nao possui outros ramos, isto significa

que a arvore nao precisa estar sempre completa.

Figura 5.4: Arvore ternaria

A arvore binaria tem uma estrutura que garante realizar uma busca de algum dado em

tempo log n se ela estiver ordenada. Cada nodo da arvore pode guardar uma determinada

informacao, comummente denominada de chave. A ordenacao de uma arvore binaria e

dada da seguinte forma: consideramos um valor x como a chave de um nodo, o valor da

chave do filho da esquerda deve ser menor que x e a chave do filho da direita deve ser

maior que x. Uma estrutura de dados representado por uma arvore binaria com chaves

em seus nodos configuradas de forma ordenada pode ser chamada de arvore de busca

binaria.

Suponha que se deseja encontrar uma chave de valor 8 na estrutura da Figura 5.5.

A busca e iniciada pela raiz, que contem a chave de valor 5. As chaves 5 e 8 sao

comparadas. Como 8 e maior que 5, a busca e direcionada para o filho da direita, como

chave 9. Novamente a chave 8 e comparada com a chave 9. Como 8 e menor que 9 a

busca e direcionada para o filho da esquerda. O mesmo processo e feito com a chave 7,

para encontrar a chave 8.

Page 49: Composição Algorítmica: Geração de Solos de Blues

Metodologia 31

Figura 5.5: Busca binaria

Utilizando esta estrategia de busca em arvores, ao seguir um no filho, os demais

nos nao sao examinados, minimizando o espaco de busca e garantindo encontrar uma

solucao (se houver) em tempo log n, onde n representa o numero de elementos na arvore.

A complexidade O(log n) so e garantida caso a arvore esteja com seus elementos orde-

nados. Esta busca e chamada de busca binaria e tambem pode ser utilizada em vetores

ordenados.

Um arranjo associativo pode ser representado por uma arvore, onde cada no contem

um elemento representado por uma chave e um registro. A Figura 5.6 ilustra uma arvore

onde em cada no tem um elemento e cada elemento e um par, representando uma nota

musical e o numero de ocorrencias desta nota em um determinado solo, por exemplo.

Na raiz tem um par indicando que a nota A foi encontrada 2 vezes no solo. A raiz tem

2 nos filhos onde um tem um par indicando que a nota D foi encontrada 5 vezes no solo

e o outro indica que a nota E foi encontrada 3 vezes no solo. Da mesma forma segue os

exemplos dos nos folhas.

5.2.3 Conteiner

Um conteiner e um conceito da linguagem C++ que representa um objeto usado para

guardar e manipular outros objetos, sendo responsavel pela gestao da memoria utilizada

pelos objetos que forem adicionados a ele. Os conteineres tambem possuem funcoes

Page 50: Composição Algorítmica: Geração de Solos de Blues

32 Metodologia

[A,2]

[D,5] [E,3]

[F,4][B,4][G,8]

Figura 5.6: Arranjo associativo representado por uma arvore

para acessar e manipular os objetos que estao contidos nele, essas funcoes garantem um

acesso direto aos objetos ou por iteradores.

A linguagem C++ possui conteineres que replicam estruturas de dados muito co-

muns utilizadas em programacao como: vetores dinamicos (vector), filas (queue), lis-

tas (list), pilhas (stack), conjuntos (set) e os arranjos associativos (map, que e usado

neste trabalho).

5.2.4 Map

O Map e o conteiner da linguagem C++ que representa um arranjo associativo.

Basicamente e constituıdo por um par associado e sao geralmente usados para ordenar

e identificar seus elementos. Internamente, os elementos de um map estao ordenados de

acordo com a sua chave, obedecendo o criterio indicado pelo seu objeto de comparacao

interno. A estrutura de dados utilizada pelo Map e usualmente uma arvore binaria com

estrategias de balanceamento. As arvores explicadas na secao 5.2.2 e apenas uma das

possıveis possibilidades de representacao de um arranjo associativo.

5.2.5 Iteradores

Os iteradores sao objetos de referencia com propriedades semelhantes aos ponteiros.

Sao utilizados para acessar elementos de conteineres. E basicamente um objeto que

aponta para um certo numero de elementos e tem a habilidade de interagir com estes

elementos atraves de um conjunto de operadores.

Os iteradores sao classificados em 5 categorias: input, output, forward, bidirectional

e random access.

As categorias input e output sao as mais limitadas, realizando apenas operacoes

Page 51: Composição Algorítmica: Geração de Solos de Blues

Metodologia 33

sequenciais. As categorias forward e bidirectional abordam as operacoes sequenciais,

mas tambem podem interagir em sentido contrario. E finalmente a categoria random

access implementa todas as funcionalidades anteriores, e tambem acessam elementos

nao sequenciais, isto e podem acessar elementos distantes um do outro. Usaremos os

iteradores para acessar os elementos das cadeias de Markov.

5.3 Utilizando o Conteiner Map para representar uma

cadeia de Markov

Utilizando a linguagem C++, foi implementada uma classe chamada Cadeiade-

Markov. Esta classe contem um arranjo associativo onde a chave e um elemento e cada

registro e outro arranjo associativo.

5.3.1 Representacao

Neste trabalho uma cadeia de Markov sera representada pela estrutura de dados map,

onde o primeiro valor chave do atributo seria um vetor de notas e o valor mapeado um

outro map que tem como valor chave as notas ocorridas posteriormente e como valor

mapeado o numero de ocorrencias dessas notas posteriores.

A Figura 5.7 ilustra uma arvore onde cada nodo e um vector de elementos. E cada

nodo tambem e uma arvore como e ilustrado. Por exemplo, a sequencia CDD e o no

raiz de uma subarvore com filhos representando arranjos associativos, onde as chaves

sao os elementos sucessores (A, B e C) e os valores mapeados sao as ocorrencias destas

sucessoes (2, 3 e 4).

Para que se possa manipular tipos genericos, esta classe foi implementada como

template, o qual permite utilizar conteineres genericos para criar cadeias de qualquer

tipo de dado.

Esta classe possui tres construtores, um deles nao possui parametro de entrada, nao

realiza nenhuma operacao e sua ordem e definida com valor 1. Um outro tem como

parametro de entrada um vetor de notas representado por um conteiner vector criado

como template e sua ordem tambem e definida com o valor 1. Ja o terceiro tem como

parametros um vetor de notas representado por um conteiner vector e a ordem que

pode ser definida. Os dois ultimos construtores explicados chamam a funcao treina que

tem o mesmo parametro de entrada do construtor, um vector como template.

Page 52: Composição Algorítmica: Geração de Solos de Blues

34 Metodologia

ABC

ABA

AAA ABD

BDD

CDD

A,2 B,3 C,4

ACD CDD

Figura 5.7: Representacao de uma Cadeia de Markov

5.3.2 Algoritmo de treinamento a partir de sequencias

A funcao treina realiza uma varredura na sequencia de entrada utilizando um itera-

dor. Ele recebe cada elemento da sequencia e verifica se ja existe na cadeia. Caso nao

exista, um outro map auxiliar e criado e nele adiciona-se como valor chave o elemento

sucessor e o numero 1 (representa uma ocorrencia) como valor mapeado. Caso este ele-

mento ja exista na cadeia, verificamos se o elemento sucessor ja existe em seu registro,

caso nao exista o elemento sucessor e adicionado na cadeia com 1 ocorrencia, se este

elemento existir entao ele e incrementado, aumentado em uma unidade o seu numero

de ocorrencias. Uma outra funcao chamada disp tambem foi criada para imprimir os

registros e as ocorrencias de seus sucessores, auxiliando na visualizacao dos dados para

verificarmos a consistencia da cadeia gerada.

5.3.3 Algoritmo de geracao de sequencias

A funcao gera tem como parametro de entrada um inteiro que representa o tamanho

da sequencia que se deseja gerar (numero de notas que serao sorteadas para compor o

lick). E tem como parametro de retorno um vector como template representando

a sequencia gerada. Para iniciar a geracao da nova sequencia procuramos na cadeia o

elemento vazio e sorteamos um entre os seus elementos sucessores para ser o primeiro

elemento da nova sequencia. Nesta funcao, a biblioteca random e utilizada para auxiliar

Page 53: Composição Algorítmica: Geração de Solos de Blues

Metodologia 35

na escolha das notas que irao compor a nova sequencia.

Sao utilizadas duas funcoes para gerar numeros aleatorios atraves desta biblioteca.

Uma funcao que chamaremos de gerador e sera vinculada ao relogio do computador

para ajudar evitar a geracao de numeros repetidos, e uma outra que chamaremos de

distribuicao que determina o limite inferior e o limite superior do numero que sera

gerado.

Para iniciar a geracao do solo procuramos na cadeia o elemento vazio e sorteamos um

dos elementos que o sucedem, depois sorteamos um dos sucessores do ultimo sucessor

sorteado e incluıdo na nova sequencia. E assim a cada elemento adicionado a nova

sequencia, sorteamos um elemento entre os seus sucessores para incluı-lo. A forma

abordada para escolher entre os sucessores para compor a sequencia e o metodo da

roleta. A seguir e dado um exemplo de como funciona o metodo de selecao da roleta.

Por exemplo, se depois da nota 25 existirem 6 ocorrencias da nota 43, 2 ocorrencias

da nota 54 e 7 ocorrencias da nota 90, este vetor tera tamanho igual a 15. Se o numero

sorteado for menor ou igual a 6, a proxima nota sera a 43. Se estiver entre 7 e 8, a

proxima nota sera a 54. E se for maior que 8, a proxima nota sera a 90. E importante

ressaltar que deve ser considerada a ordem das notas de acordo com o exemplo.

E criado um vetor de tamanho igual ao parametro de entrada da funcao. Esse vetor

sera preenchido com as notas escolhidas e retornado com a nova sequencia gerada.

5.4 Analisando a influencia de um limiar na definicao da

ordem da cadeia de Markov ao gerar os solos

O grande problema deste trabalho e encontrar uma ordem ideal para a geracao dos

solos, ja que ordens muito altas tendem a gerar copias e ordens muito baixas nao tem

uma boa inducao. Para resolver este problema e proposto a introducao de um valor

limiar, que ajustara a ordem da cadeia, reduzindo sua ordem, caso a ordem atual nao

satisfaca o criterio do limiar.

Os elementos das cadeias implementadas neste trabalho possuem 3 campos: estado

principal, estado sucessor e numero de ocorrencias da transicao do estado principal para

o estado sucessor. O estado principal pode ser constituıdo por uma sequencia de n

estados, onde n tambem representa a ordem da cadeia.

A importancia de introduzir um limiar neste trabalho, e fundamental para definir as

Page 54: Composição Algorítmica: Geração de Solos de Blues

36 Metodologia

ordens que serao utilizadas para a geracao dos solos. Em cadeias de ordens muito altas,

seus elementos tem menos ocorrencias de sucessores do que os elementos de cadeias de

ordens menores. Assim, sera abordada uma estrategia em que sucessoes pouco utilizadas,

isto e, um numero de sucessoes menores que o valor definido para o limiar nao serao

geradas.

Em uma cadeia de Markov comum a sua ordem e fixa, isto e, sua ordem nao varia.

Entretanto, uma cadeia de ordem n, implicitamente, contem as cadeias com ordens

inferiores a n e maiores do que 0. E possıvel encontrar uma ordem n−x em uma cadeia

ordem n, desde que x seja um numero inteiro menor que n.

A Figura 5.8 ilustra 3 elementos de uma cadeia de ordem 3: GAB, DFB e EAB.

Para diminuir a ordem da cadeia desconsideramos a primeira nota dos elementos, ou

seja, as letras sublinhadas de vermelho representam os elementos da cadeia de ordem 2.

Analogamente os elementos de ordem 1 sao os sublinhados de verde.

G A B

D F B

E A B

G,3

A,5

F,4

B,3

C,1

D,2

Figura 5.8: Exemplo de como encontrar uma cadeia de ordem menor

Baseando no numero de ocorrencias de transicao entre os estados, iremos compara-lo

com um valor limiar. Caso esse numero de ocorrencias seja menor que o valor limiar

estipulado a ordem da cadeia sera diminuıda ate que este numero de ocorrencias seja

maior que o limiar ou ate que a ordem da cadeia seja reduzida a ordem 1. Com a

introducao desse valor limiar no trabalho, os elementos com poucas ocorrencias de su-

cessoes da cadeia serao ignorados. As cadeias tambem podem apresentar casos onde um

certo elemento nao possui sucessores.

Caso o elemento ADF Figura 5.9 seja o estado atual de uma cadeia de Markov de

Page 55: Composição Algorítmica: Geração de Solos de Blues

Metodologia 37

ordem 3, ela tem 4 ocorrencias de estados futuros, 3 para a nota G e 1 para a nota A. Por

exemplo, se usarmos um limiar de valor 5, sua ordem sera reduzida, pois o seu numero

de ocorrencias e menor que o valor do limiar. Neste caso, ignoramos a nota A deste

elemento e analisamos todos os elementos da cadeia que sao iguais ao novo elemento

DF. Assim consideramos tambem os estados futuros do elemento BDF, que satisfaz

as novas condicoes da ordem por terminar com DF. Somando as novas ocorrencias de

estados futuros temos o valor de 9, que supera o valor do limiar. Entao a tecnica da

roleta e aplicada as novas possibilidades.

A D F

B D F

G,3

A,1

C,2

D,3

Figura 5.9: Exemplo de como o limiar reduz a ordem da cadeia

Ao treinar uma cadeia com uma ordem alta e normal que o numero de ocorrencias

de transicoes para estados sucessores diminua. Por tanto a tendencia e de aumentar os

casos onde o limiar sera maior que o numero de transicoes.

Com o intuito de encontrar a melhor ordem para este problema vamos introduzir

o limiar para diminuir a ordem da cadeia caso a soma das ocorrencias dos sucessores

de um elemento seja menor que o limiar. A reducao de ordem e analoga, caso, mesmo

abaixando a ordem da cadeia em 1 unidade, o numero de ocorrencias seja menor que o

limiar.

Para diminuir a ordem de uma cadeia e preciso percorrer toda a cadeia procurando

pelo novo elemento de ordem diminuıda. Por exemplo: caso o elemento (69 71 68 75) da

cadeia N de ordem 4 tenha um numero de sucessoes que nao satisfaca o limiar, procura-se

todos os elementos desta cadeia que terminam com (71 68 75), e os seus sucessores sao

considerados. Se mesmo assim o numero de sucessores nao satisfazer o limiar, abaixamos

de novo a ordem e procuramos na cadeia todos os elementos que terminam com (68 75),

e assim sucessivamente. A cadeia de ordem 1 e a unica que gera qualquer elemento sem

levar em consideracao o limiar.

Page 56: Composição Algorítmica: Geração de Solos de Blues

38 Metodologia

5.5 Metodos de Representacao de Melodias

Nesta secao mostraremos as diferentes formas de representar melodias, sendo as for-

mas comuns como partituras e tablaturas ou por uma sequencia de uma estruturas

numericas, que sao as formas representadas neste trabalho.

A partitura e uma representacao escrita de melodias padronizada mundialmente. As

notas musicais sao representadas por sımbolos proprios da partitura, onde sao associadas

aos sons. Existem alguns softwares de edicao que concebem partituras como o Cake Walk

Express, Free Clef e o MusiXTEX.

A Figura 5.10 ilustra os metodos mais comuns de representacao de melodias: a

partitura e a tablatura. Na partitura existem 5 linhas e quatro espacos visıveis e mais

espacos suplementares superiores, para notas mais agudas, e inferiores, para notas mais

graves. A posicao da nota na partitura, na linha ou no espaco, define a sua altura.

Normalmente o primeiro sımbolo da partitura e a clave, seguida do compasso que define

quanto tempo entra em cada parte da musica. O compasso 4/4, mostrado na Figura

5.10, e usualmente o mais utilizado e e formado por 4 semınimas. O primeiro numero

e a quantidade de tempo (4 tempos) e o segundo e a unidade de tempo (semınima).

Tablaturas sao explicadas mais detalhadamente no Capıtulo 4.2.

Moderate h = 120

: 44

c

1

"#*

BDB

*

"!

BB

)

B

)"!

BB

(

*

BB

)

"!

BBF

&

(

BB

$

&

BB

$&

BBD

"#

BF B

"!

BB

!#

BB

$

B

'

)

BDB

('

BDB

)*

BBD3 3

3 3 3

*

BBD

"#*

BDB

#!

BBD

)&

BBF

"!

(

BB

)

)

BDB Q SL

3

3

3 R

)

B

!

B

)

B

!

B

)

B)

B

'

BD

)

B

)

B

)

B

)

B

*

B3 3

33

B

*

B

*

B

)

B

*

B R SM

3 3 3

3

5 R T

"!

B

"!

B

"!

B

"!

B

)

B

"!

B

)

B

*

B

(

B3

3

B

*

B

"!

B

*

B

(

B

&

B

(

B

&

B SM L L3

3

7 R

(

B

&

B

(

B

(

B

!

B

(

B

'

BD

!

BF

$

B

!

B!

B&

B

(

B S T3 R

"!

B

"&

B

"&

B

"&

B

"%

B

"$

B

"%

B

"&

B

"#

B

"&

B

"#

B S3 3 3

3

9 P S

"#

B

"!

B R

"!

B P SL M M

S

)

B

"!

B

)

B

"!

B Q SL S

"!

B

*

B

)

B

*

B

(

B

&

B

$

B

!

B P R3 3

3

3

Page 1/2

12S

$

B

#

B

!

B

"

B

!

B

#

B

!

B B3 3

B

!

B

#

B

!

B

#

B

!

B P R TH3 3

Figura 5.10: Representacao de uma melodia atraves de uma partitura e umatablatura

As estruturas de dados utilizadas neste trabalho para a representacao de melodias

consistem de vetores contendo informacoes sobre o tempo na musica onde uma nota

esta sendo tocada, sobre a respectiva nota e sobre o tempo de duracao da nota, isto e,

quando ela comeca a ser tocada e quando ela para. Vamos abordar 4 estruturas para

representar melodias neste trabalho: a estrutura TND, que guarda informacoes sobre o

Page 57: Composição Algorítmica: Geração de Solos de Blues

Metodologia 39

tempo, a nota e a duracao; a estrutura ND, que guarda informacoes sobre a nota e a

duracao; a estrutura N, que guarda somente a informacao da nota e a estrutura D, que

guarda somente a informacao sobre a duracao.

A Figura 5.11 ilustra uma sequencia da estrutura Nota, composta por 3 campos:

tempo, nota e duracao. O tempo e a duracao sao representados por um double e a

nota por um int. O tempo representa a posicao da nota no compasso, nota representa

qual nota esta sendo tocada e duracao representa o tempo que esta nota ficara tocando.

Com estas 3 informacoes e possıvel representar uma melodia. Assim, o chamamos de

sequencia TND, que sera utilizada para representar as melodias neste trabalho.

Vetor TND -> (0 76 0.25) (0.25 75 0.333) (0.583 68 0.75) (1.583 77 1)

Figura 5.11: Sequencia TND, onde o primeiro numero representa o tempo quea nota e tocada, o segundo a respectiva nota e a terceira a sua duracao.

A Figura 5.12 ilustra uma outra representacao de uma melodia, utilizando a estrutura

Pair, um par de valores com apenas os campos nota e duracao, o que chamaremos de

vetor ND. Desta forma as notas seguintes serao tocadas ao fim da duracao da nota

anterior. As melodias deste trabalho tocam uma nota de cada vez, isto e, ela nao admite

que 2 notas sejam tocadas no mesmo tempo.

Vetor ND -> (76 0.25) (75 0.333) (68 0.75) (77 1) (69 1.25)

Figura 5.12: Sequencia ND, onde o primeiro numero representa a nota e osegundo a sua duracao.

Tambem representamos uma melodia com a quebra da estrutura ND. As informacoes

sobre a nota e a duracao sao separadas em vetores distintos. Geramos dois vetores de

mesmo tamanho, um recebe a informacao da nota e o outro a informacao da duracao.

Sobrepomos um vetor no outro, isto e, a nota do vetor N na posicao 1 se associa a

duracao do vetor D na posicao 1, a nota do vetor N na posicao 2 se associa a duracao

do vetor D na posicao 2, e assim sucessivamente.

A Figura 5.13 exemplifica a sobreposicao das sequencias N e D. Como na sequencia

ND, e necessario definir o tempo que a primeira nota e tocada. Lembrando que a nota

−1 representa o silencio.

Page 58: Composição Algorítmica: Geração de Solos de Blues

40 Metodologia

Vetor N -> -1 75 68 77 69 65 64 71

Vetor D -> 0.25 0.333 0.75 1 1.25 0.425 1.5 0.186

Figura 5.13: O vetor de inteiros representa as notas e o vetor de numeros reaisas duracoes de uma nota

5.6 Teste de Friedman

Milton Friedman foi um estatıstico, economista e escritor norte-americano que ga-

nhou o Premio Nobel em Ciencias Economicas de 1976. Uma das publicacoes sobre sua

descoberta foi o artigo (Friedman 1937). E conhecido por sua pesquisa sobre a analise do

consumo, a historia e a teoria monetaria e a complexidade da polıtica de estabilizacao.

O teste de Friedman e um teste estatıstico nao parametrico (baseado em ranking

de observacoes) usado para detectar diferencas de tratamentos em varias tentativas de

teste. Este teste utiliza os ranks dos dados ao inves de seus valores brutos para o calculo

da estatıstica de teste, isto e, os dados sao ordenados e os postos ocupados por cada

grupo de dados separadamente que e levado em consideracao. Apos esta ordenacao a

hipotese de igualdade da soma dos postos de cada grupo e testada.

O teste de Friedman possui duas hipoteses: H0 (nao ha diferenca entre os trata-

mentos) e H1 (pelo menos um tratamento e diferente). A estatıstica de teste dispoe os

valores numa tabela com k (tratamentos) linhas/colunas e N (tratados) colunas/linhas.

Sao atribuıdos postos de 1 a k para cada N e sao somados os postos para cada k e

elevados ao quadrado da soma.

O teste de Friedman sera utilizado para comparar os solos de blues compostos deste

trabalho. Sera analisado se houve alguma diferenca com significancia estatıstica entre

os solos ou nao.

A Figura 5.14 um exemplo onde um professor reteve a media de um grupo de 4 alunos

no final de cada trimestre a fim de avaliar se hou progressao na aprendizagem.

Alunos Trimestre 1 Trimestre 2 Trimestre 3

1 10 14 9

2 19 15 17

3 8 13 15

4 12 11 6

Figura 5.14: Tabela Friedman

Page 59: Composição Algorítmica: Geração de Solos de Blues

Metodologia 41

A partir dos dados da Figura 5.14, vamos ranquear os alunos com notas de 1 a 3,

onde o aluno com menor nota receba 1 e o aluno com maior nota receba 3. Tambem

iremos somar os postos de cada aluno e elevar este resultado ao quadrado, como mostra

a Figura 5.15.

Alunos Trimestre 1 Trimestre 2 Trimestre 3

1 2 3 1

2 3 1 2

3 1 2 3

4 3 2 1

R 9 8 7

R2 81 64 49

Figura 5.15: Tabela Friedman

Os dados da Tabela 5.15 e utilizado na estatıstica do teste de Friedman, que e dada

por:

S =12b

k(k + 1)

k∑j=1

(Rj

b− k + 1

2)2 (5.1)

Onde b e o numero de blocos dos experimentos, k e o numero de tratamentos e R e

a soma dos postos para cada k.

No teste de Friedman vamos testar a hipotese H0: t1 = t2 = ... = tk contra a

hipotese alternativa onde t1, t2, ..., tk sao diferentes em pelo menos um caso. Ao nıvel de

significancia α, iremos rejeitar a hipotese H0 se S ≤ sα. Caso contrario a hipotese nula

nao e rejeitada. A constante sα e escolhida de modo que a probabilidade de erro seja

igual a α.

5.7 Conclusao

Este capıtulo descreve as ferramentas que sao utilizadas no desenvolvimento deste

trabalho, como os dados serao representados computacionalmente, tecnicas computaci-

onais para compor os solos e uma forma de classificacao destes.

O fato principal a ser comentado nesta metodologia e a utilizacao do limiar para

influenciar a escolha da ordem da cadeia a ser utilizada, pois se trata de uma ideia nova

para este trabalho. O fator limiar ajudara a resolver o problema que ocorre quando

Page 60: Composição Algorítmica: Geração de Solos de Blues

42 Metodologia

geramos cadeias de ordens muito altas (tendem a gerar copias) ou muito baixas (baixa

inducao).

As cadeias de Markov sao implementadas de forma a aceitar qualquer tipo de estru-

tura. Neste trabalho utilizamos 4 estruturas (TND, ND e N&D), todas representando

algum tipo de informacao sobre a nota. Desta forma teremos 4 cadeias diferentes para

gerar os novos solos.

O teste de Friedman e feito com os ranks dos solos. Cada rank e feito por uma pessoa.

Com o resultado de suas hipoteses poderemos definir se ha ou nao alguma diferenca com

significancia estatıstica entre pelo menos um par de solos.

Page 61: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 6

Resultados

“O blues e o que eu me transformei em, o que me deu inspiracao e alıvio em todas as

provas da minha vida.”

— Eric Clapton, 1945

Neste capıtulo e apresentado os resultados obtidos atraves das tecnicas utilizadas

para gerar os solos e a avaliacao dos solos atraves do teste de Friedman.

6.1 Testando a consistencia da cadeia de Markov com

inteiros e caracteres

Alguns experimentos foram executados com vetores de inteiros e de caracteres visando

verificar a consistencia das sequencias geradas. Os resultados obtidos foram satisfatorios,

pois as sequencias geradas obedecem os criterios da cadeia de Markov construıda, isto e,

cada elemento gerado no novo vetor e precedido por elementos que tambem os precedem

nas sequencias de entrada.

A cadeia de Markov foi implementada com um parametro no construtor que repre-

senta a ordem da cadeia, ou seja, uma cadeia de ordem n mapeia uma nota que ocorre

depois de uma sequencia de n outras notas. Os testes realizados obedeceram os criterios

da ordem, onde foram geradas novas sequencias onde uma nota e precedida por uma

sequencia de notas do tamanho da ordem definida.

43

Page 62: Composição Algorítmica: Geração de Solos de Blues

44 Resultados

6.2 Treinando cadeias de Markov com parametros dife-

rentes

Buscando a melhor tecnica para gerar um solo de blues, diferentes cadeias de Markov

foram treinadas. Foi criada a estrutura Nota, que e composta por 3 campos: time, pitch

e duration. O campo time so tem valores entre 0 e 4, por representar um compasso 4

por 4. O campo pitch quando representado pelo inteiro −1 significa silencio, quando

representado por alguns inteiros entre 1 e 120 reproduzem notas musicais pertencentes

a escala pentatonica em la.

Uma cadeia chamada de cmTND foi treinada com sequencias da estrutura Nota.

Esta cadeia leva em consideracao 3 campos: T representa a posicao da nota no compasso,

N representa a nota e D o tempo de duracao desta nota. Um elemento desta cadeia

possui menos ocorrencias de elementos sucessores devido a um criterio de comparacao

mais detalhado entre os elementos. Por exemplo: como mostra a Figura 6.1 os elementos

sao seguidos por apenas um outro elemento especıfico. Se aumentada a ordem da cadeia,

as ocorrencias tendem a diminuir ainda mais.

E importante ressaltar que para treinar as cadeias TND a estrutura Nota contem

o tempo da nota no compasso. Diferente da estrutura quando esta representando uma

melodia, que tem o tempo absoluto da musica.

Elemento: 3.5 67 0.5 / 0 60 0.25 / 0.25 60 0.25

Seguido 1 vez pelo elemento 0.5 60 0.25

Elemento: 3.5 67 0.5 / 0 64 0.5 / 0.5 67 0.5

Seguido 1 vez pelo elemento 1 67 0.5

Elemento: 3.5 69 0.5 / 0 67 0.5 / 0.5 64 0.166667

Seguido 1 vez pelo elemento 0.666667 67 0.166667

Figura 6.1: Cadeia de Markov TND de ordem 3

Uma outra cadeia chamada cmN foi treinada com uma sequencia de int, ou seja,

levando em consideracao apenas um campo da estrutura Nota, o (pitch). Neste caso,

o elemento e sucedido por muitos outros elementos ja que leva em consideracao apenas

um campo, como ilustra a Figura 6.2. Treinando a cadeia em ordens baixas, a tendencia

e de se aumentar ainda mais este numero de ocorrencias.

Page 63: Composição Algorítmica: Geração de Solos de Blues

Resultados 45

Elemento: 73

Seguido 27 vezes pelo elemento 45

Seguido 28 vezes pelo elemento 64

Seguido 28 vezes pelo elemento 74

Seguido 28 vezes pelo elemento 75

Seguido 14 vezes pelo elemento 76

Elemento: 74

Seguido 16 vezes pelo elemento 55

Seguido 10 vezes pelo elemento 60

Seguido 597 vezes pelo elemento 64

Seguido 15 vezes pelo elemento 66

Seguido 65 vezes pelo elemento 67

Seguido 480 vezes pelo elemento 69

Seguido 15 vezes pelo elemento 70

Seguido 15 vezes pelo elemento 71

Seguido 504 vezes pelo elemento 72

Seguido 545 vezes pelo elemento 74

Seguido 370 vezes pelo elemento 76

Seguido 148 vezes pelo elemento 79

Elemento: 75

Seguido 28 vezes pelo elemento 78

Figura 6.2: Cadeia de Markov N de ordem 1

Levando em consideracao apenas o campo duration, uma outra cadeia chamada cmD

foi treinada com sequencias de double. Analogamente a cadeia cmN, se treinada com

ordens baixas a cadeia cmD tende a mapear um maior numero de ocorrencias, como

mostra a Figura 6.3.

E finalmente uma ultima cadeia chamada cmND foi treinada com uma sequencia

de Pair (uma estrutura composta por pitch e duration). Nesta cadeia o numero de

sucessoes de um dado elemento sao mais frequentes do que o da cadeia cmTND e

menos frequentes que das cadeias cmN e cmD. A Figura 6.4 ilustra as ocorrencias da

cadeia cmND.

6.3 Regras para a geracao dos solos

Um solo e composto por varios licks, isto e, sao geradas sequencias menores (licks)

que vao se concatenando ate o tempo final da musica. Foram geradas 3 sequencias

Page 64: Composição Algorítmica: Geração de Solos de Blues

46 Resultados

Elemento: 0.625

Seguido 1 vez pelo elemento 0.333333

Seguido 1 vez pelo elemento 0.375

Seguido 2 vezes pelo elemento 0.5

Elemento: 0.666667

Seguido 4 vezes pelo elemento 0.333333

Seguido 1 vez pelo elemento 0.5

Seguido 2 vezes pelo elemento 0.666667

Seguido 1 vez pelo elemento0.875

Seguido 1 vez pelo elemento 1

Elemento: 0.75

Seguido 9 vezes pelo elemento 0.25

Seguido 2 vezes pelo elemento 0.5

Seguido 1 vez pelo elemento 1

Figura 6.3: Cadeia de Markov D de ordem 1

Elemento: 79 0.333333 / 74 0.333333

Seguido 1 vez pelo elemento -1 2.22045e-16

Seguido 4 vezes pelo elemento 69 0.333333

Seguido 3 vezes pelo elemento 79 0.333333

Elemento: 79 0.333333 / 76 0.208333

Seguido 1 vez pelo elemento 79 0.333333

Elemento: 79 0.333333 / 76 0.333333

Seguido 3 vezes pelo elemento 74 0.333333

Seguido 4 vezes pelo elemento 79 0.333333

Figura 6.4: Cadeia de Markov ND de ordem 2

diferentes de novos solos.

A primeira sequencia foi gerada a partir da cadeia cmTND. O tempo de inıcio

do lick dentro do compasso, ou seja, em que momento sera tocada a primeira nota,

foi sorteado entre os licks originais do Johnny Winter para dar inıcio a sequencia. A

segunda sequencia e a uniao de duas cadeias, a cmN e a cmD. A uniao e feita da

seguinte forma: sao utilizadas as posicoes iguais dos elementos das duas sequencias para

uni-los. A terceira e baseada na cadeia cmND.

Para evitar uma escolha onde um elemento tenha poucos sucessores, foi definido

Page 65: Composição Algorítmica: Geração de Solos de Blues

Resultados 47

um limiar, que e explicado no Capıtulo 5.4. Tambem e definida uma base musical

(representada pelo som de um baixo tocado com dedos) para tocar junto com o solo

(representado pelo som de um violao acustico).

6.4 Avaliando novos solos baseados nos licks do guitar-

rista Johnny Winter

Johnny Dawson Winter III foi um guitarrista de blues norte-americano conhecido

por seu albinismo e seus solos de guitarra inconfundıveis. Johnny fazia solos simples

de country blues ate solos com distorcao e slide de blues-rock. Seus solos tambem se

caracterizavam pela velocidade que as notas eram tocadas e por bends elevados.

Foi utilizado neste trabalho uma base de dados com 100 licks do Johnny Winter

para treinamento das cadeias de Markov. As Figuras 6.5, 6.7 e 6.6 ilustram partituras

de novos solos gerados com o algoritmo proposto.

Moderate h = 120

: 44

c

1

"#

B

"!

B

)

B

"!

B

*

B

"!

B

(

B

&

B

&

B

#

B

!

B

#

B

$

B B3 3

3 3 3

B

"#

B

!

B

)

B

"!

B

)

B Q SL3

3

3 R

)

B

!

B

)

B

!

B

)

B)

B

'

BD

)

B

)

B

)

B

)

B

*

B3 3

33

B

*

B

*

B

)

B

*

B R SM

3 3 3

3

5 R T

"!

B

"!

B

"!

B

"!

B

)

B

"!

B

)

B

*

B

(

B3

3

B

*

B

"!

B

*

B

(

B

&

B

(

B

&

B SM L L3

3

7 R

(

B

&

B

(

B

(

B

!

B

(

B

'

BD

!

BF

$

B

!

B!

B&

B

(

B S T3 R

"!

B

"&

B

"&

B

"&

B

"%

B

"$

B

"%

B

"&

B

"#

B

"&

B

"#

B S3 3 3

3

9 P S

"#

B

"!

B R

"!

B P SL M M

S

)

B

"!

B

)

B

"!

B Q SL S

"!

B

*

B

)

B

*

B

(

B

&

B

$

B

!

B P R3 3

3

3

Page 1/2

12S

$

B

#

B

!

B

"

B

!

B

#

B

!

B B3 3

B

!

B

#

B

!

B

#

B

!

B P R TH3 3

Figura 6.5: Exemplo de tablatura de um novo solo TND de ordem 2

Foram selecionados 18 solos, onde 3 foram criados com licks originais do Johnny

Winter e 15 atraves do algoritmo proposto. Estes 15 solos foram gerados da seguinte

forma:

• Solo ND1 representado por uma cadeia ND de ordem 1

• Solo ND2 representado por uma cadeia ND de ordem 2

• Solo ND25 representado por uma cadeia ND de ordem 2 com influencia de um

limiar com valor 5

Page 66: Composição Algorítmica: Geração de Solos de Blues

48 Resultados

Moderate h = 120

: 44

c

1

"&

B

"$

B

"$

B

"%

B

"(

B

"&

BS

!

B

"%

B

!

B

"#

BM

3

3

2 B B

"!

B

"#

B

*

B

*

B

"!

B

"&

B

"&

B

"#

BL O

3 33

B B B

"$

B

"$

B

"!

B

"!

B

)

B

"&

BP S T

3 3

4 Q T

!

B B3 B

$

B

&

B

!

B

$

B

&

B

"!

B

)

B T3

3 Q

*

B

"!

B

(

B3

3 3

7

&

B

(

B

&

B

(

B

"&

B

"#

B

"!

B

"!

B

*

B

)

B

*

B

*

B

(

BD3

3 3 3

&

B P

&

B

#

B

!

B

#

BM B

!

B

!

B

"#

B

"$

B

"$

B

"%

B

"#

B

"#

B

"#

B3

3

3

Page 1/2

10 B

"!

B

"#

B

"!

B

"#

B

"!

B

"#

B

"$

BP

"$

B

"%

B

3 3

3

B

"#

B

"%

B Q S

"&

B

"(

B

"(

B

"&

B

"(

B

"%

B B3

3 33 3

Figura 6.6: Exemplo de tablatura de um novo solo ND de ordem 1

Moderate h = 120

: 44

c

1 P

&

B

$

B

!

B

$

B

#

B

!

B

#

B

"

B

#

B

"

B

&

B

#

B

!

B

#

B

!

B

%

BD

!

B

$

B

!

B

"

B

!

B

$

B

!

B

$

BF

"

B

#

B

$

B

$

B

)

B

"!

B

)

B

3 33 3 3

3

4B

"!

B

)

B

"!

B

)

B)

B

&

B

)

BL3 3

B

)

B

*

B

*

B

(

B

&

B

(

B

(

B

(

B

!

B3

33 3

6

!

B

#

B

#

B!

B

!

B

$

B

"

B

$

B

!

B

!

B

!

B

!

B B3

3 3 3

7 B

#

B

)

B

&

B

$

B

!

B

$

B

!

B

$

B

"

B

$

B

!

B

"

B

"'

BD

"$

B

"&

B B

3 3 3

3 3

B

"%

B

"$

B

"&

B

"#

B

"(

B

"(

B

"&

B

"(

B

"&

B

"(

B B3

3

3 3

Page 1/3

9

B

"(

B

"&

B

"(

B

"(

B

"&

B

"(

B

"%

B

"#

B

"%

B

"#

B

"!

B3

B

"#

B

"&

B

"#

B

"(

B

"&

B

"(

B

"&

B

"&

B

"&

B

"#

B

"#

B

"!

B

"#

B B

3 3

3

Figura 6.7: Exemplo de tablatura de um novo solo N&D de ordem 3

• Solo ND3 representado por uma cadeia ND de ordem 3

• Solo ND35 representado por uma cadeia ND de ordem 3 com influencia de um

limiar com valor 5

• Solo N&D1 representado pelas cadeias N e D de ordem 1

• Solo N&D2 representado pelas cadeias N e D de ordem 2

• Solo N&D25 representado pelas cadeias N e D de ordem 2 com influencia de um

limiar com valor 5

• Solo N&D3 representado pelas cadeias N e D de ordem 3

• Solo N&D35 representado pelas cadeias N e D de ordem 3 com influencia de um

limiar com valor 5

Page 67: Composição Algorítmica: Geração de Solos de Blues

Resultados 49

• Os solos O1, O2 e O3 sao representados por licks originais

• Solo TND1 representado por uma cadeia TND de ordem 1

• Solo TND2 representado por uma cadeia TND de ordem 2

• Solo TND25 representado por uma cadeia TND de ordem 2 com influencia de um

limiar com valor 5

• Solo TND3 representado por uma cadeia TND de ordem 3

• Solo TND35 representado por uma cadeia TND de ordem 3 com influencia de um

limiar com valor 5

Para avaliar os novos solos gerados foi realizado um teste com 33 pessoas, a grande

maioria musicos e apreciadores de blues. Foi pedido para que cada pessoa avaliasse 18

solos de 30 segundos cada. Foi pedido que cada pessoa fizesse um rank dos solos, isto e,

que os ordene do melhor para pior ou vice versa. Cada pessoa escutava os solos em uma

ordem aleatoria. Foi implementada uma funcao em C++ que gera numeros aleatorios

entre 1 e 18, para definir a ordem em que as pessoas escutariam os solos. O primeiro solo

que a pessoa escutava, era classificado como solo 1, o segundo solo como solo 2 e assim

de forma analoga. A medida que a pessoa ia escutando os solos, ela adicionava-os a uma

lista feita por ela mesma de forma que a lista satisfizesse as condicoes de um rank. A

partir dos ranks feitos pelas pessoas, o melhor solo de cada sequencia ganha peso 18, o

segundo melhor ganha peso 17 e assim sucessivamente ate o ultimo solo que ganha peso

1.

Com estes 33 ranks, e construıda uma matriz 33x18. Apos a construcao da matriz

com os pesos dos solos, foi realizado o teste de Friedman para realizar a analise de

variancia dos solos. Esta analise visa, fundamentalmente, verificar se existe uma dife-

renca significativa entre as medias dos solos, isto e, verifica se os solos possuem medias

iguais ou nao. Como podemos ver na ultima coluna da Tabela 6.1 a analise de Variancia

no teste de Friedman deu um valor p = 0.5949, isto implica que nao ha uma diferenca

significativa entre os solos. Para que haja uma diferenca significativa entre os solos, p

deveria assumir um valor menor que 0.05. A partir dos dados coletados podemos afir-

mar que a hipotese nula (H0) e validada, isto e, nao podemos afirmar que as medias sao

diferentes com mais de 95% de confianca.

Page 68: Composição Algorítmica: Geração de Solos de Blues

50 Resultados

Tabela 6.1: Tabela ANOVA de Friedman

Source SS df MS Chi-sq Prob>Chi-sq

Collumns 427.7 17 25.1604 15.01 0.5949

Error 15560.3 544 28.6034

Total 15.988 593

Agora sera feita uma analise de metodo por metodo comparando seus ranks medios.

Levando em consideracao o metodo TND, e calculando uma media das suas medias

vemos que obteve o valor de 9.70. A Tabela 6.2 ilustra todas as suas medias, onde a

media de maior destaque foi 10.12 com a ordem 2 e utilizando um limiar, e a media de

menor destaque foi 9.30 com a ordem 3 e utilizando um limiar.

Tabela 6.2: Medias do metodo TND

Metodo media

TND ordem 1 9.30

TND ordem 2 9.75

TND ordem 2 com limiar 5 9.96

TND ordem 3 10.12

TND ordem 3 com limiar 5 9.36

Considerando o metodo ND, e obtida uma media de valor 9.56 entre todas as suas

medias, e tambem a melhor media entre os metodos computacionais. Foi constatado

um dado muito interessante neste metodo, pois ele obteve a menor media entre todos os

metodos, mas tambem obteve a melhor media entre os metodos gerados pela maquina,

perdendo apenas para os originais. A Tabela 6.3 ilustra as suas medias, onde o valor

8.75 foi a menor media deste metodo e tambem a menor media geral, a o valor 11.42 sua

melhor media e tambem a melhor media entre os metodos computacionais utilizados na

geracao dos solos.

E finalmente o metodo N&D, obteve uma media igual a 8.78, a menor media entre

os metodos computacionais. Foi o metodo que apresentou menor desvio padrao entre

sua populacao. A Tabela 6.4 mostra suas medias, onde a menor obteve o valor de 7.9 e

a maior media o valor de 9.81.

Page 69: Composição Algorítmica: Geração de Solos de Blues

Resultados 51

Tabela 6.3: Medias do metodo ND

Metodo media

ND ordem 1 8.75

ND ordem 2 8.84

ND ordem 2 com limiar 5 9.54

ND ordem 3 11.42

ND ordem 3 com limiar 5 9.24

Tabela 6.4: Medias do metodo N&D

Metodo media

N e D ordem 1 7.9

N e D ordem 2 9.81

N e D ordem 2 com limiar 5 8.69

N e D ordem 3 8.45

TND ordem 3 com limiar 5 9.06

Os solos originais obtiveram uma media de 11.708, superando as medias dos metodos

computacionais. A Tabela 6.5 ilustra as medias dos 3 solos originais.

Tabela 6.5: Medias dos solos originais

Metodo media

Original 1 10.9

Original 2 10.18

Original 3 9.63

Agora sera analisado as medias de acordo com as ordens. Os solos gerados de ordem

1 obtiveram uma media de valor 8.65, a pior media entre as ordens . Os solos gerados

de ordem 2 obtiveram uma media de 9.46. Os solos gerados de ordem 3 obtiveram uma

media de 10, a melhor entre as ordens. Isto implica aparentemente que quanto maior a

ordem, melhor conceituado sera o solo.

Agora sera analisado a influencia do limiar nos solos. Para definir o valor do limiar,

foi realizado um sorteio com numeros entre 2 e 9, onde o numero sorteado foi o 5. Os

Page 70: Composição Algorítmica: Geração de Solos de Blues

52 Resultados

solos de ordem 2 e 3 sem a influencia do limiar obtiveram uma media de 9.075. Ja com

a influencia do limiar obtiveram uma media de 9.05. A influencia do limiar na geracao

de um solo pelo metodo TND utilizando uma ordem 2 faz com que esta ordem seja

diminuıda em 1219 vezes das 1233 possibilidades da cadeia para gerar uma nota futura,

e de ordem 3 faz com que esta ordem diminua 1313 vezes das 1319 possibilidades. Assim

podemos afirmar que os solos gerados pelo metodo TND de ordens 2 e 3 utilizando um

limiar de valor 5, praticamente sao solos gerados por ordem 1.

O metodo ND de ordem 2, quando se utiliza o limiar de valor 5 diminui sua ordem

em 725 vezes das 788 possibilidades. De ordem 3, sua ordem e diminuıda 1089 vezes das

1108 possibilidades. Assim, como o metodo TND, pode-se afirmar que a utilizacao do

limiar de valor 5 faz com que este metodo gera sequencias de ordem 1 em 99% de seus

casos.

Diferente dos casos acima relatados, o metodo N de ordem 2 diminui sua ordem

apenas 27 vezes das 285 possibilidades. De ordem 3, 96 vezes das 749 possıveis. E o

unico metodo que o limiar de valor 5 tem pouca influencia para diminuir a sua ordem.

O metodo D de ordem 2 e diminuıda 72 vezes das 105 possıveis e de ordem 3 165

vezes das 208 possıveis. Tambem sendo bastante influenciado a reduzir sua ordem pelo

limiar. A Figura 6.6 ilustra a porcentagem de elementos que nao satisfazem o valor do

limiar 5, diminuindo a ordem da cadeia.

Tabela 6.6: Tabela da influencia do limiar nos metodos computacionais utili-zados para gerar os solos

Metodo Ordem 2 Ordem 3

TND 99% 99%

ND 92% 98%

N 9% 12%

D 69% 79%

A Figura 6.8 mostra os melhores solos em destaque, dentre os 4 solos em destaque 3

sao originais e 1 pertence ao metodo ND de ordem 3.

Ja a Figura 6.9 ilustra os 4 piores solos em destaque, onde um representa o metodo

ND de ordem 1, outro o metodo ND de ordem 2, outro o metodo N&D de ordem 3 e o

ultimo o metodo TND de ordem 3 com um limiar de valor 5.

Page 71: Composição Algorítmica: Geração de Solos de Blues

Resultados 53

5 6 7 8 9 10 11 12 13 14

TND35

TND3

TND25

TND2

TND1

O3

O2

O1

N&D35

N&D3

N&D25

N&D2

N&D1

ND35

ND3

ND25

ND2

ND1

No groups have mean column ranks significantly different from Group 4

Figura 6.8: Melhor solo

Os audios em arquivos MIDI podem ser baixados, (Souto 2015).

6.5 Conclusao

O intervalo de confianca entre todos os metodos foi de 5,8894 para um nıvel de

confianca de 0.05. Isto implica que, a princıpio, nao houve diferenca com significancia

estatıstica entre nenhum par de metodos. Tambem podemos observar entre todos os

metodos uma variacao de media entre 7.9 e 11.42. Baseando nas medias, podemos

concluir que o metodo TND foi o melhor abordado e a ordem 3, a melhor ordem a se

usar nas cadeias.

A influencia do limiar nos solos de ordens 2 e 3 reduziu-os em 99% dos casos para

solos de ordem 1. Como a ordem 1 obteve as piores medias, a influencia do limiar

direcionou os solos para uma ordem de medias inferiores. A utilizacao de 3 ordens neste

trabalho pode ter sido um numero baixo para o estudo do limiar. O estudo do limiar em

cadeias com ordens maiores pode ser mais eficaz, pois tambem haveriam mais ordens a

Page 72: Composição Algorítmica: Geração de Solos de Blues

54 Resultados

5 6 7 8 9 10 11 12 13 14

TND35

TND3

TND25

TND2

TND1

O3

O2

O1

N&D35

N&D3

N&D25

N&D2

N&D1

ND35

ND3

ND25

ND2

ND1

No groups have mean column ranks significantly different from Group 6

Figura 6.9: Pior solo

serem estudadas.

Page 73: Composição Algorítmica: Geração de Solos de Blues

Capıtulo 7

Conclusoes e Trabalhos Futuros

“Eu acho que o blues sempre estara por perto. As pessoas precisam dele.”

— Johnny Winter, 1944-2014

Neste trabalho, foi desenvolvido um sistema capaz de gerar solos de blues em gui-

tarras. Estes solos tem caracterısticas de solos de grandes guitarristas do blues, e sao

gerados em harmonia a uma base musical de blues pre determinada. Foi utilizada uma

base de blues representada pelo som de um baixo para harmonizar como os solos.

Foram estudadas diferentes modelos Markovianos com diferentes ordens. Implicando

em uma boa variacao de tecnicas para geracao dos solos. As ordens mais altas obtiveram

melhores medias que as ordens mais baixas, e o metodo TND (metodo com maior numero

de informacoes: tempo no compasso, nota e duracao) obteve a melhor media entre

os metodos computacionais. Talvez 3 seja um numero baixo de ordens a se estudar,

deixando uma opcao de trabalhar com mais ordens em trabalhos futuros. O valor 5 para

o limiar nao foi satisfatorio pois ele tendeu as cadeias a gerarem os solos na ordem 1, ou

seja, a ordem que obteve a menor media.

Apesar das melhores medias terem sido obtidas pelos solos originais, fazendo uma

analise individual entre os solos, o solo que obteve a melhor media foi o ND de ordem 3.

Com teste de Friedman apontando uma hipotese nula, podemos concluir que nao ha uma

diferenca com alguma significancia estatıstica entre nenhum dos solos, indicando que a

maioria dos solos gerados pela maquina foram tao bem conceituados como os originais.

Em trabalhos futuros, serao compostos novos licks de outros guitarristas do blues,

55

Page 74: Composição Algorítmica: Geração de Solos de Blues

56 Conclusoes e Trabalhos Futuros

aumentando a base de dados e variando o estilos dos licks. Uma interface tambem

sera criada para deixar o software com uma maior facilidade de uso. Um estudo mais

aprofundado sobre o valor ideal para o limiar tambem pode ser aplicado, para uma

reducao de ordem das cadeias mais apropriado. O algoritmo genetico tambem e um

tema interessante de ser abordado para se aplicar na geracao dos solos.

E impressionante o poder que os algoritmos tem para resolver alguns problemas de

entendimento humano, e atraves deles tentaremos desempenhar uma das tarefas mais

antigas desempenhadas pelo homem: a composicao musical.

Page 75: Composição Algorítmica: Geração de Solos de Blues

Referencias Bibliograficas

Biles, J. (1994). Genjam: A genetic algorithm for generating jazz solos, Proceedings of

the International Computer Music Conference, INTERNATIONAL COMPUTER

MUSIC ACCOCIATION, pp. 131–131.

Brooks, F. P., Hopkins, A., Neumann, P. G. & Wright, W. (1957). An experiment in

musical composition, Electronic Computers, IRE Transactions on (3): 175–182.

Dimuro, G. P., Reiser, R. H., Costa, A. C. & Souza, P. (2002). Modelos de markov e

aplicacoes, VI Oficina de Inteligencia Artificial, Pelotas: Educat pp. 37–59.

Feijao, P. C. (2004). Um algoritmo de criacao de improvisos com harmonia de jazz.

Friedman, M. (1937). The use of ranks to avoid the assumption of normality impli-

cit in the analysis of variance, Journal of the American Statistical Association

32(200): 675–701.

Hiller, L. A. & Isaacson, L. M. (1979). Experimental Music; Composition with an elec-

tronic computer, Greenwood Publishing Group Inc.

Nierhaus, G. (2009). Algorithmic composition: paradigms of automated music genera-

tion, Springer.

Papadopoulos, G. & Wiggins, G. (1999). Ai methods for algorithmic composition: A

survey, a critical view and future prospects, AISB Symposium on Musical Creativity,

Edinburgh, UK, pp. 110–117.

Sapp, C. (2015). www.sapp.mididfile.com.

Souto, D. (2015). www.alandefreitas.com.

57

Page 76: Composição Algorítmica: Geração de Solos de Blues

58 REFERENCIAS BIBLIOGRAFICAS

Verbeurgt, K., Dinolfo, M. & Fayer, M. (2004). Extracting patterns in music for com-

position via markov chains, Innovations in Applied Artificial Intelligence, Springer,

pp. 1123–1132.

Xenakis, I. (1992). Formalized music: thought and mathematics in composition, num-

ber 6, Pendragon Press.

Page 77: Composição Algorítmica: Geração de Solos de Blues

Indice Remissivo

Arvores, 29

Algoritmo de geracao, 33

Algoritmo de treinamento, 33

Altura, 18

Arranjo Associativo, 28

Avaliacao dos solos, 47

Cadeia de Markov, 11

Classe MFEvent, 23

Classe Midifile, 24

Classe TickTime, 23

Conceitos musicais, 17

Conceitos Musicais e Midifile, 17

Conclusao da Revisao da Literatura, 9

Conclusao sobre a Metodologia, 40

Conclusao sobre conceitos musicais e Midi-

file, 26

Conclusao sobre Modelos Markovianos, 16

Conclusao sobre os Resultados, 53

Conclusoes, 55

Conteiner, 31

Contribuicoes, 5

Estrutura padrao MIDI, 21

Exemplo de modelo Markoviano, 13

Formulacao matematica de um modelo Mar-

koviano, 12

Guitar Pro, 27

Introducao, 3

Iteradores, 32

Limiar, 34

Metodos de representacao de melodias, 37

Map, 32

Melodia Midifile, 26

Metodologia, 27

Motivacao, 4

Notas musicais, 17

Objetivos, 5

Ordens dos modelos Markovianos, 15

Organizacao do Texto, 5

Regras de geracao, 45

Representacao computacional de uma ca-

deia, 32

Resultados, 43

Revisao da Literatura, 7

Tablatura, 19

Testando a consistencia das cadeias, 43

Teste de Friedman, 39

Tom, 19

Treinando as cadeias, 44

59