Rameau: Umprogramapraanáliseharmônica …tachard/docs/apresenta-rameau-pibic.pdf · b4. a8 g4 g4....

38
Rameau: Um programa pra análise harmônica automática de música tonal Alexandre Passos Genos—Grupo de pesquisa de computação muscal UFBA SEMPPG 2008

Transcript of Rameau: Umprogramapraanáliseharmônica …tachard/docs/apresenta-rameau-pibic.pdf · b4. a8 g4 g4....

Rameau: Um programa pra análise harmônicaautomática de música tonal

Alexandre Passos

Genos—Grupo de pesquisa de computação muscalUFBA

SEMPPG 2008

Introdução

problema:fazer um programa pra analisar harmonia

interessante:problema abertonão existe comparação prévia de resultados

objetivos:comparar algoritmos (re-implementar antigos)advançar estado-da-arte (implementar novos)

Visão geral

Como funciona

A entrada: sintaxe do LilyPond

soprano = \relative c’’ {\repeat volta 2 {

\time 3/4\partial 4 g4g2 d’4b4. a8 g4g4. a8 b4a2 b4d2 c4b4 a2g2 } b4

}

��� �� � ��43 �� � ��� � � � � �� � � ��

O formato de gabarito

Para a primeira frase do coral #1

{gg c/e [b] d/f#g bm/d bm7/d emc [b d] [b] f#◦/a gd gd/f# em7/g f#◦/ag/b am7/c d d7 g}

A saída como partitura: Coral de Bach #1(Riemenschneider)

A saída como tabela

Medindo o tempo

chorale #1 (80 segmentos) no meu velho laptop:I 14s para os 9 algoritmosI 0.2s para o mais rápido (rede neural)

32s para analisar todos os 371 corais com a rede neural

Problemas

Enarmonia

����� �igual a ����� �

������ �diferente de ������ �

Notação de pitch-class

C=0, C]=1, D=2, D]=3, . . . , B=11(ou MIDI: 60, 62, 64 . . . )

problem: C] = D[

Uma codificação para música tonal (Dr. Jamary Oliveira)c d e f g a b

7[ 7 21 62 766[ 90 8 22 35 49 63 775[ 91 9 23 36 50 64 784[ 92 10 24 37 51 65 793[ 93 11 25 38 52 66 802[ 94 12 26 39 53 67 81[ 95 13 27 40 54 68 82\ 0 14 28 41 55 69 83] 1 15 29 42 56 70 842] 2 16 30 43 57 71 853] 3 17 31 44 58 72 864] 4 18 32 45 59 73 875] 5 19 33 46 60 74 886] 6 20 34 47 61 75 897] 48

C=0, D=14, F]=42, A[[=67

cl-music

I biblioteca interna pra lidar com codificaçõesI imprime e lê notas em vários formatos de e pra várias

codificaçõesI todo o resto do rameau pode ignorar os detalhes disso

trivialmente

Segmentação (caso fácil)partindo a peça em acordes

Segmentação (não tão fácil)partindo a peça em acordes

Nomear os acordes

� ��Eb

�����Eb

���B°7

� ����� ��D°7

������ �

Análise funcionalAssociar a cada acorde uma função tonal

F F C/E F/Eb Bb/DI I V V /IV IV4

266in F major:

Os algoritmos

Algoritmo de Pardo e Birminghamcasamento de padrões trivial

04 =⇒ Maior703 =⇒ Menor7

E assim por diante. . . (extendemos ele apenas para colocar maisacordes e torná-lo menos enarmonicamente simples)

Algoritmo “naïve bayesian”o acorde que maximiza a probabilidade das notas de cada segmento

Algoritmo de Temperley and Sleatormaximizando algo sobre a música inteira (heuristicamente)

Muito lento.

E complicado. E ruim, então tiramos ele.

Hidden Markov Model (Raphael e Stoddard)como o Bayesiano, mas maximiza a probabilidade de toda a sequência de acordes em ummodelo de Markov

Analise = argmaxX1...Xn

P(X1 . . . Xn|n1 . . . nn)

simplificação de Markov:

P(X1 . . . Xn|n1 . . . nn) = (P(X1)×P(X1|n1))×(P(X2|X1)×P(X2|n2))×. . .×(P(Xn|Xn−1)×P(Xn|nn))

Assim, com os dados de treinamento só precisamos estimar P(Xi ),P(Xi |Xi−1) e P(Xi |ni ) em vez de estimar a probabilidade inteira.

Algoritmo K-Nearest Neighborso acorde mais comum dentre as notas mais parecidas com as sendo analisadas

Árvore de decisãoimplicitamente seguindo regras

Se a primeira nota é 0 (um dó) e a segunda é 28 (um mi) e aterceira é 55 (um sol), o acorde é um dó maior.

Se a primeira nota é 0 (um dó) e a segunda é 27 (um mibemol) e a terceira é 55 (um sol), o acorde é um dó menor.

E assim por diante.

Redes neurais (Tsui)fazem um pattern-matching sobre as notas de cada segmento

Agora, o melhor algoritmo é uma rede neural que ignora o contexto decada acorde.

Resultados

Acertos médios (em 10 corais de Bach)

rede neural sem contexto 95% ± 6Knn sem contexto 94% ± 7Knn com contexto 92% ± 8

rede neural com contexto 91% ± 10árvore de decisão 89% ± 14Naïve Bayesian 88% ± 19

Hidden Markov Model 83% ± 16Pardo & Birmingham’s 82% ± 21

Matriz de confusão para a rede neural

M nc M7+ ◦ M7 m7 m ø7 ! !7 ◦7M xnc 2.8 x 1.8 1.8M7+ 100 x◦ x 4.2M7 xm7 xm xø7 7.1 x! x!7 50 50 x◦7 x

Precisão (%)

árvore de decisão rede com contextoM 93.7 94.2nc 77.1 78.2

M7+ 50.0 100.0◦ 95.7 100.0

M7 92.3 91.5m7 72.2 93.9m 97.2 95.5ø7 91.7 76.9◦7 100.0 66.7

Recuperação (%) (recall)

árvore de decisão rede com contextoM 96.1 97.0nc 77.1 89.0

M7+ 33.3 16.7◦ 91.7 83.3

M7 92.3 82.7m7 78.8 93.9m 96.3 98.2ø7 78.6 71.4◦7 100.0 66.7

F-measure (%)

árvore de decisão rede com contextoM 94.9 95.6nc 77.1 83.4

M7+ 40.8 40.8◦ 93.6 91.3

M7 92.3 87.0m7 75.4 93.9m 96.8 96.8ø7 84.9 74.1◦7 100.0 66.7

Musicologiacomputacional

Range

Soprano Alto Tenor Bass

Bach

Kostka

Range

highest pitch lowest pitchsoprano 116 254 282 298 331 334 186 034 050 068 075 223

049 070 100 165 185 197214 325 348 158 175 205239 352 087 110 244

alto 024 028 033 036 057 058069 078 084 123 217 225248 252 329 331 334 354359

345 186

tenor 024 043 074 083 151 156224 248 263 264 273 276281 329 354 371

229 070 205

bass 285 312 331 034 051 214 223 340 131328 143 155 197 205 219241 187 235 319 337 240070 075 165 175 239

cruzaento de vozes (57% dos corais de Bach)

3

10

7

Detecção de cadências:todas as cadências finais nos corais de Bach (segundo o hmm funcional)

Conclusão

O problema de identificação de acordes é resolvível dentro de umafaixa de tolerância razoável. O de análise funcional parece ser.Ainda existe muito a ser feito: terminar e testar a análise funcional,implementar uma interface gráfica, expandir o corpus, estudarnovos estilos de análise, expandir a parte de musicologiacomputacional, etc.