Marcelo Cicconet

Alguns Experimentos em Extração de Características Musicais

Usamos técnicas de Processamento de Sinal para segmentar e extrair informações musicais (como Pitch, Timbre e Loudness) de um sinal de áudio. Esses descritores, quando obtidos de uma sequência de acordes no violão, são utilizados para classificar os segmentos (logo os acordes), via k-Means, Expectation Maximization (Mistura de Gaussianas), k-Nearest Neighbor ou Linear Discriminant Analysis. Também implementamos um algoritmo para detecção de mudança de acorde baseado em Support Vector Machines.

A referência fundamental é Creating Music by Listening, tese de doutorado defendida por Tristan Jehan no MIT (Media Laboratory) em 2005.

O projeto é dividido em sete etapas, descritas nos links abaixo. Neles encontram-se as implementações correspondentes, feitas no ambiente Matlab usando o modo Cells. Os códigos de cada link são autocontidos, a menos dos arquivos .wav utilizados. Versões .mp3 destes arquivos se encontram neste diretório. A conversão de .mp3 para .wav pode ser feita pelo software Audacity, que é Open Source.

1. Extração de Características Musicais. Implementação de uma versão simplificada do algoritmo proposto pelo Tristan Jehan nos capítulos 3 e 4 de sua tese.

2. Clustering de Segmentos Via k-Means. Agrupamento não supervisionado dos segmentos de áudio obtidos por meio das técnicas descritas na etapa anterior.

3. Clustering de Segmentos Via EM. Procedimento análogo ao da etapa anterior, com o algoritmo EM (a descobrir os parâmetros de um modelo de Mistura de Gaussianas) substituindo o k-Means.

4. Comparação entre k-Means e EM. Verificamos como os dois métodos acima se comportam sobre o mesmo sinal de áudio.

5. Classificação de Acordes Via k-NN. Aqui usamos a mais simples das técnicas de aprendizagem supervisionada para classificar acordes tocados num violão.

6. Classificação de Acordes Via LDA. Esta etapa está para a anterior assim como a etapa 3 está para a etapa 2.

7. Detecção de Mudança de Acorde Via SVM. O início de um segmento é classificado como sendo (ou não) correspondente a um primeiro ataque de um novo acorde com base na informação contida nos seis segmentos que o antecedem.