Você está na página 1de 48

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE CIÊNCIAS EXATAS E DA TERRA


DEPARTAMENTO DE ESTATÍSTICA

Ábia Mariane Aquino do Nascimento

Aplicação de cadeias de Markov em música

Natal
2021
Ábia Mariane Aquino do Nascimento

Aplicação de cadeias de Markov em música

Monografia de Graduação apresentada ao De-


partamento de Estatística do Centro de Ci-
ências Exatas e da Terra da Universidade
Federal do Rio Grande do Norte como re-
quisito parcial para a obtenção do grau de
Bacharel em Estatística
Orientador: Prof. Dr. Bruno Monte de Castro

Natal
2021
Universidade Federal do Rio Grande do Norte - UFRN
Sistema de Bibliotecas - SISBI
Catalogação de Publicação na Fonte. UFRN - Biblioteca Setorial Prof. Ronaldo Xavier de Arruda - CCET

Nascimento, Ábia Mariane Aquino do.


Aplicação de cadeias de Markov em música / Ábia Mariane
Aquino do Nascimento. - 2021.
46f.: il.

Monografia (Bacharelado em Estatística) - Universidade


Federal do Rio Grande do Norte, Centro de Ciências Exatas e da
Terra, Departamento de Estatística. Natal, 2021.
Orientador: Prof. Dr. Bruno Monte de Castro.

1. Estatística - Monografia. 2. Composição algorítmica -


Monografia. 3. Cadeias de Markov - Monografia. 4. Extração de
padrões - Monografia. 5. Composição musical - Monografia. 6.
Melodia - Monografia. I. Castro, Bruno Monte de. II. Título.

RN/UF/CCET CDU 519.2

Elaborado por Joseneide Ferreira Dantas - CRB-15/324


MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE CIÊNCIAS EXATAS E DA TERRA
CURSO DE GRADUAÇÃO EM ESTATÍSTICA

ATA DE DEFESA DE MONOGRAFIA


BACHARELADO EM ESTATÍSTICA

Às 16h00min do dia 08 de setembro de 2021, por meio da ferramenta de transmissão na


plataforma GoogleMeet, compareceu para defesa da monografia do curso de graduação em
Estatística o aluno Ábia Mariane Aquino do Nascimento tendo como Título da Monografia
“Aplicação de cadeias de Markov em música”. Constituiu a Banca Examinadora os
professores Bruno Monte de Castro (presidente), Antonio Marcos Batista do Nascimento
(examinador) e Eliardo Guimarães da Costa (examinador). Após a apresentação e as
observações dos membros da banca avaliadora, ficou definido que o trabalho foi
considerado aprovado.

______________________________________________________
Prof. Dr. Bruno Monte de Castro (DEST/UFRN)
Orientador

______________________________________________________
Prof. Dr. Antonio Marcos Batista do Nascimento (DEST/UFRN)
Examinador

______________________________________________________
Prof. Dr. Eliardo Guimarães da Costa (DEST/UFRN)
Examinador
MINISTÉRIO DA EDUCAÇÃO
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
SISTEMA INTEGRADO DE PATRIMÔNIO, ADMINISTRAÇÃO E
FOLHA DE ASSINATURAS
CONTRATOS

Emitido em 09/09/2021

ATA DE DEFESA DE TRABALHO DE CONCLUSÃO DE CURSO Nº 2/2021 - EST/CCET (12.02)

(Nº do Protocolo: NÃO PROTOCOLADO)

(Assinado digitalmente em 09/09/2021 12:31 ) (Assinado digitalmente em 09/09/2021 12:14 )


ANTONIO MARCOS BATISTA DO NASCIMENTO BRUNO MONTE DE CASTRO
PROFESSOR DO MAGISTERIO SUPERIOR PROFESSOR DO MAGISTERIO SUPERIOR
EST/CCET (12.02) EST/CCET (12.02)
Matrícula: 1048587 Matrícula: 2354162

(Assinado digitalmente em 09/09/2021 14:26 )


ELIARDO GUIMARAES DA COSTA
PROFESSOR DO MAGISTERIO SUPERIOR
EST/CCET (12.02)
Matrícula: 3010614

Para verificar a autenticidade deste documento entre em https://sipac.ufrn.br/documentos/ informando seu número: 2
, ano: 2021, tipo: ATA DE DEFESA DE TRABALHO DE CONCLUSÃO DE CURSO, data de emissão: 09/09
/2021 e o código de verificação: 2e3267998b
Dedico este trabalho aos meus pais, por tudo que sempre fazem por mim.
Dedico também a todos os professores que contribuíram em minha
formação, desde o jardim de infância até os dias atuais.
Agradecimentos

Em primeiro lugar a Deus, que me deu uma nova oportunidade de viver e junto a
essa oportunidade me presenteou com muitas conquistas, dentre as quais essa.
Aos meus pais Antonio Araújo do Nascimento e Maria Aquino Merciano do Nasci-
mento, peças fundamentais. Por todo apoio durante a vida, por todo grande cuidado e por
toda preocupação. Hoje podemos comemorar juntos todo esforço. Muito obrigada!
Ao meu irmão Abner Moabe, por toda ajuda e incentivo, pelas alegrias comparti-
lhadas a cada conquista nessa caminhada.
Ao professor Dr. Bruno Monte de Castro, pelas grandes orientações durante a
elaboração deste trabalho e pela compreensão em alguns momentos delicados que passei
durante a fase de desenvolvimento dessa pesquisa.
Aos professores Dr. Antonio Marcos Batista do Nascimento e Dr. Eliardo Guimarães
da Costa, por aceitarem o convite para a participação da banca.
Deste modo também agradeço a todos os demais professores que compõem o DEST,
por todo conhecimento compartilhado dentro e/ou fora de sala de aula, dentre os quais
destaco o professor André Pinho e as professoras Denize Barbosa e Mariana Araújo, pelas
grandes ajudas em distintos momentos que precisei. Gratidão a todos vocês.
A toda equipe do LEA, pela oportunidade de conhecer diferentes aplicações da
estatística em nosso cotidiano, em especial a Talita por todo suporte em cada projeto.
A todos os meus grandes companheiros dentro da universidade, que contribuíram
das mais variadas maneiras durante todo esse tempo, nos quais destaco a Beatriz Ariadna,
Elizabeth Palhano, Tayane Varela, Ivonaldo Silvestre, Alessandro Pereira, Wesley Cruz,
Felipe Maciel, Ana Gabriela, Ana Luzielma, Jocicleyton Ferreira, Mariana Cavalcante,
Samuel Duarte, Julio Cesar e Thiago Valentim. O apoio de cada um de vocês tem sido
muito importante.
Agradeço também a toda equipe que compõe o IEPI - LIGA, pela companhia, por
cada ajuda e pela oportunidade que me foi dada de colocar em prática os conhecimentos
estatísticos adquiridos dentro da universidade.
A cada um dos meus irmãos que fazem parte, juntamente comigo, da AD o Bom
Samaritano e todo setor 9 da IEADERN, que de fato se alegram comigo em cada conquista.
A todos que contribuíram, diretamente ou indiretamente, para que este sonho (de
tantos) pudesse se tornar real também em minha vida.
Com sincera gratidão, a todos vocês, muito obrigada!
“Pois todas as coisas foram criadas por ele, e tudo existe por meio dele e para ele. Glória
a Deus para sempre! Amém!”
Romanos 11.36
Resumo
A música é uma das formas de expressão artística que está presente em nossa sociedade
desde muito tempo, existindo evidências de que é não apenas conhecida mas também
praticada desde a pré-história. Essa forma de arte é resultante da combinação de sons e
silêncios ao longo de um tempo. Embora vivamos em um mundo imerso na música, nem
sempre o processo de composição musical é algo tão simples, envolvendo, além da parte
artística, o raciocínio lógico e matemático. Distintos trabalhos vêm estudando diferentes
ferramentas para a elaboração de composição musical algorítmica, isto é, a elaboração de
músicas com auxílio de algoritmos computacionais, na qual existe uma entrada (fornecida
por seres humanos), seguida da aplicação de algum conjunto de regras (algoritmo) e retorna
uma nova melodia. Este trabalho tem como objetivo apresentar definições e propriedades
das cadeias de Markov, além de expor um modelo de composição musical utilizando esse
modelo probabilístico a partir de músicas já existentes e aplicações. Para este feito foi
utilizada a linguagem R para implementação do algoritmo e obtenção da nova melodia.
Verificou-se que as novas melodias geradas seguiam certa lógica na combinação das notas
e não apresentavam muita semelhança com a melodia inicial. No entanto, percebeu-se que,
em alguns casos, quando a melodia termina, pode parecer que foi interrompida antes da
conclusão. A partir deste resultado pode-se concluir que esse modelo, de fato, é capaz de
ajudar na composição de novos trechos musicais, obedecendo o princípio básico da teoria
musical, isto é, com as notas dentro da tonalidade da música, no entanto pode não ser o
suficiente para substituir por completo o toque artístico humano.

Palavras-chave: Composição algorítmica. Cadeias de Markov. Extração de padrões.


Composição musical. Melodia.
Abstract
Music is one of the forms of artistic expression that has been present in our society for a
long time, there is evidence that it is not only known but also practiced since prehistory.
This art form is the result of the combination of sounds and silences over a period of
time. Although we live in a world immersed in music, the musical composition process
is not always something so simple, involving, in addition to the artistic part, logical
and mathematical reasoning. Different works have been studying different tools for the
elaboration of algorithmic musical composition, that is, the elaboration of music with
the support of computational algorithms, in which there is an input (provided by human
beings), followed by the application of some set of rules (algorithm) and returns a new
melody. This work aims to present definitions and properties of Markov chains, in addition
to exposing a musical composition model using this probabilistic model from existing music
and applications. For this purpose, the R language was used to implement the algorithm
and obtain the new melody. It was found that the new generated melodies followed a
certain logic in the combination of notes and did not present much resemblance to the
initial melody. However, it was noticed that, in some cases, when the melody ends, it may
feel like it was interrupted before completion. From this result it can be concluded that
this model is in fact able to help in the composition of new musical excerpts, obeying the
basic principle of music theory, that is, with the notes within the tonality of the music,
however it may not be enough to completely replace the human artistic touch.

Keywords: Algorithmic composition. Markov chains. Pattern extraction. Musical compo-


sition. Melody.
Lista de ilustrações

Figura 3.1 – Representação de alguns dos elementos que compõem uma partitura. . 27
Figura 3.2 – Representação das 7 notas musicais naturais no pentagrama na clave
de sol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Figura 3.3 – Representação de uma nota musical e sua oitava. . . . . . . . . . . . . 28
Figura 3.4 – Representação de um trecho musical na partitura. . . . . . . . . . . . . 29
Figura 3.5 – Estrofe completa da canção Castelo Forte. . . . . . . . . . . . . . . . . 31
Figura 3.6 – Experimento 1: Melodia composta a partir da canção Castelo forte. . . 32
Figura 3.7 – Experimento 2: Melodia composta a partir da canção Castelo forte. . . 35
Lista de tabelas

Tabela 2.1 – Probabilidades de transição das taxas de glicose no sangue de um


determinado paciente. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Tabela 2.2 – Amostra gerada de uma cadeia de Markov. . . . . . . . . . . . . . . . . 20
Tabela 3.1 – Equivalências entre sustenidos e bemóis. . . . . . . . . . . . . . . . . . 28
Tabela 3.2 – Notas naturais e seus respectivos símbolos em representação de cifras. . 29
Sumário

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2 CADEIAS DE MARKOV . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 Definições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Processo estocástico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Processo homogêneo no tempo . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.3 Cadeia de Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Estimação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3 APLICAÇÃO E RESULTADOS . . . . . . . . . . . . . . . . . . . . . 24
3.1 Introdução à composição algorítmica via cadeia de Markov . . . . . 24
3.2 Alguns conceitos musicais . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Aplicação do método . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.1 Obtendo as matrizes de transição . . . . . . . . . . . . . . . . . . . . . . 28
3.3.2 Gerando melodias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.3 Executando áudios a partir do R . . . . . . . . . . . . . . . . . . . . . . . 30
3.4 Aplicação e resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . 36

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

APÊNDICES 39
13

1 Introdução

A música é uma forma de expressão artística resultante da junção de sons e silêncios


ao longo do tempo, sendo ela resultado de composições organizadas, improvisadas ou até
mesmo aleatórias (BRASIL, 2013).
Dada sua expansão no decorrer dos anos, a música passou a ter utilidades além do
campo artístico, passando a ser utilizada também em contextos educacionais, terapêuticos,
militares, atividades coletivas e festas, por exemplo (BRASIL, 2013). Segundo Hassani e
Wuryandari (2016) pessoas ouvem música para regular o humor, alcançar a autoconsciência,
como forma de expressão social, além de outros motivos.
O processo de composição musical é formado por estruturas abstratas. Como aponta
Corrêa (2008), dois domínios humanos são utilizados para se entender e processar música,
sendo eles o domínio da subjetividade abstrata, elemento voltado ao campo mais artístico, e
o domínio da objetividade abstrata, que está relacionado a lógica e a matemática, elemento
esse que pode facilmente ser obtido por computadores.
Em vista disso é perceptível que o processo de composição musical exige um certo
esforço por parte do compositor, até mesmo para os mais experientes nesta atividade
(VERBEURGT; DINOLFO; FAYER, 2004) e permite que diferentes mecanismos sejam
utilizados para a obtenção de uma nova canção. Contudo, uma forma rápida e talvez a
mais simples que uma pessoa pode utilizar na hora de produzir uma nova melodia é por
meio da alteração ou combinação de trechos musicais já existentes, contanto que respeite
certos padrões, ainda é possível se obter algo que soe agradável aos ouvidos humanos.
Tendo por base essas afirmações surge então o questionamento: seria possível um
computador produzir músicas de forma autônoma? A fim de responder a essa pergunta uma
das linhas de pesquisa desta área se dá por meio do estudo de algoritmos de composição
musical. A utilização destes algoritmos se deu início mesmo antes da popularização de
computadores, sendo utilizada na composição de algumas das obras de músicos como
Mozart, criador de uma espécie de jogo de dados que permitia a criação de uma nova
melodia a partir da escolha aleatória de pequenos pedaços de composições previamente
prontas, e John Cage, na composição da obra Atlas Eclipticalis (CAMARATTA; FISCHER,
2015 ou 2016).
Segundo registros, Lejaren Hiller e Leonard Isaacson foram os pioneiros em trabalhos
nesse campo de pesquisa, por volta da década de 50. Juntos elaboraram um sistema capaz
de gerar notas musicais de forma pseudoaleatórias, com base em cadeias de Markov, o
que resultou na produção da peça illiac Suite, se tornando a primeira música totalmente
composta por computador. A partir de então, outros pesquisadores estudaram algoritmos
Capítulo 1. Introdução 14

de composição utilizando diferentes metodologias, tais como redes neurais, automatas,


cadeias de Markov e fractais (BILES et al., 1994; COPE, 1987; DANNENBERG, 1993).
Independente da metodologia utilizada, o que se há em comum é o reconhecimento
de padrões e a partir disso a criação de novas músicas e/ou trechos musicais. O uso de
cadeias de Markov para gerar novas melodias torna-se bastante viável, uma vez que sua
principal característica é o fato de que a ocorrência de um evento ou estado futuro depende
apenas do presente.
O modelo probabilístico a qual denominamos de cadeias de Markov surgiu a partir
do problema de se tentar analisar a frequência com que as vogais apareciam em poemas e
textos literários. Tendo essa motivação o matemático russo Andrey Markov propôs, em
torno de 1905, esse modelo (RINCÓN, 2012).
O processo de Markov vem sendo utilizado em diferentes tipos de estudos, dentre
os quais pode-se citar na modelagem matemática de epidemias (FIDALGA, 2017), deter-
minação e interpretação de indicadores educacionais (MARQUES; SILVA, 2013), controle
biológico de plantas (SILVEIRA JÚNIOR et al., 2014), dentre outros estudos.
Este trabalho tem por objetivo propor um modelo para criação de novos trechos
musicais a partir de músicas conhecidas utilizando cadeias de Markov. Para tal finalidade
foram implementados algoritmos utilizanda a linguagem R (R Core Team, 2020) que
auxiliaram no reconhecimento e extração de padrões musicais.
Os objetivos específicos desta pesquisa são:

• Apresentar a definição e propriedades de processos estocásticos;

• Apresentação de definições e propriedades de cadeias de Markov;

• Cálculo do estimador de máxima verossimilhança para as probabilidades de transição;

• Implementação de algoritmos para obtenção das estimativas para as probabilidades


de transição, por meio de estimador de máxima verossimilhança;

• Implementação de algoritmos para criação de novos trechos musicais.

Este trabalho está desenvolvido da seguinte maneira: No Capítulo 2 são apresentadas


definições, propriedades e exemplos referentes a processos estocásticos e cadeias de Makov.
O Capítulo 3 apresenta uma breve contextualização sobre composições algorítmicas
utilizando cadeias de Markov, alguns conceitos referentes à teoria da música, o passo a
passo para implementação do algoritmo no R e algumas aplicações. O Capítulo 4 apresenta
as considerações finais e sugestões para possíveis estudos futuros.
15

2 Cadeias de Markov

Neste capítulo serão apresentadas definições, propriedades e exemplos referentes a


processos estocásticos e cadeias de Markov.

2.1 Definições
2.1.1 Processo estocástico
Um processo estocástico é um conjunto de variáveis aleatórias que traduzem o
comportamento de algum evento ao longo do tempo. Formalmente pode ser definido como:

Definição 2.1.1. Um conjunto de variáveis aleatórias (Xt )t∈T indexadas por um conjunto
T, contidas em um espaço de probabilidade (Ω, F, P) e assumindo valores em um conjunto
E, chamado espaço de estados (ou alfabeto), é um processo estocástico.

Usualmente, o conjunto de índices T é interpretado como tempo, e t indica em


qual instante de tempo a variável X está.
Um processo estocástico pode ser classificado quanto à natureza do conjunto T ,
como:

• Processo estocástico em tempo discreto: Ocorre quando T é um conjunto


enumerável.

Exemplo 2.1.1. Preço de uma ação ao final dos próximos 5 anos, em que T =
{1, 2, 3, 4, 5}.

Neste caso, temos que t pode assumir os 5 valores dentro desse conjunto. A exemplo,
considere nesse contexto X3 = R$ 21,33. Pode-se interpretar que ao final do terceiro
ano (t = 3), a ação estará custando R$ 21,33.

• Processo estocástico em tempo contínuo: Ocorre quando T é um conjunto não


enumerável.

Exemplo 2.1.2. Preço de uma ação no intervalo de tempo T = [0,1] anos.

Observe que diferentemente do exemplo anterior não há a possibilidade de contabilizar


a quantidade de períodos dentro do intervalo, de modo que t pode assumir valores
como 12 , isto é, preço da ação na metade de um ano, 14 do ano, 12 1
do ano e etc.
Existem infinitas possibilidades.
Capítulo 2. Cadeias de Markov 16

Em relação ao espaço de estados E, um processo estocástico pode ser classificado


como:

• Processo estocástico discreto: Se o espaço de estados E assumir valores que


representam um conjunto enumerável.

Exemplo 2.1.3. Variação do preço médio em reais de um produto no mercado


durante os últimos 10 anos, em que E = {R$ 70,00, R$ 80,00, R$ 90,00, R$ 100,00}.

Semelhantemente ao que ocorre no exemplo 2.1.1, o valor assumido pela variável X


no tempo t pode assumir apenas os quatro valores existente no conjunto E.

• Processo estocástico contínuo: Se o espaço de estados E assumir valores que


representam um conjunto não enumerável.

Exemplo 2.1.4. Variação do preço médio de um produto no mercado durante os


últimos 10 anos, em que E = [R$ 70,05, R$ 153,30].

Outra vez por se tratar de intervalo existem infinitos valores dentro do conjunto E.
Portanto processos como esse são classificados como estocástico contínuo.

O presente trabalho consistirá na utilização de um processo estocástico discreto


a tempo discreto, no qual será utilizado o símbolo Z para representar o conjunto T , e o
símbolo n para representar os elementos contidos no conjunto Z.

2.1.2 Processo homogêneo no tempo

Definição 2.1.2. Se um processo estocástico (Xn )n∈Z é homogêneo no tempo, segue que:

P(Xn+k = r|Xn+k−1 = q1 , ..., Xn+k−m = qm ) = P(Xn+1 = r|Xn = q1 , ..., Xn+1−m = qm ),


(2.1)
∀ m > 1 e para todas escolhas de r, q1 , ..., qm ∈ E.
Em outras palavras, se um processo estocástico é homogêneo no tempo, a proba-
bilidade de transição ou salto entre dois estados em quaisquer dois momentos distintos
depende simplesmente da diferença entre os momentos (OECD, 2003), isto é, a mudança
no tempo não altera a probabilidade.

Exemplo 2.1.5. Seja (Xn )n∈Z um processo homogêneo no tempo. Segue que:

P(X2021 = 10|X2020 = 5) = P(X2 = 10|X1 = 5),

ou ainda:
Capítulo 2. Cadeias de Markov 17

P(X57 = 100|X49 = 27) = P(X20 = 100|X12 = 27).

2.1.3 Cadeia de Markov

Definição 2.1.3. Considere (Xn )n∈Z um processo estocástico discreto em tempo discreto
e homogêneo no tempo. Se a propriedade

P(Xn+1 = r|Xn = qn , ...., X0 = q0 ) = P(Xn+1 = r|Xn = q) = p(r|q) (2.2)

é satisfeita para qualquer n ≥ 0 e quaisquer escolhas de r, q0 , ...,qn ∈ E, então esse processo


é chamado cadeia de Markov.

De maneira simples, uma cadeia de Markov, ou mais geralmente, um processo


Markoviano, pode ser utilizado para modelar eventos em que o futuro depende apenas
do presente ou passado mais recente. Essa propriedade é também chamada condição de
Markov.

Definição 2.1.4. Uma matriz de transição associada a um processo de Markov com espaço
de estados finito E é dada por uma matriz quadrada em que seus elementos correspondem
a probabilidade de um evento passar de um determinado estado (presente) para outro
(futuro).

Abaixo é apresentada uma ilustração de uma matriz de transição com espaço de


estados E = {0, ..., n}.

 
p(0|0) p(1|0) ... p(n|0)
 
 p(0|1) p(1|1) ... p(n|1) 
 
P = . .. .. .. .
 .. .

 . . 

p(0|n) p(1|n) ... p(n|n)

Cada entrada p(r|q) representa o valor da probabilidade de um evento passar do


estado q para o estado r. Além disso, é necessário que essas probabilidades obedeçam às
seguintes condições:
a) p(r|q) ≥ 0, ∀ r,q ∈ E;
r∈E p(r|q) = 1.
P
b)

De forma geral qualquer matriz quadrada que satisfaçam essas duas condições é
denominada matriz estocástica.

Exemplo 2.1.6. Suponha que em Natal α seja probabilidade de chover (C) em um dia
dado que no dia anterior também choveu, e β a probabilidade de chover em um dia, dado
Capítulo 2. Cadeias de Markov 18

que no dia anterior não choveu (N). A matriz de transição para esse processo markoviano
é dada por:

C N
1−α 
 
C α
.
N β 1−β

Exemplo 2.1.7. As taxas de glicose no sangue podem ser classificadas como baixa (B),
normal (N) e alta (A). Os valores que definem essas classificações podem variar, mas
para este exemplo considere como baixa, taxas inferiores a 70mg/dL, entre 70mg/dL e
140mg/dL como normal, e superior a 140mg/dL como alta. Suponha que um paciente
acompanhou ao longo de um mês essas taxas, realizando 3 medições diárias (manhã, tarde
e noite). Com base nessa sequência foram obtidas as seguintes probabilidades:

Tabela 2.1 – Probabilidades de transição das taxas de glicose no sangue de um determinado


paciente.
Passado Futuro Probabilidade
Baixa Baixa 0.19
Baixa Normal 0.31
Baixa Alta 0.5
Normal Baixa 0.14
Normal Normal 0.54
Normal Alta 0.32
Alta Baixa 0.09
Alta Normal 0.36
Alta Alta 0.55

Dessa forma observe que para este paciente, no período em análise, a probabilidade de
uma taxa que está normal permanecer normal é de 0.54, enquanto que a probabilidade de
uma taxa baixa passar a ser normal é de 0.31.
A matriz de transição que representa essa cadeia de Markov pode ser representada
da seguinte maneira:

B N A
B  0.19 0.31 0.5 
 

N 0.14 0.54 0.32 .


 

A 0.09 0.36 0.55


 
Capítulo 2. Cadeias de Markov 19

De modo alternativo, a matriz de transição pode ainda ser representada por meio
do diagrama de transição de estados. A direção para qual a flecha aponta representa a
probabilidade de passar de um estado q para um estado r:

0.54

N
0.32
0.14
0.31
0.36

0.19 B 0.09 A 0.55


0.5

Para o exemplo das chuvas em Natal o diagrama pode tomar a seguinte representa-
ção:

1−α

α C N 1−β

Uma outra possível definição para cadeia de Markov é dada a seguir:

Definição 2.1.5. Seja (Xn )n∈Z um processo que admite valores em um conjunto de espaços
E. Se existe uma função

F : E × [0,1] → E, tal que ∀n ≥ 0,

Xn+1 = F (Xn , Un )

em que (Un )n∈Z é uma sequência de variáveis aleatórias uniformes em (0,1), então o
processo é uma cadeia de Markov.
Essa definição é bastante viável para se trabalhar com simulações. Nunes (2014)
apresenta como ela pode ser implementada para auxiliar na simulação de cadeias de
Markov. A seguir também é mostrado um exemplo de aplicação.

Exemplo 2.1.8. Considere um processo estocástico com alfabeto E = {0,1} e com a


seguinte matriz de transição associada ao processo:
Capítulo 2. Cadeias de Markov 20

0 1
0  0.6 0.4 
 

.
1 0.3 0.7

Iniciamos o algoritmo escolhendo aleatoriamente um valor para representar o X0 da


amostra. Suponha que X0 = 0. O passo seguinte é gerar valores Un de uma distribuição
uniforme no intervalo (0,1), e com base nisso, selecionar o valor de Xn+1 , obedecendo o
seguinte critério:

0, se Un < p(0|Xn )


Xn+1 = (2.3)
1, se U > p(0|X )
n n

Desse modo, tendo por objetivo gerar uma amostra de tamanho n = 10, sendo X0 = 0 e
os seguintes valores vindos de uma uniforme (0,1), U0 = 0.43, U1 = 0.10, U2 = 0.47, U3 =
0.76, U4 = 0.30, U5 = 0.72, U6 = 0.32, U7 = 0.63, U8 = 0.56, dada a condição 2.3 acima, se
obtém os resultados contidos na Tabela 2.2.

Tabela 2.2 – Amostra gerada de uma cadeia de Markov.


n Xn Un
0 0 0.43
1 0 0.10
2 0 0.47
3 0 0.76
4 1 0.30
5 0 0.72
6 1 0.32
7 1 0.63
8 1 0.56
..
9 1 .

Portanto a amostra gerada com base nos critérios estabelecidos é dada pela sequência
0,0,0,0,1,0,1,1,1,1.

2.2 Estimação
Nesse trabalho, se tem por interesse fazer inferência em cadeias de Markov. Nas
cadeias de Markov, os parâmetros que devemos estimar são as probabilidades de transição.
É possível utilizar tanto o método de inferência clássica quanto o de inferência bayesiana.
Neste trabalho, será apresentado apenas o método de inferência clássica, usando o método
de estimação de máxima verossimilhança.
Capítulo 2. Cadeias de Markov 21

Considere a seguinte sequência gerada a partir de uma cadeia (Xn )n∈Z :

X0 = x0 , X1 = x1 ,..., Xn−1 = xn−1 , Xn = xn

A função de verossimilhança da amostra X0n = (x0 , ..., xn ) pode ser obtida da


seguinte maneira:

L(P |x1 , x2 , ..., xn ) = P(X0 = x0 , X1 = X1 , ..., Xn−1 = xn−1 , Xn = xn )

Pela condição de Markov (Definição 2.1.3), a probabilidade do evento futuro depende


apenas do passado mais recente, portanto, pode-se reescrever a função acima da seguinte
maneira:

L(P |x1 , x2 , ..., xn ) = P(X0 = x0 )P(X1 = x1 |X0 = x0 ) · ... · P(Xn = xn |Xn−1 = xn−1 )

n
= P(X0 = x0 ) P(Xm = xm |Xm−1 = xm−1 ). (2.4)
Y

m=1

Considere a seguinte função contagem:

n
Nn (q,r) =
X
I{Xm−1 =q,Xm =r} ,
m=1

em que Nn (r,q) contabiliza a quantidade de vezes que o símbolo q aparece seguido do


símbolo r na dada sequência.
Considerando que o processo Markoviano é homogêneo no tempo (definição 2.1.2)
pode-se reescrever o produtório da equação (2.4) da forma:

n
P(Xm = xm |Xm−1 = xm−1 ) = p(r|q)Nn (q,r) .
Y

m=1

Por conseguinte, a função de verossimilhança pode ser reescrita da maneira a seguir:

L(P |x1 , x2 , ..., xn ) = P(X0 = x0 ) p(r|q)Nn (q,r) ,


Y Y

r∈E q∈E

podendo ser vista como o produto de multinomiais.


Tomando o logaritmo da função, chega-se ao seguinte resultado:

log(L(P |x1 , x2 , ..., xn )) = log(P(X0 = x0 )) + Nn (q,r) log(p(r|q)).


XX

r∈E q∈E
Capítulo 2. Cadeias de Markov 22

Para se obter o valor máximo dessa função, obedecendo a condição r∈E p(r|q) = 1,
P

se faz necessário o uso da técnica dos multiplicadores de Lagrange. Portanto, considere a


constante λ ∈ R e a função F (λ, P ) definida por

F (λ, P ) = log(P(X0 = x0 )) + Nn (q,r) log(p(r|q)) + λ[1 −


XX X
p(r|q)].
r∈E q∈E r∈E

Ao calcular as derivadas parciais da função F (λ, P ) com respeito à λ e p(r|q), se


obtêm os seguintes valores:


F (λ,p) = 1 − (2.5)
X
⇒ p(r|q)
∂λ r∈E

∂ Nn (q,r)
⇒ F (λ,p) = −λ (2.6)
∂p(r|q) p(r|q)
Com base na equação (2.6), pode-se obter um estimador para p(r|q) em função de Nn (q,r)
e λ do seguinte modo:

Nn (q,r) Nn (q,r) Nn (q,r)


−λ=0⇒ = λ ⇒ λp(r|q) = Nn (q,r) ⇒ p(r|q)
b =
p(r|q) p(r|q) λ

Resta agora encontrar o valor de λ. Uma vez que p(r|q) = 1 (da equação (2.5)),
P
r∈E
segue que:

Nn (q,r)
p(r|q)
b =
λ

Nn (q,r)
=
X X
p(r|q)
b
r∈E r∈E λ

Nn (q,r)
1=
X

r∈E λ

Nn (q,r)
P
1= r∈E
λ

λ= Nn (q,r).
X

r∈E

E assim o estimador de máxima verossimilhança para as probabilidades de transição


de uma cadeia de Markov é dada pela equação:

Nn (q,r)
p(r|q) =P . (2.7)
r∈E Nn (q,r)
b
Capítulo 2. Cadeias de Markov 23

Exemplo 2.2.1. Dada a sequência A, B, A, B, A, A, B, B, B, B, A, A, a estimativa para


as probabilidades de transição obtidas por meio da equação (2.7) são dadas a seguir.

N12 (A,A) 2 2
p(A|A) = = = = 0.4;
N12 (A,A) + N12 (A,B) 2+3 5
b

N12 (A,B) 3 3
p(B|A) = = = = 0.6;
N12 (A,A) + N12 (A,B) 2+3 5
b

N12 (B,B) 3 3
p(B|B) = = = = 0.5;
N12 (B,B) + N12 (B,A) 3+3 6
b

N12 (A,B) 3 3
p(A|B) = = = = 0.5.
N12 (B,B) + N12 (B,A) 3+3 6
b

A representação em forma de matriz de transição para este exemplo fica da seguinte forma:

A B
A  0.4 0.6 
 

B 0.5 0.5
24

3 Aplicação e resultados

Neste capítulo será apresentada uma aplicação das cadeias de Markov em música. A
linguagem R foi utlizada para execução dos comandos e transcrição de um trecho musical.
Para isto, foram utilizadas duas cadeias de Markov, sendo que em uma delas o alfabeto são
as notas musicais e a outra cadeia tem como espaço de estados o tempo de duração das
notas. O intuito desse trabalho é gerar cadeias de Markov a partir do tempo de duração
das notas, e em seguida gerar uma amostra aleatória de cada uma dessas cadeias usando o
método de máxima verossimilhança, apresentados no Capítulo 2.

3.1 Introdução à composição algorítmica via cadeia de Markov


Segundo os autores Kaliakatsos-Papakostas, Epitropakis e Vrahatis (2011) melodias
podem ser entendidas como uma sequência de eventos discretos de tal modo que se pode
representá-las como um modelo de cadeia de Markov discreto. Dessa maneira, diferentes
elementos musicais podem ser utilizados para compor o espaço de estados, tais como as
notas, tempos de duração, acordes, dentre outros elementos. É importante lembrar que
para tal modelagem assume-se que cada nota depende simplesmente da nota anterior,
como enfatiza a propriedade de Markov (Definição 2.1.3).
Mozer (1994), em seu livro, também comenta sobre a possibilidade de se criar
novas composições com base em uma sequência de notas e sua respectiva matriz com as
probabilidades de transição da próxima nota dada a nota anterior ou ainda a nota anterior
a anterior.
No Capítulo 2 foi apresentado alguns exemplos de como montar uma matriz
de transição e como estimar as probabilidades de transição de uma cadeia utilizando
o estimador de máxima verossimilhança. Um exemplo semelhante utilizando um dos
elementos da música, isto é, as notas musicais, é apresentado a seguir.

Exemplo 3.1.1. Suponha que uma determinada melodia seja composta da seguinte
sequência de notas:

Sol - Lá - Sol - Mi - Sol - Lá - Sol - Mi - Sol - Mi - Sol - Sol

Observação 1: Para este exemplo não foi considerado os demais elementos da música,
como tempo de duração e acordes.
O alfabeto para essa sequência é dado por E = {M i, Sol, Lá}. Desse modo, se
tentarmos compor uma nova melodia a partir dessa sequência, a nova composição será
Capítulo 3. Aplicação e resultados 25

resultante de combinações apenas dessas três notas, independentemente da quantidade


total de notas que existam na nova música. Notas que não fazem parte do alfabeto, como
é o caso das notas dó, ré e fá, por exemplo, não farão parte da nova composição. Caso
o compositor tenha interesse na criação de uma melodia com uma maior variedade de
notas possíveis, é importante que seja selecionada previamente uma canção com um maior
número de notas para dar origem ao novo trecho musical.
Utilizando o estimador de máxima verossimilhança, as probabilidades de transição
estimadas para cada uma das 9 possíveis combinações é dada a seguir:

N12 (M i,M i) 0
p(M i|M i) = = = 0;
N12 (M i,M i) + N12 (M i,Sol) + N12 (M i, Lá) 0+3+0
b

N12 (Sol,M i) 3
p(M i|Sol) = = = 0.5;
N12 (Sol,M i) + N12 (Sol, Lá) + N12 (Sol,Sol) 3+2+1
b

N12 (Lá,M i) 0
p(M i|Lá) = = = 0;
N12 (Lá,M i) + N12 (Lá,Sol) + N12 (Lá, Lá) 0+2+0
b

N12 (M i,Lá) 0
p(Lá|M i) = = = 0;
N12 (M i,Lá) + N12 (M i,Sol) + N12 (M i, M i) 0+3+0
b

N12 (Lá, Lá) 0


p(Lá|Lá) = = = 0;
N12 (Lá,Lá) + N12 (Lá,M i) + N12 (Lá, Sol) 0+0+2
b

N12 (Sol, Lá) 2


p(Lá|Sol) = = = 0.3;
N12 (Sol, Lá) + N12 (Sol,M i) + N12 (Sol, Sol) 2+3+1
b

N12 (M i,Sol) 3
p(Sol|M i) = = = 1;
N12 (M i,Sol) + N12 (M i,M i) + N12 (M i, Lá) 3+0+0
b

N12 (Lá,Sol) 2
p(Sol|Lá) = = = 1;
N12 (Lá,Sol) + N12 (Lá,M i) + N12 (Lá, Lá) 2+0+0
b

N12 (Sol, Sol) 1


p(Sol|Sol) = = = 0.2.
N12 (Sol,Sol) + N12 (Sol,Lá) + N12 (Sol,M i) 1+2+3
b

Estimada as probabilidades, podemos então montar a matriz de transição para


essas notas:
Capítulo 3. Aplicação e resultados 26

M i Sol Lá
Mi  0 1 0 
 

Sol 

0.5 0.2 0.3 

.
0 1 0
 

Em forma de diagrama de transição de estados, temos o seguinte:

1 0.3

Mi Sol 0.2 Lá
0.5 1

Perceba que, partindo da sequência Sol - Lá - Sol - Mi -Sol - Lá - Sol - Mi - Sol - Mi


- Sol - Sol, é mais provável que hajam ocorrências das notas Mi e Lá seguidas da nota Sol,
e estando na nota Sol é mais provável que seja executada logo em seguida a nota Mi do
que as notas Lá e Sol, uma vez que a probabilidade estimada na música original tem um
peso maior. Além disso, observe que a probabilidade estimada de sair das notas Mi para
Mi, Mi para Lá, Lá para Mi e Lá para Lá é zero. Isso não significa que nas novas melodias
a serem geradas não possa existir a ocorrência desses pares de notas, nesta ordem, no
entanto espera-se que a ocorrência dessas duplas de notas, caso ocorram, apareçam em
menor frequência.
Processo semelhante a esse pode ser utilizado considerando outros elementos
musicais, como os citados acima: tempo de duração das notas, acordes e etc. A interpretação
segue similar a utilizada neste exemplo.
Tendo por base esse raciocínio, seguimos com algumas definições relacionados a
teoria musical que facilitarão a compreensão de alguns termos utilizados mais a frente, e
em seguida partiremos para a aplicação do método utilizado neste trabalho.

3.2 Alguns conceitos musicais


O principal objetivo desta seção é apresentar conceitos de alguns termos musicais
da forma mais simples possível, afim de auxiliar o leitor na melhor compreensão de algumas
palavras e expressões utilizadas neste trabalho.
A extração das músicas se deu por meio de partituras, que é a maneira utilizada
para a representação musical de forma escrita, podendo conter, além das notas, o tempo
de duração, pausas, entre outros elementos. As notas são dispostas no pentagrama de
acordo com a clave que é escrita no início da pauta (Figura 3.1).
Capítulo 3. Aplicação e resultados 27

Figura 3.1 – Representação de alguns dos elementos que compõem uma partitura.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.

A clave desenhada no início da partitura é utilizada para nomear as notas no


pentagrama. A fórmula do compasso (no exemplo, 4/4) serve para indicar os tempos de
duração dentro dos compassos.
A Figura 3.2 apresenta as notas musicais naturais na pauta, tendo como referência
a clave de sol.

Figura 3.2 – Representação das 7 notas musicais naturais no pentagrama na clave de sol.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.

O conjunto das sete notas musicais que conhecemos (Dó, Ré, Mi, Fá, Sol, Lá e
Si) são classificadas como naturais. Além das notas naturais existem também as notas
acidentadas ou alteradas. Elas recebem esse nome por conter modificações na altura. Para
representá-las utilizamos os símbolos ], ao qual denominamos de sustenido e aumenta meio
tom na nota, e o símbolo [, ao qual chamamos de bemol e diminui meio tom na nota.
Embora na teoria sejam coisas distintas, na prática a forma de execução das notas
bemóis e sustenidos são semelhantes. A equivalência entre elas pode ser visualizada na
Tabela 3.1.
Outro conceito importante a ser definido é o de oitava. Na música, uma oitava
representa o intervalo entre uma determinada nota e outra com o dobro ou a metade de
sua frequência, permitindo que uma mesma nota possa ser executada em uma região mais
aguda ou mais grave, respectivamente.
A Figura 3.3 apresenta na pauta a representação das notas Dó (C) e Sol (G) e
suas respectivas oitavas na partitura. No exemplo, C4 é mais agudo do que C3, e G3 mais
grave que G4.
Capítulo 3. Aplicação e resultados 28

Tabela 3.1 – Equivalências entre sustenidos e bemóis.


Sustenido (]) Bemól ([)
Dó] Ré[
Ré] Mi[
Fá] Sol[
Sol] Lá[
Lá] Si[
Fonte: Elaboração própria (2021).

Figura 3.3 – Representação de uma nota musical e sua oitava.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.

3.3 Aplicação do método


Esta seção discorrerá o passo a passo de como foram feitas as transcrições das
músicas passando da forma de partitura para a forma de um vetor, a implementação dos
algoritmos para o cálculo das estimativas para as probabilidades de transição e a criação
das novas melodias.

3.3.1 Obtendo as matrizes de transição


Como definido na Seção 3.2, a representação escrita de uma música se dá por meio
de partituras. Pelo fato das notas e o tempo de duração serem peças fundamentais desta
pesquisa, se fez necessário o armazenamento dessas informações como um conjunto de
dados, em que, por exemplo, houvesse uma coluna com as notas e outra com os tempos.
Para isso, uma possibilidade encontrada foi a utilização de arquivos do tipo Musical
Instrument Digital Interface - MIDI, que funcionam como uma espécie de partitura digital,
que contém instruções para reprodução de áudios.
Existem pacotes no R que permitem a leitura desses arquivos, como é o caso da
função readMIDI() do pacote tuneR (LIGGES et al., 2018). No entanto, ao trabalhar com
esse tipo de arquivo foi encontrado alguns problemas que dificultaram o desenvolvimento
do estudo. Assim, para dar continuidade a pesquisa, as partituras foram transcritas para
o R de forma manual, por meio de dois vetores, em que um deles continham as notas e
o outro o tempo de duração em segundos de cada uma delas, de modo que deveria ser
interpretado da seguinte maneira: a posição 1 do vetor de tempos, corresponde ao tempo
de duração da nota que está na posição 1 do vetor de notas, a posição 2 do vetor de tempos,
Capítulo 3. Aplicação e resultados 29

corresponde ao tempo de duração da nota que está na posição 2 do vetor de notas, e assim
sucessivamente. As notas dentro do vetor são representadas com os símbolos utilizados
nas cifras, isto é, os valores A, B, C, D, E, F e G. A Tabela 3.2 apresenta as notas e os
valores correspondentes ao utilizar a notação das cifras.

Tabela 3.2 – Notas naturais e seus respectivos símbolos em representação de cifras.


Nota Cifra
Dó C
Ré D
Mi E
Fá F
Sol G
Lá A
Si B
Fonte: Elaboração própria (2021).

As notas acidentadas, isto é, sustenidos e bemóis, foram representadas pelos símbolos


] e [, respectivamente. No entanto, quando se testou a execução de áudios por parte do
R, que será discutido posteriormente, percebeu-se que o som executado nas notas com
bemóis não era o esperado. Desse modo, a representação das notas com bemóis foram
substituídas pela representação dos sustenidos, conforme mostra a Tabela 3.1.
Para exemplificar o processo de escrita das melodias no R, considere o trecho
musical presente na Figura 3.4.

Figura 3.4 – Representação de um trecho musical na partitura.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.

Sua representação conforme os critérios estabelecidos acima deve ser feita da


seguinte maneira:
Notas <- c("D", "D", "D", "A3", "B3", "C", "D", "C", "B3", "A3", "D", "C",
"B3", "A3", "B3", "G3", "F3", "E3", "D3")
Tempos <- c(1, 1, 1, 0.5, 0.5, 1, 0.5, 0.5, 1, 1, 1, 1, 1, 1, 1, 0.5, 0.5,
1, 1)
Mais adiante será explicado o porquê que foi adicionado o valor “3” em algumas notas.
Após a transcrição da música no R, o passo seguinte é a construção das matrizes
de transição para as notas e para os tempos. Esse passo foi feito a partir do estimador de
máxima verossimilhança apresentado no Capítulo 2.
Capítulo 3. Aplicação e resultados 30

3.3.2 Gerando melodias


O próximo passo foi gerar duas amostras a partir das matrizes de transição obtidas
no passo anterior. Esta atividade foi realizada com auxílio do pacote markovchain (SPE-
DICATO, 2017), por meio da função rmarkovchain() que permite que uma nova sequência
seja gerada a partir de uma matriz dada. Para que seja executada, a função precisa receber
um objeto do formato markovchain ou markovchainList, e o tamanho de interesse para as
amostras, lembrando sempre que as duas amostras (dos tempos e das notas) necessitam
ser de mesmo tamanho para que a melodia possa ser executada. Ao trabalhar com objetos
em formatos diferentes do que é aceito na função, a conversão pode ser feita através de
funções contidas no próprio pacote.
Esses dois vetores gerados formam a nova composição musical. Para poder ouvir o
resultado existem no mínimo duas possibilidades: A primeira delas é transcrevendo em
uma partitura e interpretando-a com um instrumento e a segunda maneira é através do
próprio R. A segunda opção é explicada mais detalhadamente a seguir.

3.3.3 Executando áudios a partir do R


O algoritmo que permite a reprodução de áudios no R foi obtido a partir da junção
de algumas funções disponíveis em um artigo do site canadense Towards Data Science.
Tendo por base esses scripts e o pacote audio (URBANEK, 2020), foi criada uma função,
disponível também em anexo, permitindo a execução de sons através do R.
Para que haja a execução dos áudios de forma correta é necessário inserir na função
o vetor de notas e o vetor de tempos, conforme o exemplo apresentado na Seção 3.1 deste
capítulo. O código está configurado para executar as notas na quarta oitava, de modo
que, se o interesse for a obtenção de notas em oitava abaixo ou acima da considerada
padrão, deve ser indicada ao lado da nota, como ocorreu no exemplo da partitura acima,
com as notas A3 e B3. Por padrão, a função está configurada para reproduzir os sons
considerando 150 batidas por minuto (bpm) e a taxa de amostragem definida como 44,1
Khz. Esses valores podem ser alterados.

3.4 Aplicação e resultados


Para aplicação da metodologia apresentada foi escolhida como exemplo a canção
Castelo Forte, de composição de Martinho Lutero, no ano de 1529. A partitura da estrofe
completa da canção utilizada como entrada para a criação da nova composição pode ser
conferida na Figura 3.5.
Após a transcrição das notas e tempos de duração em forma de vetores, como
apresentado na subseção 3.3.1, a matriz com as estimativas para as probabilidades de
Capítulo 3. Aplicação e resultados 31

transição para as notas é dada a seguir.

A3 B3 C] D3 D E3 F3 G3 G]3
0.07 0.65 0.00 0.07 0.14 0.00 0.00 0.00 0.07 
 
A3
 0.47 0.12 0.18 0.00 0.00 0.00 0.00 0.23 0.00 

B3
 

 0.00 0.60 0.00 0.00 0.40 0.00 0.00 0.00 0.00 


 
C]
 

 0.50 0.00 0.00 0.25 0.25 0.00 0.00 0.00 0.00 


 
D3
 

 0.15 0.00 0.54 0.00 0.31 0.00 0.00 0.00 0.00 


 
D
 

 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 


 
E3
 

F3  0.00 0.00 0.00 0.00 0.25 0.75 0.00 0.00 0.00 


 
 

 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 


 
G3
 

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00


 
G]3

Figura 3.5 – Estrofe completa da canção Castelo Forte.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.


Capítulo 3. Aplicação e resultados 32

Abaixo segue também a matriz para os tempos de duração:

0.5 1 3
0.5  0.50 0.50 0.00 
 

1  0.13 0.79 0.08 


 

3 0.00 1.00 0.00


 

A partir dessas matrizes foram geradas duas novas melodias, das quais uma é
resultado de uma amostra de tamanho 50 (menor do que a quantidade de notas da música
original que serviu como base), e uma outra canção resultante de uma amostra de tamanho
300. Para a montagem da partitura das composições foi considerada a mesma fórmula de
compasso.
O resultado do primeiro experimento está escrito na partitura presente na Figura
3.6, a seguir.

Figura 3.6 – Experimento 1: Melodia composta a partir da canção Castelo forte.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.

A matriz de transição com as probabilidades estimadas para a canção resultante


deste primeiro experimento, tanto para as notas como para os tempos são dadas a seguir:

A3 B3 C] D3 D
0.00 0.60 0.00 0.20 0.20 
 
A3
 0.65 0.06 0.30 0.00 0.00 

B3
 

 0.00 0.83 0.00 0.00 0.17 


 
C]
 

 0.00 0.00 0.00 0.00 1.00 


 
D3
 

0.00 0.00 0.75 0.00 0.25


 
D
Capítulo 3. Aplicação e resultados 33

0.5 1 3
0.5  0.33 0.67 0.00 
 

1  0.10 0.85 0.05 


 

3 0.00 1.00 0.00


 

Neste primeiro experimento observa-se que a melodia apresenta uma menor vari-
edade de notas, isto é, um espaço de estados menor do que a música original. As notas
representadas pelos símbolos E3, F3, G3 e G]3 não participaram da nova música.
Prosseguindo em nossas análises, a Figura 3.7 apresenta o resultado obtido a partir
de uma amostra de tamanho 300. Para este segundo experimento as probabilidades de
transição estimadas para as notas e tempos são apresentadas a seguir.

A3 B3 C] D3 D E3 F3 G3 G]3
0.00 0.71 0.00 0.10 0.18 0.00 0.00 0.00 0.02 
 
A3
 0.40 0.09 0.24 0.00 0.00 0.00 0.00 0.27 0.00 

B3
 

 0.00 0.54 0.00 0.00 0.46 0.00 0.00 0.00 0.00 


 
C]
 

 0.50 0.00 0.00 0.31 0.20 0.00 0.00 0.00 0.00 


 
D3
 

 0.15 0.00 0.52 0.00 0.33 0.00 0.00 0.00 0.00 


 
D
 

 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 


 
E3
 

F3  0.00 0.00 0.00 0.00 0.22 0.78 0.00 0.00 0.00 


 
 

 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 


 
G3
 

1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00


 
G]3

0.5 1 3
0.5  0.45 0.55 0.00 
 

1  0.13 0.81 0.06 


 

3 0.00 1.00 0.00


 

Como resultado do segundo experimento, a nova melodia contém todas as notas


da música original. Além disso, é evidente que as estimativas para as probabilidades de
transição desta segunda amostra estão mais próximas das estimativas para as probabilidades
referentes a música original.
Em ambos os casos as novas peças musicais não apresentaram muitas semelhanças
com a música original, apenas alguns trechos muito específicos que conseguem trazer uma
lembrança de partes da música inicial. Também se nota que, em geral, as notas estão
dentro da tonalidade da peça (Ré maior), o que faz com que a melodia tenha certo sentido
Capítulo 3. Aplicação e resultados 34

lógico, diferentemente do que ocorreria se as notas tivessem sido agrupadas de forma


aleatória sem nenhum tipo de regra preliminar.
A melodia original e os resultados dos dois experimentos podem ser escutados
através do link <https://soundcloud.com/dados-ciencia/sets/composicao-algoritmica-via/
s-dycYPtWTZ8O>. Os áudios foram obtidos através do software MuseScore.
Capítulo 3. Aplicação e resultados 35

Figura 3.7 – Experimento 2: Melodia composta a partir da canção Castelo forte.

Fonte: Elaboração própria (2021) a partir do software MuseScore - Versão 3.6.2.


36

4 Considerações finais

Este trabalho teve como principal objetivo propor um modelo para composição de
novas melodias através de cadeias de Markov. Para tal, se fez necessário a transcrição das
informações contidas nas partituras, isto é, as notas e seus respectivos tempos de duração
em forma de vetores.
Com base nesses dois vetores foram calculadas duas matrizes de transição: uma para
as notas musicais e outra para os tempos de duração. As estimativas para as probabilidades
de transição foram feitas utilizando o estimador de máxima verossimilhança. A obtenção
dos cálculos foi possível através de um algoritmo feito em R.
Uma vez que as matrizes de transição foram obtidas, o passo seguinte foi a geração
de amostras a partir de cada uma das cadeias, e com isso as novas canções eram obtidas.
As novas composições tiveram resultados relativamente bons, uma vez que, em
ambos experimentos, o resultado final foram peças cuja grande maioria das notas estão
dentro da tonalidade da música, permitindo uma combinação de notas que seguissem uma
certa lógica musical, as músicas não apresentaram muita aparência com a melodia original,
implicando em uma composição com sua própria identidade.
O final da peça resultante do primeiro experimento não aparenta que é a conclusão
da música, podendo passar a ideia de que o som foi interrompido. Isso pode ocorrer em
outras composições também, uma vez que não existe uma regra para a finalização das
composições. Isso poderia ser algo a ser investigado em trabalhos futuros, para que a
composição final fique cada vez melhor.
Uma outra sugestão para trabalhos futuros seria que, ao invés de usar apenas uma
única melodia para dar origem a outra nova canção, testar a possibilidade da utilização de
vários trechos musicais, em mesma tonalidade, e de forma conjunta, para verificar se os
resultados soariam ainda melhores. Existe ainda a possibilidade da utilização de cadeias
estocásticas com memória de alcance variável para a modelagem.
37

Referências

BILES, J. et al. GenJam: A genetic algorithm for generating jazz solos. ICMC Proceedings.
[S.l.], v. 94, p. 131–137. 1994. Disponível em: <https://genjamorg.files.wordpress.com/
2019/07/bilesicmc94.pdf>. Acesso em: 15 ago. 2021.

BRASIL. Ministério da Educação. Fundo Nacional de Desenvolvimento da Educação.


Música. 2013. Disponível em: <http://www.fnde.gov.br/index.php/acessibilidade/item/
4098-m%C3%BAsica>. Acesso em: 15 ago. 2021.

CAMARATTA, E. D.; FISCHER, L. G. Composição de música com o uso


de algoritmos. 2015 ou 2016. Disponível em: <https://docplayer.com.br/
21203260-Composicao-de-musica-com-o-uso-de-algoritmos.html>. Acesso em: 23
jul. 2021.

COPE, D. An expert system for computer-assisted composition. Computer Music Journal,


JSTOR, v. 11, n. 4, p. 30–46, 1987. Disponível em: <https://www.jstor.org/stable/
3680238>. Acesso em: 15 ago. 2021.

CORRÊA, D. C. Sistema baseado em redes neurais para composição musical assistida por
computador. 2008. Dissertação (Mestrado) – Universidade Federal de São Carlos. 2008.
163f. Disponível em: https://repositorio.ufscar.br/handle/ufscar/379. Acesso em: 15 ago.
2021.

DANNENBERG, R. B. Music representation issues, techniques, and systems. Computer


Music Journal, JSTOR, v. 17, n. 3, p. 20–30, 1993. Disponível em: <https://www.jstor.
org/stable/3680238>. Acesso em: 23 jul. 2021.

FIDALGA, N. H. D. Aplicações das cadeias de markov à modelação ma-


temática de epidemias. 2017. Dissertação (Mestrado em Tecnologia Bio-
médica) – Instituto Politécnico de Bragança. 2017. 104f. Disponível em:
https://bibliotecadigital.ipb.pt/bitstream/10198/14097/1/ProjetoultimaversAcesso
em: 23 jul. 2021.

HASSANI, Z.; WURYANDARI, A. I. Music generator with Markov Chain: A case study
with Beatme Touchdown. In: 2016 6th International Conference on System Engineering
and Technology (ICSET). IEEE. 2016. P. 179-183. Disponível em: <https://ieeexplore.
ieee.org/abstract/document/7849646>. Acesso em: 15 ago. 2021.

KALIAKATSOS-PAPAKOSTAS, M. A.; EPITROPAKIS, M. G.; VRAHATIS, M. N.


Weighted markov chain model for musical composer identification. In: European conference
on the applications of evolutionary computation. Springer: Berlin, Heidelberg, 2011. P. 334-
343. Disponível em: <https://link.springer.com/chapter/10.1007/978-3-642-20520-0_34>.
Acesso em: 23 jul. 2021.

LIGGES, U. et al. tuneR: Analysis of Music and Speech. [S.l.], 2018. Disponível em:
<https://CRAN.R-project.org/package=tuneR>.
Referências 38

MARQUES, J. M.; SILVA, S. d. C. R. da. A cadeia de markov na determinação de


indicadores educacionais. Revista da FAE, v. 16, n. 2, p. 88–101, 2013. Disponível em:
<https://revistafae.fae.edu/revistafae/article/view/141>. Acesso em: 23 jul. 2021.

MCNULTY, K. How to play Star Wars and other tunes in R. 2018. Disponível em: <https:
//towardsdatascience.com/how-to-play-star-wars-and-other-tunes-in-r-5e837e8b71e4>.
Acesso em: 28 out. 2021.

MOZER, M. C. Neural network music composition by prediction: Exploring the benefits


of psychoacoustic constraints and multi-scale processing. Connection Science, v. 6, n. 2-
3, p. 247–280, 1994. Disponível em: <https://www.tandfonline.com/doi/abs/10.1080/
09540099408915726>. Acesso em: 23 jul. 2021.

NUNES, R. K. Um curso de inferencia e seleção estatística de cadeias de alcance variável.


2014. Monografia (Bacharelado em Matemática Aplicada e Computacional com habilitação
em Estatística Econômica) – Universidade de São Paulo. 2014. 1001f. Disponível em:
https://www.ime.usp.br/ brunomc/CursoG alvesb yR af ael.pdf.Acessoem : 23jul.2021.

OECD, G. Organisation for Economic Co-operation and Development. Glossary of Statis-


tical Terms. [S.l.]: On line at: https://stats.oecd.org/glossary/detail.asp?ID=3674, 2003.
Acesso em: 23 jul. 2021.

R Core Team. R: A Language and Environment for Statistical Computing. Vienna, Austria,
2020. Disponível em: <https://www.R-project.org/>.

RINCÓN, L. Introducción a los procesos estocásticos. UNAM: Facultad de Ciencias, 2012.


Acesso em: 23 jul. 2021.

SCHWEER, W. MuseScore BVBA. c2021. Disponível em: <https://musescore.org/pt-br>.


Acesso em: 23 jul. 2021.

SILVEIRA JÚNIOR, A. A. d. et al. Aplicação das Cadeias de Markov no estudo do


controle biológico da planta aquática Eichhornia azurea. 2014. 64 f. Dissertação (Mestrado
profissional em Matemática) – Universidade Federal de Goiás, Jataí, 2014. Acesso em: 23
jul. 2021.

SOUNDCLOUD. Estocolmo, Suécia, 2021. Disponível em: <https://soundcloud.com/>.


Acesso em: 19 ago. 2021.

SPEDICATO, G. A. Discrete time markov chains with r. The R Journal, 07 2017. R package
version 0.6.9.7. Disponível em: <https://journal.r-project.org/archive/2017/RJ-2017-036/
index.html>.

URBANEK, S. audio: Audio Interface for R. [S.l.], 2020. R package version 0.1-7. Disponível
em: <https://CRAN.R-project.org/package=audio>.

VERBEURGT, K.; DINOLFO, M.; FAYER, M. Extracting patterns in music for composi-
tion via markov chains. In: International conference on industrial, engineering and other
applications of applied intelligent systems. Springer: Berlin, Heidelberg, 2004. P. 1123-1132.
Acesso em: 23 jul. 2021.
Apêndices
40

APÊNDICE A - FUNÇÃO ELABORADA PARA OBTENÇÃO DAS MATRIZES DE


PROBABILIDADE DE TRANSIÇÃO

# Pacotes
library(gtools)
library(dplyr)

# Funo
# Caso "saida = 1" o resultado presentado ser as probabilidades em forma de matriz,
# caso contrario (saida = 2), o resultado apresentado sera em forma de vetor.

Cadena <- function(sequencia, saida = 1){


# PASSO 1: Extrair o alfabeto da sequcia

alf <- levels(as.factor(sequencia))

# PASSO 2: Realizar todas as combinas possveis de 2 elementos


# dado esse alfabeto "alf"
combinacoes <- permutations(n=length(alf),r=2, v=alf,
repeats.allowed=T); head(combinacoes)
combinacoes <- data.frame(combinacoes) # De matriz para data.frame
head(combinacoes)

comb <- combinacoes

# PASSO 3: Procurar na sequncia informada em "sequencia", quantas vezes


# cada padro aparece
padroes <- function(sequencia, combinacoes){
# Para saber a qtd. de combinaes dessse alfabeto
n <- dim(combinacoes)[1]

# Para saber quantos pares dentro da sequncia sero comparados


m <- length(sequencia)

# nele armazenaremos a qtd. de vezes que cada padro aparecer na sequncia


vetor_comb <- rep(0,n)
for(i in 1:n){
for(j in 1:(m-1)){
if(isTRUE(combinacoes[i,1]==sequencia[j] && combinacoes[i,2]==sequencia[j+1])){
vetor_comb[i] <- vetor_comb[i] + 1
}else{
41

vetor_comb[i] <- vetor_comb[i] + 0


}
}
}
return(vetor_comb)
}

ocorrencias <- data.frame(combinacoes, padroes(sequencia,combinacoes))


names(ocorrencias) <- c("X1", "X2", "Ocorrencias")

# PASSO 4: Transformar o valor dessas ocorrncias em probabilidade


func_soma <- function(alfabeto, dados){ #aki s soma
n <- length(alfabeto)
soma <- NULL
for(i in 1:n){
pedacin <- dados[dados[,1]==alfabeto[i],]
somaa <- sum(pedacin[,3])
soma[i] <- somaa
}
return(data.frame(alfabeto, soma))
}

tw <- func_soma(alf, ocorrencias)


names(tw)<- c("X1", "Soma")

SET <- left_join(ocorrencias, tw, by=c("X1"))


SET$Probabilidade <- SET$Ocorrencias/SET$Soma

# PASSO 5: Para melhor visualizao, vamos converter as variveis


# X1 e X2 em um nico string
func_strings <- function(data){
n <- NULL
for(i in 1:dim(data)[1]){
n[i] <- paste(data[i,], collapse = " ")
}
return(n)
}

combina <- func_strings(comb)


Matriz <- data.frame(combina, SET$Probabilidade)
names(Matriz) <- c("Padro", "Probabilidade")
42

# SE TESTAR A SEQUNCIA "seq <- c("D", "A", "D", "A", "A", "C")"
# APARECEU VALORES "NaN" em algumas posicoes.
# Por isso, para corrigir o erro essa funcao "subs" foi criada.

subs <- function(vetor){


n <- length(vetor)
for(i in 1:n){
if(vetor[i]=="NaN"){
vetor[i] <- 0
}else{
vetor[i] <- vetor[i]
}
}
return(vetor)
}

Matriz[,2] <- subs(Matriz[,2])

if(saida == 2){
return(Matriz)
}else{
Mt <- matrix(Matriz$Probabilidade, ncol = length(levels(as.factor(sequencia))))
Mt <- t(Mt)
Mt
dimnames(Mt) <- list(levels(as.factor(sequencia)),
levels(as.factor(sequencia)))
return(Mt)
}

}
43

APÊNDICE B - EXECUTANDO ÁUDIOS A PARTIR DO R

Função criada a partir de um compilado de outras funções disponíveis em <https:


//towardsdatascience.com/how-to-play-star-wars-and-other-tunes-in-r-5e837e8b71e4>.
library(dplyr)
library(audio)

Media_Player <- function(vetor_notas, vetor_tempos, bpm = 150, tx_amostragem = 44100){


pitch <- vetor_notas; duration <- vetor_tempos
# Converter vetor de notas em um nico string:
pitch <- paste(pitch, collapse = " ")
# Caso tenham letras minscula e maiusculas, bora transformar tudo em MAIUSCULA :)
pitch <- toupper(pitch)

# Codificando as notas, seguindo a ordem:


# A = 0, A# = 1, B = 2, C = 3, C# = 4, D = 5 ....
notes <- c(A = 0, B = 2, C = 3, D = 5, E = 7, F = 8, G = 10)

musica <- data_frame(pitch = strsplit(pitch, " ")[[1]],


duration = duration)

musica <-
musica %>%
mutate(octave = substring(pitch, nchar(pitch)) %>%
{suppressWarnings(as.numeric(.))} %>%
ifelse(is.na(.), 4, .),
note = notes[substr(pitch, 1, 1)],
note = note + grepl("#", pitch) -
grepl("b", pitch) + octave * 12 +
12 * (note < 3),
freq = 2 ^ ((note - 60) / 12) * 440)

tempo <- bpm


sample_rate <- tx_amostragem
make_sine <- function(freq, duration) {
wave <- sin(seq(0, duration / tempo * 60, 1 / sample_rate) *
freq * 2 * pi)
fade <- seq(0, 1, 50 / sample_rate)
wave * c(fade, rep(1, length(wave) - 2 * length(fade)), rev(fade))
}
44

musica_wave <-
mapply(make_sine, musica$freq, musica$duration) %>%
do.call("c", .)

return(play(musica_wave))
}
45

APÊNDICE C - APLICAÇÃO PRESENTE NO ESTUDO

## APLICAO ##
library(markovchain)

# 1. Transcricao da melodia
Notas <- c("D5", "D5", "D5", "A", "B", "C#5",
"D5", "C#5", "B", "A", "D5",
"C#5", "B", "A", "B",
"G", "F", "E", "D",
"D5", "D5", "D5", "A", "B", "C#5",
"D5", "C#5", "B", "A", "D5",
"C#5", "B", "A", "B",
"G", "F", "E", "D", "D",
"A", "B", "A", "G#",
"A", "D",
"A", "A", "B", "C#5",
"D5", "C#5",
"D5", "C#5", "B", "B",
"A", "B",
"B", "A", "B", "G",
"F", "D5",
"C#5", "B", "A", "B",
"G", "F", "E", "D")

Tempos <- c(1, 1, 1, 0.5, 0.5, 1,


0.5, 0.5, 1, 1, 1,
1, 1, 1, 1,
0.5, 0.5, 1, 1, 1,
1, 1, 0.5, 0.5, 1,
0.5, 0.5, 1, 1, 1,
1, 1, 1, 1,
0.5, 0.5, 1, 1, 1,
1, 1, 1, 1,
3, 1,
1, 1, 1, 1,
3, 1,
1, 1, 1, 1,
3, 1,
1, 1, 1, 1,
46

3, 1,
1, 1, 1, 1,
0.5, 0.5, 1, 1)

#2. Escutando a melodia


Media_Player(Notas, Tempos, bpm = 120)

# 3. Calculo das estimativas paraas probabilidades de transio


# 3.1 Notas
Cadena(Notas)
addmargins(Cadena(Notas))
# 3.2 Tempos
Cadena(Tempos)
addmargins(Cadena(Tempos))

## Experimentos ##
# Exp. 1 - Criao de uma nova melodia com 50 notas
# Amostra de notas (2810, 22, 2021, 1508)
statesNames <- levels(as.factor(Notas))
mcB <- new("markovchain", states = statesNames,
transitionMatrix = Cadena(Notas))
set.seed(2810)
outs <- rmarkovchain(n = 50, object = mcB, what = "list")

# Amostra de tempos
statesNames1 <- levels(as.factor(Tempos))
mcB1 <- new("markovchain", states = statesNames1,
transitionMatrix = Cadena(Tempos))
set.seed(2810)
outs1 <- rmarkovchain(n = 50, object = mcB1, what = "list")

## Resultado
Media_Player(outs, as.numeric(outs1), bpm = 120)
data.frame(outs, outs1)

Cadena(outs)
Cadena(outs1)

## Exp. 2 - Criao de uma nova melodia com 100 notas


set.seed(1508)
outs <- rmarkovchain(n = 300, object = mcB, what = "list")
set.seed(1508)
47

outs1 <- rmarkovchain(n = 300, object = mcB1, what = "list")


## Resultado
Media_Player(outs, as.numeric(outs1), bpm = 120)
d <- data.frame(Notas = outs,
Tempos = outs1)
#write.table(d, "Exp2.txt")
head(d)
Cadena(d$Notas)
Cadena(d$Tempos)

Você também pode gostar