Reconocimiento de Patrones
Melódicos Vocales Repetidos en
Audios Polifónicos en Flamenco
Proyecto Fin de Carrera
Jesús Moreno Quesada
Universidad de Sevilla. Julio 2015
Dirigido por Dr. D. José Miguel Díaz Báñez
Dpto. Matemática Aplicada II
Ingeniero Industrial
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco
Agradecimientos
Agradecimientos
Este proyecto no se podría haber llevado a cabo sin la ayuda y guía del Dr José
Miguel Díaz-Báñez debido a que me proporcionó la confianza para poder realizar
el proyecto y sin lugar a dudas su incansable ayuda y paciencia para la realización
del proyecto.
No puedo pasar por alto la imprescindible ayuda y colaboración de Nadine Kroher
y el Dr Aggelos Pikkrakis, quienes me han ayudado en gran medida aportando sus
importantes conocimientos y experiencia en la investigación computacional del
flamenco.
Agradecer inmensamente a mis compañeros de universidad con los cuales he
compartido buenos y malos momentos, y siempre nos hemos apoyado
mutuamente. Aunque haciendo resumen, puedo asegurar que han sido muchos
más los buenos que los malos.
Y en especial a mi familia, quienes me han acompañado y apoyado durante estos
años luchando por conseguir ser Ingeniero Industrial. Ellos son los principales
artífices de la ayuda necesaria cuando en ciertas etapas de la carrera las fuerzas se
desvanecían.
Un abrazo muy fuerte a mi padre, mi madre y mis dos hermanos.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Índice
INDICE CAPÍTULO 1. INTRODUCCIÓN Y ANTECEDENTES ................................................................. 7
CONTENIDO: .......................................................................................................................................... 7
1.1 INVESTIGACIÓN Y FLAMENCO.......................................................................................... 7
1.2 ETNOMUSICOLOGÍA COMPUTACIONAL ........................................................................ 7
1.3 ETNOMUSICOLOGÍA COMPUTACIONAL EN EL FLAMENCO ................................. 7
1.4 LÍNEAS DE INVESTIGACIÓN DEL GRUPO COFLA ...................................................... 7
1.1 INVESTIGACIÓN Y FLAMENCO ..................................................................................... 7
1.2 ETNOMUSICOLOGÍA COMPUTACIONAL ................................................................... 8
1.3 ETNOMUSICOLOGÍA COMPUTACIONAL EN EL FLAMENCO ...............................10
1.4 LINEAS DE INVESTIGACION DEL GRUPO COFLA .....................................................11
CAPÍTULO 2. OBJETIVO, METODOLOGÍA Y CORPUS DE ESTUDIO .................................15
2.1 MOTIVACIÓN Y OBJETIVO..................................................................................................15
2.2 METODOLOGÍA: Pasos del método .................................................................................17
2.3 CORPUS DE ESTUDIO ...........................................................................................................18
CAPÍTULO 3. EL ALGORITMO NO SUPERVISADO .................................................................25
3.1 MÉTODO DE DETECCIÓN DE LA VOZ ............................................................................25
3.2 ESTIMACIÓN DE LOS PUNTOS DE INICIO Y LA MEDIA DE LA DURACION DE
LOS PATRONES. .............................................................................................................................28
3.3 MÉTODO DE DETECCIÓN DE PATRONES MELÓDICOS REPETIDOS .................29
3.3.1 CÓMPUTO DE EMPAREJAMIENTOS A TRAVÉS DEL ALINEAMIENTO DE
SECUENCIAS ....................................................................................................................................30
3.3.2 AGRUPAMIENTO DE PATRONES .................................................................................32
CAPÍTULO 4. EVALUACIÓN ............................................................................................................35
CONTENIDO ........................................................................................................................................35
4.1 CREACIÓN DE LA “GROUND TRUTH” ...............................................................................35
4.1.1 ¿POR QUÉ ES NECESARIO CREAR UNA BASE DE DATOS “GROUND
TRUTH”? 35
4.1 CREACIÓN DE LA GROUND TRUTH ................................................................................35
4.2 EVALUACION DE RESULTADOS .......................................................................................39
CAPÍTULO 5. CONCLUSIONES FINALES ....................................................................................45
Referencias ...........................................................................................................................................47
CÓDIGOS MATLAB .............................................................................................................................51
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
7
CAPÍTULO 1. INTRODUCCIÓN Y
ANTECEDENTES
CONTENIDO:
1.1 INVESTIGACIÓN Y FLAMENCO
1.2 ETNOMUSICOLOGÍA COMPUTACIONAL
1.3 ETNOMUSICOLOGÍA COMPUTACIONAL EN EL FLAMENCO
1.4 LÍNEAS DE INVESTIGACIÓN DEL GRUPO COFLA
1.1 INVESTIGACIÓN Y FLAMENCO
La mayor parte del esfuerzo investigativo sobre flamenco ha sido llevado a cabo
desde las humanidades: Antropología Social, Sociología, Literatura, etc. Sin
embargo, resulta sorprendente que trabajos rigurosos sobre la música flamenca no
estén apareciendo hasta la actualidad. En el campo que da marco a este proyecto,
Tecnología Musical, podemos decir que en los últimos años se ha introducido el
uso de herramientas informáticas en el campo de la investigación musical, más
concretamente en el ámbito de investigación en tecnologías del sonido y la música
(Herrera & Gómez, 2011).
Dichas herramientas no pretenden desplazar –ni mucho menos- las metodologías
tradicionales de investigación. Antes, al contrario, pretenden asistir las
metodologías tradicionales, complementarlas y permitir aumentar la capacidad de
análisis tanto en términos cuantitativos como cualitativos.
La mayor parte de la investigación en Tecnología Musical se ha centrado en
analizar la música occidental con notación escrita y sólo recientemente se ha
empezado a prestar atención a las músicas de tradición oral y no occidentales (ver
el ejemplo del proyecto CompMusic1, financiado por la Comisión Europea, que
aplica la tecnología musical al estudio de músicas no occidentales, en concreto
tradiciones musicales de India, Turquía, China y el Magreb).
El flamenco es un caso arquetípico de esta situación. El cante flamenco, cuyas
características musicales son ciertamente particulares, requiere para su
investigación un enfoque multidisciplinar. Un problema tan claro en otras músicas
como la transcripción musical, no está ni mucho menos resuelto. Pero hay otros,
tales como la clasificación y caracterización de estilos, el estudio de la similitud 1 http://compmusic.upf.edu/
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
8
melódica y rítmica entre interpretaciones, y la caracterización de intérpretes, que
merecen el estudio integrado desde diferentes disciplinas.
Desde la óptica de la ciencia, la música y las matemáticas han estado relacionadas
desde al menos 2.500 años, cuando Pitágoras descubrió que los sonidos más
consonantes venían de proporciones simples y pequeñas. Desde entonces, la
interacción entre música y matemáticas no ha hecho sino crecer. Y ha sido en las
últimas décadas cuando se ha producido una revitalización como consecuencia de
la introducción de los métodos computacionales en el análisis de la música.
Un campo muy interesante en la investigación sobre la música flamenca es la
conocida como Etnomusicología Computacional. Puesto que nuestro proyecto está
inmerso con este campo, desarrollamos aquí una sección que describe los objetivos
y antecedentes en esta área.
1.2 ETNOMUSICOLOGÍA COMPUTACIONAL
La Etnomusicología es el estudio de la música de las etnias. Asimismo la definición
de etnia se ha referido en distintos momentos a grupos minoritarios no
occidentales como los indios de Norteamérica o los pigmeos de África, por poner
un ejemplo. En la actualidad, la descripción étnica se refiere a cualquier grupo o
subgrupo humano que puede pertenecer tanto a culturas occidentales como a
culturas o sociedades minoritarias no occidentales. Así músicas como el Maqam
turco, la ópera china o la rumba cubana son susceptibles de ser analizadas desde la
óptima de la Etnomusicología. El etnomusicólogo es el investigador que estudia la
música de diversos grupos o subgrupos culturales y sociales, y por tanto su área de
investigación puede abarcar prácticamente todos los tipos de música en cualquier
parte del mundo. Para una lectura detallada de esta área citamos el texto de B.
Nettl. (Nettl, 1983)
Por su parte, el término Etnomusicología Computacional fue originalmente
introducido para referirse al diseño, desarrollo y uso de herramientas
computacionales que poseen potencial para ayudar a investigaciones en
Etnomusicología. (Tzanetakis, Kapur, Schloss, & Wright, 2007)
La Etnomusicología Computacional puede tener sobre 37 años de antigüedad,
cuando dos matemáticos y un ingeniero (Halmos, Köszegi, & Mandler, 1978),
tuvieron una interesante discusión acerca del rol de los ordenadores sobre cinco
líneas de investigación de la Etnomusicología: recopilación de datos,
administración, notación, selección y sistematización, y tratamiento científico.
Acorde con lo anterior, las herramientas computacionales pueden estar limitadas
para la recopilación de datos y para el tratamiento científico, debido a que estas
herramientas no pueden simular pensamientos y comportamientos históricos
humanos. Sin embargo, ha sido en mayor medida explorado el uso de ordenadores
para administración, notación, y selección y sistematización.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
9
La base principal de las investigaciones en musicología son composiciones,
sistemas de notaciones y transcripciones musicales, según (Tzanetakis G. , 2014).
Son representaciones que capturan en gran medida las características invariables
de la música, y permiten que la música pueda ser descompuesta, ralentizada y
repetida. En el caso de grabaciones, las herramientas computacionales nos han
abierto nuevas posibilidades en el análisis de grabaciones de audio en muchos
casos, manteniendo la misma flexibilidad ofrecida por representaciones
abstractas. Pero, la ayuda que podemos tener con dichas herramientas va mucho
más allá que las grabaciones, pues deben ser usadas como métodos objetivos de
transcripción y análisis.
Las herramientas computacionales para la Etnomusicología pueden sugerir
simplemente “teorías” o “hipótesis” sobre procesos y problemas estudiados por la
Etnomusicología (Gómez, Herrera, & Gómez-Martín, Computational
Ethnomusicology: Perspectives and Challenges, 2013). Si observamos la
Etnomusicología Computacional de este punto de vista, podemos adoptar una
nueva mentalidad que nos ayude a reestructurar problemas y percibir la
relaciones existentes entre sus elementos constitutivos bajo una perspectiva
diferente.
Como aclaración, es interesante dar una pincelada sobra la diferencia entre
Etnomusicología y Musicología, ya que el término “Etnomusicología” puede ser
problemático debido a que se refiere realmente al estudio de todas las músicas,
pues todas están afectadas por la cultura del creador de una forma u otra. Podemos
decir que la musicología se centra en el estudio de la música occidental y europea,
y por lo tanto, para incluir el resto de músicas necesitaremos añadirle el prefijo
“etno-“, dando a entender que el campo de trabajo será la música étnica. Esto,
puede llevarnos a confusión, ¿significa que Beethoven no estaba influido por la
cultura específica? Obviamente sí, por tanto aún debemos añadir que la
etnomusicología usará herramientas de trabajo prestadas del campo de la
antropología para poder establecer una clara diferencia entre los dos términos.
En la siguiente tabla se indican algunas de las diferencias entre los campos de
trabajo Musicología y Etnomusicología.
Disciplina Musicología Etnomusicología
Música estudiada Notación musical
occidental
Contexto musical
antropológico
Enseñanza musical Notación Transmisión oral
Metodología Análisis de notaciones Trabajo de campo,
Etnografía
Tabla 1. Esquema de diferencias entre Musicología y
Etnomusicología
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
10
1.3 ETNOMUSICOLOGÍA COMPUTACIONAL EN EL FLAMENCO
Pese a que el flamenco posee un gran peso específico en el marco cultural (y
comercial) español y un gran impacto mediático internacional, no ha sido hasta
hace relativamente poco tiempo, cuando se ha iniciado el estudio computacional de
la música flamenca.
Es en 2005, a raíz de un estudio sobre un análisis filogenético del compás
flamenco: “Similitud y evolución en la rítmica del flamenco: una incursión de la
matemática computacional” (Díaz-Bañez, Farigu, Gomez, Rappaport, & Toussaint,
2005), cuando la comunidad científica aborda el análisis de la música flamenca
desde la perspectiva de la Teoría Computacional y las Matemáticas. El citado
trabajo se publica en la revista La Gaceta de la Real Sociedad Matemática Española
y su versión en inglés en los Proceedings del congreso BRIDGES: El compás
flamenco: a phylogenetic analysis (Díaz-Bañez, Farigu, Gomez, Rappaport, &
Toussaint, 2005). Este trabajo dio pie a un nuevo campo de investigación
denominado Teoría Computacional de la Música Flamenca. Se analizan en este
trabajo primigenio aspectos rítmicos de los estilos ternarios del flamenco y se
extraen algunos indicios sobre genealogía y preferencia de estilos en lo que
respecta a patrones rítmicos. En dicho trabajo, y a modo de conclusiones, se insta a
musicólogos y otros investigadores del flamenco a contrastar este tipo de análisis
científico con otras metodologías usadas en sus áreas de investigación, a saber,
Historia, Antropología o Teoría Musical, creándose así el germen para la creación
del primer grupo de investigación multidisciplinar de Teoría computacional de la
música flamenca, el grupo COFLA. Debido a que el problema tratado en este
proyecto coincide con una de las líneas de trabajo del grupo, incluimos aquí una
perspectiva histórica del grupo de investigación COFLA2 para entender bien el
marco de trabajo.
En el año 2007 comienza el primer proyecto de investigación universitario
con subvención pública y relacionado con el flamenco, el proyecto COFLA
(COmputational analysis of FLAmenco Music) que surge como respuesta a las
inquietudes de un grupo de investigadores, encabezados por el Dr. José Miguel
Díaz Báñez, responsable del proyecto y tutor de este proyecto fin de carrera. Está
subvencionado por la Junta de Andalucía y su objetivo principal es el de realizar
una investigación exhaustiva y rigurosa de la música flamenca mediante un
enfoque multidisciplinar, combinando los conocimientos de áreas como la
literatura, la musicología, la psicología musical, las matemáticas, la recuperación de
información musical (MIR) o el procesamiento de señales de audio digital, entre
otros. Asimismo, se persigue fortalecer el estudio del flamenco como una cuestión
académica en la universidad y dejar las bases de una nueva área de investigación,
la Teoría Computacional del flamenco. Recientemente, se ha renovado el proyecto
2 http://mtg.upf.edu/research/projects/cofla
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
11
hasta el año 2018.
El objetivo fundamental que se persigue en el proyecto COFLA es el de utilizar
las herramientas tecnológicas existentes en descripción de audio, procesado del
sonido y modelado computacional o diseñar otras nuevas para el estudio analítico de
las estructuras musicales del flamenco, su preservación y su difusión pública. Dichas
técnicas son ya utilizadas en otras músicas y explotadas en el contexto de sistemas
comerciales de navegación en grandes bases de datos musicales, recomendación
musical y transformación de sonido. De este modo, utilizando tecnología ya
consolidada o a desarrollar en el transcurso del proyecto, y contrastando los
resultados desde disciplinas tan dispares como la historia, semiótica, literatura,
musicología y antropología del Flamenco, se pretende seguir avanzando en el
conocimiento riguroso, la difusión y la preservación de la música flamenca. Entre los
aspectos musicológicos fundamentales en los que se pretende indagar desde el punto
de vista computacional pueden destacarse los orígenes del flamenco, evolución y
relación entre los distintos estilos, propiedades de preferencia de estilos, influencia
de músicas externas a Andalucía o búsqueda de estilos ancestrales. Todo ello
mediante un estudio analítico de las estructuras musicales flamencas usando técnicas
ya exploradas en otras músicas, que se basan en el uso herramientas
computacionales.
El proyecto COFLA trabaja en el estudio del flamenco desde una perspectiva
tecnológica. Se han hecho investigaciones de análisis, caracterización y síntesis de
la música flamenca. Existen numerosos trabajos e investigaciones. Encontramos
multitud de trabajos que podemos considerar dentro del área de Etnomusicología
Computacional. En el siguiente apartado exponemos las líneas de trabajo del
grupo.
1.4 LINEAS DE INVESTIGACION DEL GRUPO COFLA
La investigación del grupo COFLA ha estado centrada en las siguientes líneas fundamentales:
Línea 1. Matemáticas y Flamenco.
Línea 2. Transcripción automática, segmentación y separación de voces.
Línea 3. Similitud Musical.
Línea 4. Creación de corpus musical. Audios y transcripciones.
Línea 5. Detección automática de patrones distintivos.
Línea 6. Preferencia Musical. Etnomusicología.
Línea 7. Emoción.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
12
Línea 8. Divulgación científica y Educación.
Este proyecto está enmarcado en las líneas 2, 4 y 5 pues aunque ese centra en un
problema concreto de detección de patrones, requiere la transcripción automática
y creación de un corpus concreto de estudio y evaluación. Describimos brevemente
los avances del grupo en estas líneas.
Línea 2. Transcripción automática, segmentación y separación de voces.
Este problema resulta crucial para afrontar todo estudio computacional de la
música basado en audio y, por lo tanto, la gran mayoría de los estudios que se
planteen en el ámbito del análisis computacional de la música. Es un tema de gran
actualidad y el grupo está aportando metodología y algoritmos de impacto
internacional. Actualmente estamos diseñando un sistema de transcripción
automático especializado en música flamenca que esperamos esté disponible para
la comunidad científica próximamente. Algunos trabajos correspondientes a esta
línea de investigación son (Gómez & Bonada, Towards computer-assisted flamenco
transcription: An experimental comparison of automatic transcription algorithms
as applied to capella singing, 2013) (Salomon, Gómez, Ellis, & Richards, 2014)
Línea 4. Creación de corpus musical. Audios y transcripciones.
El grupo ha creado una base de datos para uso público que contiene la transcripción automática de un corpus amplio de cantes a capela del flamenco. Creemos que esto es crucial en el campo de investigación del proyecto pues es el primero que se realiza y permite que investigadores externos lo usen para sus estudios, llevando e incentivando la investigación de la música flamenca a todo el mundo académico. Esto implicara que al área de investigación que ha iniciado el grupo Cofla se adhieran más investigadores de otros grupos:
Corpus TONAS: “a dataset of flamenco a cappella sung melodies with
corresponding manual annotations”, published on March 15th, 2
0133.
Corpus COFLA, que contempla todas las antologías de cante flamenco y será
presentado en el congreso ISMIR 20154.
3 http://mtg.upf.edu/download/datasets/tonas
4 http://ismir2015.uma.es/
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
13
Línea 5. Detección automática de patrones distintivos.
El estudio de patrones melódicos distintivos es un tema íntimamente
relacionado con la definición de estilo musical, mucho más claro en el caso de
músicas de tradición oral. La conservación de los cantes flamencos de
generación en generación hace que la melodía juegue un papel crucial en la
evolución y clasificación de los distintos estilos del flamenco. La definición del
patrón melódico de cierta variante de un estilo o palo flamenco constituye uno
de los requisitos necesarios tanto en la clasificación de los cantes como en la
creación de textos para la didáctica y estudio del flamenco. De hecho, lo que
recuerda el cantaor es un esqueleto melódico sobre el cual puede añadir unas
ornamentaciones u otras que dependen de la influencia de otros cantaores
(escuelas) o de la propia capacidad vocal del intérprete (aportación personal).
Pongamos un ejemplo. Si aceptamos que el precursor del cante de debla fue
Tomás Pabón, tomamos su interpretación como modelo canónico. Sin embargo,
la debla interpretada por Antonio Mairena o Naranjito de Triana, aún
manteniendo un alto grado de similitud con el canon, aparece más
ornamentada, y con un contorno melódico bastante diferente.
Como ocurre en muchos temas de investigación musical del flamenco la
caracterización de estilos a través de patrones melódicos ha recibido escasa
atención. Podemos destacar dos estrategias o metodologías. Se analiza la
música para “descubrir” los patrones distintivos (método inductivo) o bien, se
parte de un conjunto de patrones considerados canónicos y se buscan en la
colección o corpus correspondiente (método deductivo).
Podemos decir que existen varias categorías de patrones, según sea la
posición en la pieza (exposición, remate, etc.) o el carácter (preceptivo del
cante, ornamental, etc.). En este marco aparecen cuestiones fundamentales que
están íntimamente relacionadas:
1. ¿Cuál es el patrón melódico común a todas las interpretaciones grabadas por maestros consagrados?
2. ¿Qué tipo de ornamentos son característicos en el estilo?
3. ¿Qué ornamentos son preceptivos del estilo y cuáles no?
4. ¿Qué patrones determinan la macro- y la micro-estructura del estilo?
Partimos de la base que toda conclusión en este sentido requiere ser
obtenida a partir de un corpus significativo en cantidad y variabilidad y, por
tanto, el tratamiento computacional, siempre combinado con el análisis manual
para algunas interpretaciones maestras- resultará crucial en este campo.
Por otra parte, cierta preferencia por un tipo u otro de interpretación
requiere un estudio etnográfico y de contexto cultural, lo que conecta con el
concepto de preferencia al que hace mención la línea de investigación 6.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 1 Introducción y antecedentes
14
A partir del planteamiento anterior, aparecen temas relevantes de
investigación referentes a los siguientes epígrafes. Enumeramos aquí algunos
problemas abiertos en este campo:
1. Codificación y clasificación de los ornamentos del flamenco. Ornamentos estéticos o preceptivos del cante.
2. Estudio del melisma flamenco. Carácter y similitudes con otras culturas.
3. Reconstrucción de arquetipos (patrones) ornamentales comunes a otros géneros melismáticos de tradición oral (Musicología comparada).
4. Diseño de algoritmos para la detección automática de patrones o motivos melódicos.
El último problema citado se refiere a búsqueda de patrones melódicos
estructurales: exposición de cante, ligados, caídas, etc. y es el antecedente
principal al problema estudiado en este proyecto. En el análisis de la
estructura melódica de un determinado cante flamenco aparecen varias tipos
de patrones según la localización de los mismos. De hecho, son estos micro
patrones los que definen las distintas variantes de un determinado palo
flamenco. Destacamos los patrones de exposición del cante (muchas veces
resultan suficientes para clasificar la variante cantada), los de ligado o
intermedios y los de caída o remate. El trabajo de (Pikrakis, Tracking melodic
patterns in flamenco singing by analyzing polyphonic music recordings, 2012)
recoge los primeros avances en el desarrollo de algoritmos para la detección
automática de patrones.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
15
CAPÍTULO 2. OBJETIVO, METODOLOGÍA Y
CORPUS DE ESTUDIO
CONTENIDO: 2.1 MOTIVACIÓN Y OBJETIVO
2.2 METODOLOGÍA
2.3 CORPUS DE ESTUDIO
2.3.1 FANDANGOS
2.3.2 ALBOREÁS
2.1 MOTIVACIÓN Y OBJETIVO
En este proyecto se va a presentar un método no supervisado para descubrimiento
de patrones melódicos vocales repetidos directamente de un audio de dos estilos
diferentes de la música flamenca como son las Alboreás y los fandangos. Un
algoritmo de detección se llama “no supervisado” si no se le da como entrada
ninguna información acerca de la estructura que se busca. Véase. Por ejemplo, el
texto (Hand, 2002) para un análisis detallado del estado del arte de los algoritmos
de detección de patrones.
Con objeto de diseñar un método no supervisado, no podemos incluir en la entrada
del algoritmo la longitud ni los puntos de inicio y final de los motivos melódicos
que queremos encontrar. Para simular esta información, realizaremos varias
rutinas que se van actuando secuencialmente. En un primer paso, un algoritmo de
detección de voz nos proporciona una segmentación aproximada de los patrones
repetidos basados en una estimación aproximada de la media de duración del
patrón. Esta estimación de duración es proporcionada computacionalmente por un
algoritmo que toma como entrada el audio y nos extrae una media de duración
aproximada del patrón. Más tarde un detector de patrones que usa un algoritmo de
alineación de secuencias nos cede un ranking de pares de patrones repetidos de los
dichos patrones segmentados anteriormente. Por último un algoritmo de
agrupamiento nos muestra finalmente los patrones repetidos. Este método es
novedoso en el contexto de la música flamenca ya que la realidad es que el
problema de la transcripción y representación simbólica es un problema muy
complejo debido a su tradición oral.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
16
Para empezar es necesario definir el concepto y estructura que queremos buscar:
patrón melódico repetido. Patrón repetido se define como conjunto de notas en
tiempo que se aparecen al menos dos veces (es decir se repite una vez como
mínimo) en una pieza musical. La segunda, tercera o cuarta repetición del patrón
estará desplazada en el tiempo y quizás transpuesta pero relativa a la primera
aparición. Idealmente un algoritmo deberá poder reconocer exactas e inexactas
repeticiones de un patrón en una pieza musical.
El desarrollo de algoritmos para el descubrimiento automático de patrones
melódicos repetidos en la música es un importante campo de trabajo dentro del
MIR (Music Information Retrieval), debido a que la extracción de patrones puede
ser útil para un gran número de aplicaciones como pueden ser Music
Thumbnailing, (encontrar la parte más característica o representativa de una
canción, la cual puede ser usada para búsquedas web, navegaciones web y
recomendaciones musicales), indexado de corpus, análisis estructural o
computación de similitud, por poner algunos ejemplos.
Recientemente un trabajo relacionado llamado “Discovery of Repeated Themes
and Sections” fue llevada a cabo en el contexto del MIREX (Downie, 2008) y
proporcionó un estudio de la evaluación de una serie de algoritmos existentes. La
mayoría de las soluciones a este problema hasta ahora han usado una
representación simbólica de la melodía extraída (Jansen, de Haas, Volk, & van
Kranenburg, 2013). Sin embargo, cuando se aplica este trabajo sobre
transcripciones automáticas de audios polifónicos (Collins, Boeck, Krebs, &
Widmer, 2014), los resultados son bastante insuficientes.
Este proyecto de fin de carrera está enfocado en la extracción automática de
patrones repetidos en cante flamenco. Esta tarea posee múltiples desafíos dadas
las particulares características del género flamenco (Gómez, Díaz-Báñez, Gómez, &
Mora, 2014). Al contrario de otros géneros, el cante flamenco es una tradición oral
y sus transcripciones son escasas y mayoritariamente referidas a la guitarra
flamenca.
Recientemente, un algoritmo para transcribir automáticamente melodías
flamencas ha sido desarrollado (Gómez & Bonada, 2013). Ha sido usado para
similitud melódica (Díaz-Báñez & Rizo, 2014) y reconocimiento de patrones con un
método supervisado (Pikrakis, 2012). Sin embargo, dada la poca eficiencia y la baja
precisión de la transcripción generada por el sistema de (Gómez & Bonada, 2013)
para el cante flamenco, no usaremos tal sistema de transcripción. Se propone aquí
un algoritmo computacional eficiente para reconocimiento de patrones de manera
no supervisada el cual funciona directamente sobre grabaciones de audio. Este tipo
de análisis podemos encontrarlo en el contexto de segmentación estructural
(Peeters, 2007) (Muller & Kurth, 2007) (Dannenberg, 2002) (Levy & Sandler,
2008), donde, al contrario que nuestro objetivo (encontrar motivos melódicos
pequeños), un archivo de audio es segmentado en secciones de largas repeticiones
de una pieza musical. En (Nieto & Farbood, 2012), una técnica de análisis
estructural es usada para extraer patrones más pequeños desde un audio
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
17
polifónico y en (Sankalp, 2014) podemos encontrar el uso de “Dinamic Time
Warping” para la detección de patrones usando el contorno melódico.
El método presentado en este trabajo será aplicado para el análisis de dos estilos flamencos de distinta factura como “Fandangos de Huelva” y “Alboreas”, en los cuales la repetición de patrones es un fenómeno frecuente, principalmente unido a la naturaleza folclórica de dichos estilos y su popularidad en representaciones artísticas. Encontrar patrones melódicos repetidos puede ser utilizado para subrayar características melódicas fundamentales dentro de diferentes estilos y poder implementarse en el estudio de los distintos estilos. Este tipo de procedimientos pueden obtener un importante rol en etnomusicología, ya que sería una buena herramienta objetiva para el estudio de las diferentes evoluciones de cada “palo” a lo largo de los años.
Concluyendo, la contribución de este proyecto a la investigación se basa en el
desarrollo de un algoritmo eficiente para el reconocimiento de patrones repetidos
directamente sobre un audio de manera no supervisada y que se aplique en el
campo de los cantes flamencos.
2.2 METODOLOGÍA: Pasos del método
Para la extracción de patrones repetidos en grabaciones de audio se han seguido
los siguientes pasos. Comenzamos con la elección de un corpus de estudio con el
que podamos trabajar y elegido a conciencia para nuestro fin. Una vez decidido el
corpus de estudio, trabajamos en concretar cuáles son los patrones que
caracterizan los estilos que vamos a estudiar, detallándolos y estableciendo una
terminología para ellos, como se explicara más adelante. Seguidamente se procede
a la creación de un registro manual que nos indique el inicio y final de cada patrón
en segundos de la grabación de audio los patrones melódicos decididos
anteriormente que buscaremos. Este registro lo llamaremos Ground Thruth o
Anotación de Expertos, que nos servirá para poder hacer una evaluación de los
resultados obtenidos. Para la implantación del algoritmo que detecte patrones
repetidos será necesario que se puedan obtener de manera no supervisada los
posibles inicios de cada patrón (que llamaremos Starting Points) y una estimación
de la media de duración de cada patrón. Una vez completados estos pasos se
procede a que el algoritmo actúe sobre todos los audios del corpus, obteniéndose
los resultados y para terminar, se procede a la evaluación mediante las medidas
usuales en MIR que estiman la precisión de los resultados obtenidos comparados
con la Ground Truth5 anotada manualmente.
5 Ground Truth es la selección manual de los patrones de las grabaciones del corpus seleccionadas
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
18
2.3 CORPUS DE ESTUDIO
Como ya se ha explicado con anterioridad, se va a trabajar el reconocimiento de
patrones repetidos en la música flamenca, probando los algoritmos sobre dos palos
del flamenco populares cercanos al folclore como son Los Fandangos y las
Alboreás. Debido a su carácter popular, poseen patrones melódicos que los
caracterizan y los diferencian de distintos estilos de la música flamenca.
La elección de estos dos “palos” tiene un sentido interés etnomusicológico y a la
vez computacional, debido a las diferencias intrínsecas de las melodías
características repetidas. Estas diferencias que explicaremos más adelante también
nos ayudaran significativamente a poder estimar la precisión e idoneidad del uso
de la herramienta que usaremos. A continuación se detallaran las características
de los patrones melódicos que podremos encontrar repetidos en cada estilo
elegido.
2.3.1 FANDANGOS
El Fandango es uno de los estilos fundamentales del flamenco. En Andalucía hay
dos regiones donde el fandango posee marcadas características musicales: Málaga
(Verdiales) y Huelva (Fandangos de Huelva). (Pikrakis, Tracking melodic patterns
in flamenco singing by analyzing polyphonic music recordings, 2012).
Este trabajo se centrará en fandangos de Huelva, los cuales suelen estar
acompañados de guitarra. Las referencias más antiguas de los fandangos de Huelva
se datan de la segunda mitad del siglo XIX. En el presente, los fandangos de Huelva
son los más conocidos popularmente, y poseen múltiples variantes. Tipos de
fandangos de la provincia de Huelva populares pueden ser: fandangos de Huelva,
fandangos de Alosno, fandangos de Santa Eulalia, Fandango de Valverde y un largo
etcétera debido a numerosas poblaciones en la serranía de la provincia de Huelva.
Tomando como ejemplo los fandangos de Alosno, podemos observar que dentro de
este subestilo encontramos variaciones como pueden ser el fandango cané o el
fandango valiente de Alosno.
Desde una perspectiva musicológica, todos los fandangos tienen una estructura
formal y armónica bimodal común, la cual se basa en el modo mayor frigio (modo
flamenco o cadencia andaluza) para marcar el compás en guitarra y en modo
mayor para las melodías de cante. La interpretación puede ser cercana al estilo
folclórico o al estilo flamenco estando este hecho relacionado con el uso de menos
o más ornamentación respectivamente. El estudio de los Fandangos de Huelva
tiene un interés en particular por las siguientes razones: (1) Identificación de los
procesos musicales que contribuyen a la evolución del estilo folclore hasta el
flamenco (2) Definición de los estilo a través de similitud melódica (3)
Identificación de variables musicales que definen cada estilo.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
19
Patrones característicos en los fandangos
Los fandangos de Huelva poseen distintas características dentro de cada estilo,
pero a su ver podemos encontrar similitudes tanto melódicas como armónicas.
También tienen en común una estructura de repetición de patrones.
Generalmente, podemos encontrar 6 frases melódicas dentro de cada fandango,
aunque en algunos estilos esto puede variar. Podemos llamarlas exp-1, exp-2, exp3,
exp4, exp-5 y exp-6. El número identifica en orden en el que aparece cada frase
melódica dentro de cada fandango.
Si tomamos como ejemplo un fandango de Valverde, vemos que exp-1, exp-2, exp-
3, exp-4, exp-6 son patrones con claras diferencias melódicas y a su vez
identificamos auditivamente que exp-1, exp-3 y exp-5 son patrones repetidos
dentro de cada fandango. En la figura 1 podemos los patrones principales dentro
del fandango de Valverde y sus acordes.
Figura 1. Representación en pentagrama de los patrones que
forman el fandango de Valverde
Cabe destacar que en una grabación podemos escuchar varios fandangos, uno
detrás de otro. Esta particularidad facilita al algoritmo usado para poder encontrar
patrones repetidos, debido a que dentro de un mismo audio el algoritmo deberá
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
20
identificar la repetición del patrón exp-6 tantas veces como fandangos del mismo
estilo haya en un mismo audio.
El corpus de fandangos que vamos a trabajar nos ha sido proporcionado por el
Centro Andaluz de flamenco de la Junta de Andalucía, una institución oficial cuya
misión en la preservación de la herencia cultural de la música flamenca. Esta
institución nos envió 1200 grabaciones de fandangos, de los cuales hemos tomado
para nuestro estudio 10 de ellas.
El criterio utilizado para la selección de los fandangos para el corpus se basa en las
siguientes propiedades que son deseables en la composición de un repertorio de
estudio:
(1) Archivos de audio que contengan guitarra y voz.
(2) Calidad de audio aceptable para permitir el procesado automática.
(3) Variedad de los diferentes tipos de estilos de fandangos de Huelva.
Los audios de fandangos de Huelva con los que trabajaremos son etiquetados como
sigue:
FAN01 Fandangos de Calañas. Intérprete: El Cabrero.
FAN02 Fandangos del Cerro, Valverde y Cabezas Rubias. Intérprete: Antonio González
“El Raya”.
FAN03 Fandangos de Valverde. Intérprete: Antonio González “El Raya”.
FAN04 Fandangos de Valverde. Intérprete: P. Marín.
FAN05 Fandangos de Valverde. Intérprete: P. Márquez
FAN06 Fandangos de Encinasola. Intérprete: Eduardo Garrocho.
FAN07 Fandangos de Alosno y Cané. Intérprete: José María de Lepe.
FAN08 Fandangos del Cerro y Santa Eulalia. Intérprete: Diego Clavel.
FAN09 Fandangos de Valverde. Intérprete: El Cabrero.
2.3.2 ALBOREÁS
La Alboreá es un palo flamenco que se ha basado históricamente en los cantes que los gitanos de Andalucía hacían en sus ceremonias de boda. Según algunas teorías, el origen de la palabra procede del término alborada, en relación al momento en que las bodas son celebradas, al alba. También es llamada a veces alborá, albolá o alboleá. Los gitanos consideran que la albolá es un cante exclusivo de su raza y cultura y sólo para sus rituales, y que por tanto no debe ser realizado fuera de este contexto de la ceremonia, pues para ellos es algo sagrado y esta es una norma que no debe ser “profanada”.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
21
Al igual que en otros palos flamencos, el origen de la alboreá está rodeado por bastante incertidumbre, aunque podemos encontrar una primera referencia en el año 1855, en una novela histórica de Vicente Barrantes sobre Juan de Padilla (Barrantes, 1855), “ Sólo oyendo a los gitanos cantar la Alboreá en sus aduares, cuando la luz empieza a llamear en los picos de las montañas, se puede comprender lo que dice la voz de los judíos, tan triste y tan dulce a la par, tan estridente y tan sonora” Parece ser en Granada, donde, a mediados del siglo XIX y en plena expansión flamenca, los gitanos empiezan a “aflamencar” la Alboreá, poniéndola en escena en algunas zambras gitanas, hecho que aprovechan algunos cantaores de la época para estilizarlas, personalizarlas y agregarlas a sus repertorios de cante flamenco, haciéndolas con un compás de soleá por bulerías y jaleos o tangos. Además de las de Granada, podemos encontrar en Andalucía Oriental otras variantes destacables, como son las Alboreás de Jaén, Córdoba y Málaga. Por otro lado, en la zona de Andalucía Occidental, es estilo de la Alboreá es más melismático, o sea, se interpretan varias notas con cada sílaba de la letra. Esto la hace emparentarse con la soleá. En este tipo de Alboreá, podemos encontrar y diferenciar la Alboreá de Cádiz y Los Puertos -que tiene aires de soleá romanceada bailable-, la Alboreá de Jerez, Lebrija y Utrera -con toques de soleá o soleá por bulerías y acento de romance-. No son muchas las Alboreás flamencas que encontramos registradas, sus grabaciones eran, y son, poco frecuentes; por la naturaleza íntima de la que hablábamos al principio. No obstante, son varios los cantaores importantes los que nos han dejado documentos sonoros.
En cuanto a rítmica se puede afirmar que en una gran mayoría podemos encontrar
las Alboreas en compases de bulería por soleá e incluso con un tempo más
acelerado convirtiéndose en bulerías. Armónicamente hablando las Alboreas se
encuentran en modo mayor frigio y en determinados momentos modula a modo
mayor para ciertas frases melódicas que detallaremos más adelante.
Patrones característicos en Alboreás
Para este proyecto se han identificado 4 patrones melódicos que podemos
considerar característicos y únicos de este estilo flamenco, que llamaremos así: P1,
P2, P3 y P4. Estos serían bloques melódicos que pueden aparecer y repetirse
dentro de cada archivo de audio. Cada patrón que hemos elegido está compuesto
por estructuras melódicas que llamaremos frases musicales mínimas, como se
detalla a continuación:
P1 está compuesto por tres patrones mínimos. P1.1, P1.2 y P1.3
P2 está formado por P2.1 y P2.2
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
22
P3 lo forman P3.1 P3.2 P3.3 P3.4
P4 por P4.1 y P4.2 (conocido como “el yeli”)
En las siguientes figuras podemos ver la transcripción realizada el musicólogo
Francisco Suárez, director de la Orquesta Sinfónica Europea Romaní, de los
patrones mencionados anteriormente:
Figura 2. Patrón 1.1
Figura 3. Patrón 1.2
Figura 4.Patrón 1.3
Figura 5. Patrón 2.1
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
23
Figura 6.Patrón 2.2
Figura 7. Patrón 4.1
Figura 8. Patrón 4.2
Para la creación del corpus de estudio de Alboreás, hemos partido de toda la
colección de Alboreás proporcionada por el Centro Andaluz de flamenco de la Junta
de Andalucía. Consta de 41 archivos de audio. Es notable la pequeña cantidad de
archivos de los que se dispone. Debido a la naturaleza exclusiva y sagrada que
posee este estilo flamenco, al ser prohibido su cante fuera de ceremonias
nupciales, el número de grabaciones que se poseen son muy inferiores a las de
fandangos de Huelva u otros estilos. Para la realización de este estudio se han
seleccionado 10 audios, que serán archivos de audio .wav, siguiendo las siguientes
pautas:
(1) Archivos de audio que contengas guitarra y voz.
(2) Calidad de audio aceptable para permitir el procesado automática.
(3) Que posean alguna de los cuatro patrones identificados, debido a que existen
alboreas dentro del corpus de 41 que solo son identificables por la temática de sus
letras.
ALB4 - Boda Gitana Intérprete: Antonio Heredia Año: 2000
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 2 Objetivo, metodología y corpus de estudio
24
ALB7 - Gitana de Azucena Interprete: Fosforito Año: 1991 ALB12 - Despierta la Novia Intérprete: Marcelo Sousa Año: 1996 ALB13- La Fuente Intérprete: Márquez el Zapatero Año: 1995 ALB14- Alborea Intérprete: Pastora Galván Año: 2005 ALB15- Boda Flamenca en Cádiz Intérprete: Pericón de Cádiz Año: 1987 ALB17- Alboreá de la Boda de Blas Intérprete: Piki Año: 1994 ALB19- Alboreá de Jaén Intérprete: Rafael Romero Año: 2004 ALB24- Salga la Madrina Intérprete: Raúl Montesinos Año: 2000 ALB25- Alboreá Intérprete: Trini Año: 2000
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
25
CAPÍTULO 3. EL ALGORITMO NO
SUPERVISADO
CONTENIDO:
3.1 MÉTODO DE DETECCIÓN DE LA VOZ
3.2 ESTIMACIÓN DE LOS PUNTOS DE INICIO Y LA MEDIA DE LA DURACION
DE LOS PATRONES
3.3 MÉTODO DE DETECCIÓN DE PATRONES MELÓDICOS REPETIDOS.
3.3.1 CÓMPUTO DE EMPAREJAMIENTOS A TRAVÉS DEL
ALINEAMIENTO DE SECUENCIAS
3.3.2 AGRUPAMIENTO DE PATRONES
3.1 MÉTODO DE DETECCIÓN DE LA VOZ
Puesto que nuestro objetivo es encontrar patrones repetidos en una línea melódica
para la voz, necesitamos en primer lugar, discriminar los segmentos de voz con
respecto a segmentos de voz y guitarra. Para ello vamos a usar descriptores de
bajo nivel, que en nuestro caso nos resultara eficiente ya que en flamenco
mayoritariamente tendremos audios con poca instrumentación, es decir, sólo
guitarra aparte de la voz. Podemos encontrar métodos anteriores que consiguen
aislar segmentos de voz (Ramona, Richard, & David, 2008) (Rao, Gupta, & Rao,
2011) , pero están enfocados para su aplicación en música occidental como puede
ser el rock o la música pop, donde existe un mayor número de instrumentación
aparte de la melodía vocal. Estos métodos usan algoritmos de aprendizaje
artificial6 para discriminar segmentos de voz y no-voz y, por supuesto, son
alternativa a ser usados cuando la instrumentación musical aumenta. Como hemos
dicho anteriormente, nuestro caso es de instrumentación sencilla, solo aparece
guitarra y voz.
Lo que proponemos para la detección de voz se basa en el hecho de que una vez
que analizamos el dominio espectral en una sección de audio con voz y guitarra,
observamos que se produce un incremento espectral en el rango de 500HZ-6KHz si
6 El Aprendizaje Automático o Aprendizaje de Máquinas es una rama de la Inteligencia Artificial cuyo objetivo es desarrollar técnicas que permitan a las computadoras aprender.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
26
lo comparamos con otra sección donde solo encontramos instrumentación. Esto
nos da una clara idea de los intervalos de frecuencia donde encontramos la voz
melódica.
Por lo tanto, ahora vamos a intentar extraer la ratio de banda espectral, b(t), de la
magnitud espectral normalizada, |X(t,f)|, utilizando una ventana que se mueve a los
largo del eje del tiempo con un tamaño de 4096 muestras y un salto de
movimiento de 128 muestras tal como podemos ver en la siguiente función:
𝑏(𝑡) = 20 ∙ 𝑙𝑜𝑔10∑ |𝑋(𝑓, 𝑡)|𝑓≤6000𝑓≥500
∑ |𝑋(𝑓, 𝑡)|𝑓≤400𝑓≥80
1
La magnitud espectral normalizada |X(t,f)| es la Transformada de Fourier de
tiempo reducido, y está relacionada con la transformada de Fourier usada para
determinar cambios en secciones locales de una señal, así como cambios con
respecto al tiempo. La función a ser transformada es multiplicada por una función
ventana, por tanto la transformada de Fourier es tomada como la ventana que se
desliza a lo largo del tiempo, resultando una representación en dos dimensiones de
la señal como sigue:
𝑺𝑭𝑻𝑵{𝑥[𝑛]} ≡ 𝑋(𝑡, 𝑓) = ∑ 𝑥[𝑛]𝑓[𝑛 − 𝑚]𝑒−𝑗𝑓𝑡∞
𝑛=−∞
2
donde, x[ ] es la señal y f[ ] es la ventana.
La mayoría de los audios con los que vamos a trabajar se encuentran en estéreo, es
decir, con dos canales independientes de audio y sabemos que en uno de ellos
siempre la voz tiene más energía que en el otro. Debemos extraer b(t) para ambos
canales y seleccionar el canal cuyo resultado posea un mayor valor resultante.
El siguiente paso será la extracción del valor eficaz de la señal, rms(t), usando los
mismos valores de movimiento y salto de ventana, para justo después estimar la
envolvente de rms(t), que llamaremos rmsenv(t). Para la estimación de los valores
de la función envolvente, tomaremos cada valor de rms(t), y se le proporcionará el
valor de su máximo local más cercano, con lo cual obtendremos una función por
partes y constantes.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
27
Una vez obtenidos el ratio espectral de banda b(t) del canal de voz dominante y la
función rmsenv(t), podremos obtener las secciones de voz haciendo una
combinación de las funciones anteriores. Tomaremos la función b(t) y la
desplazaremos sobre el eje vertical hasta que todos sus valores sean positivos
(sumándole a la función el mínimo absoluto de la función) y entonces b(t) se
pondera usando la función rmsenv(t) para obtener los valores más importantes.
Esta etapa nos dará una secuencia resultante que llamaremos v(t) normalizada con
media cero. Observando esta función v(t) asumimos que los valores positivos de
ella corresponden con segmentos de voz y los valores negativos lo contrario, ya sea
silencios o instrumentación. Si obtenemos la función de signo de v(t), la cual
llamaremos voicing(t), [voicing(t)=sgn(v(t)], y hacemos un proceso de alisado o
suavizado de voicing(t) para eliminar ruido y datos inútiles mediante un filtro de
media móvil7 con ventana de 30 ms, la función resultante, que llamaremos cv(t)
tomara valores entre 0 y 1 que interpretaremos como una función de confianza
para la segmentación de voz que se usara en la Sección 3.3.
Figura 9. Detección de segmentos de voz. Arriba: RMS y envolvente
de volumen. Medio: Ratio de banda espectral b(t) y ratio de banda
espectral ponderado, desplazado y normalizado v(t). Abajo: valores
binarios de voz voicing(t) y c(t). Ground Truth de la voz esta
sombreada en gris.
7 El filtro de media móvil se usa para suavizar una serie de datos o señal de datos. Este toma M muestras en un tiempo de ventana y saca la media de esas M muestras y produce un simple valor o punto. Esto es útil para científicos e ingenieros que desean eliminar ruidos no deseados en señal o datos.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
28
3.2 ESTIMACIÓN DE LOS PUNTOS DE INICIO Y LA MEDIA DE LA DURACION DE
LOS PATRONES.
Existen trabajos anteriores para estimar la media de duración de patrones basados
en la rítmica de estilos musicales con patrones rítmicos simples. En estos métodos
se proponía que se pueden producir inicios melódicos de voz en instantes donde se
producen pulsos rítmicos, lo cual facilita mucho el trabajo. Debido a la complejidad
rítmica que posee el género musical que estamos estudiando, no es posible
establecer una relación trivial entre la rítmica y la acentuación de la voz para el
inicio de melodías vocales y los métodos conocidos no son aplicables.
El método propuesto de detección de voz nos servirá de utilidad tanto para la
sección 3.3 como para esta sección, ya que los segmentos de voz detectados nos
servirán para estimar una media de duración de patrones de voz para cada audio.
Suponemos que los inicios de voz fuertes coinciden con grandes cambios en la
parte vocal del espectro, y también con un aumento de volumen.
Se procederá a continuación a definir una función de detección de inicio de voz
p(t). Para establecer la función detección de inicio de voz haremos lo siguiente:
para cada frame8, se calcula la diferencia del ratio espectral de banda Δb(t) en un
instante t como:
∆𝑏(𝑡) = (∆𝑏𝑝𝑜𝑠𝑡(𝑡) − ∆𝑏𝑝𝑟𝑒𝑣) ∙ ∆𝑏𝑝𝑜𝑠𝑡(𝑡) 3
𝑏𝑝𝑟𝑒𝑣(𝑡) = ∑ 𝑏(𝑇)
𝑇=𝑡
𝑇=𝑡−435𝑚𝑠
4
𝑏𝑝𝑜𝑠𝑡(𝑡) = ∑ 𝑏(𝑇)
𝑇=𝑡+435𝑚𝑠
𝑇=𝑡
5
Donde bprev(t) es la suma del ratio de banda espectral antes en t-lw mas el ratio de
banda en t, y, similarmente, bpost(t) es la suma del ratio de banda en t más el ratio
de banda en t+lw, donde lw=435 ms.
Siguiendo el mismo procedimiento, calculamos la diferencia de la función
envolvente ΔrmsEnv(t) con lw=435 ms. 8 Los archivos de audio con los que trabajamos tienen 44,100 frames ó muestras por segundo. Cada frame contiene 16-bits de resolución.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
29
𝑅𝑀𝑆𝑝𝑟𝑒𝑣(𝑡) =∑𝑅𝑀𝑆(𝑡)
𝑡
𝑡1
6
𝑅𝑀𝑆𝑝𝑜𝑠𝑡(𝑡) =∑𝑅𝑀𝑆(𝑡)
𝑡2
𝑡
7
ΔRMS=(RMSpost-RMSprev)RMSpost
8
Donde t1=t-435ms y t2=t+435ms.
La función detección de inicio de voz será entonces:
𝑝(𝑡) =∆𝑏(𝑡)
∆𝑏̅̅̅̅∙∆𝑟𝑚𝑠𝐸𝑛𝑣(𝑡)
∆𝑟𝑚𝑠𝐸𝑛𝑣̅̅ ̅̅ ̅̅ ̅̅ ̅̅ ̅∙ 𝑣𝑜𝑖𝑐𝑖𝑛𝑔(𝑡) 9
Por tanto, los inicios de voz coincidirán con los máximos locales de la función p(t).
A raíz de esto, estimaremos un conjunto de posibles duraciones de patrones
analizando las distancias entre estos máximos locales en un histograma con ancho
de barra de 0.1 segundos. Supondremos que los “picos” del histograma
corresponden con pequeñas unidades rítmicas y decidimos que las duraciones
mínimas posibles de los patrones son múltiplos de estas unidades rítmicas y
mayores que 3 segundos, durmin. Esta duración mínima será la unidad con la que
buscaremos patrones repetidos.
3.3 MÉTODO DE DETECCIÓN DE PATRONES MELÓDICOS REPETIDOS
Una vez que se puede extraer la función de confianza c(t) y se puede estimar la
duración media de los patrones, podemos empezar a explicar el método de
detección de patrones repetidos.
Nuestro interés es encontrar patrones melódicos, por tanto, debemos establecer
una correcta segmentación de la secuencia c(t). Esta secuencia, como se indicó en
el apartado 3.1, es una secuencia binaria donde un 0 significa no-voz, y un 1
significa voz. Entonces es necesario hacer una segmentación de esta secuencia,
para tener intervalos de voz e intervalos sin voz. Se propone un método simple:
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
30
cualquier subsecuencia de c(t) que se encuentre entre dos subsecuencias de ceros
se trata como un segmento de audio que contiene voz, siempre que su duración sea
de al menos la mitad del patrón estimado (durmin).
Para el siguiente paso, se extraerá la “secuencia Chroma” de cada audio, esto es, el
vector que representa la escala cromática. La herramienta Chroma9 en Matlab es
una muy interesante y potente representación de audio musical donde todo el
espectro es representado en un mínimo de 12 cubos (bin) que a su vez
representan los semitonos entre 2 octavas.
Una secuencia Chroma se representa como un vector de 12 dimensiones 𝑥 tal
como se muestra:
𝑥 ≡ (𝑥(1), 𝑥(2), … , 𝑥(12))𝑇
donde 𝑥(1) corresponde a la nota Do, 𝑥(2)
corresponde a Do# y asi con las 12 notas tradicionales
Para la extracción de la secuencia Chroma se usará una técnica de procesado en
tiempo reducido con una ventana de 0.1 segundos y un salto de 0.02 segundos
(Bartsch & Wakefield, 2005). Después se normalizará cada dimensión del vector
Chroma a media cero y desviación estándar 1 y se conservarán las subsecuencias
Chroma que corresponden a los segmentos de voz previamente detectados. Debido
a la naturaleza microtonal del flamenco, adoptaremos una representación de 24
dimensiones en vez de 12 dimensiones, es decir, se dividirá cada octava en 24
notas diferentes. Por tanto, la salida de esta etapa de extracción para cada audio,
será un conjunto de M secuencias, xi, i=1,…,M , de vectores Chroma de 24
dimensiones.
3.3.1 CÓMPUTO DE EMPAREJAMIENTOS A TRAVÉS DEL ALINEAMIENTO DE
SECUENCIAS
Una vez extraídas las secuencias Chroma de los segmentos de voz, se examinarán
de dos en dos mediante un algoritmo de alineamiento de secuencias (Berndt &
Clifford, 1994). Las características principales del que usaremos algoritmo serán:
1- El algoritmo opera con una matriz de similitud. 2- Se usará el coseno de dos vectores Chroma a como medida de similitud
local. 3- Se penalizarán los huecos en transiciones horizontales y verticales de la red.
El resultado que buscamos en este proceso de alineamiento debe ser un conjunto
de pares de segmentos de voz. Este conjunto no nos proporciona garantía de que
estos pares de secuencias sean similares debido a que los segmentos de voz
extraídos no son precisos en cuanto a tiempo de duración o instantes de comienzo
9 http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
31
en el audio, es decir, si tomamos una par de secuencias seleccionadas por el
algoritmo como similares, éstas pueden estar desplazadas en el tiempo, que su
duración sea distinta o las dos cosas. Un proceso de depuración se levara a cabo en
el apartado 3.3.2.
A continuación detallamos cómo trabaja el algoritmo para el proceso de
alineamiento. Imaginemos que se toman dos secuencias Chroma de dos segmentos
de voz calculados, los llamaremos X e Y. Es conveniente recordar que estas
secuencias Chroma son vectores de 24 dimensiones. X={x1,…,xi, i=1,…,I} e
Y={y1,…,yj, j=1,…,J} donde J, I son la longitud de la secuencia segmentada de voz a
alinear y dependerá de la longitud de la segmentación de voz de c(t).
Debemos asumir que la secuencia X se encuentra en el eje de abscisas, e Y se aloja
en el eje de ordenadas de la matriz de similitud. Definimos s(j,i) como la similitud
local de dos vectores Chroma xi e yj el coseno del ángulo que forman.
𝑠(𝑖, 𝑗) =∑ 𝑦𝑗(k)∙𝑥𝑗(k)
𝐿
𝑘=1
√∑ 𝑦𝐽2(𝑘)
𝐿
𝑘=1∙√∑ 𝑥𝑖
2(𝑘)𝐿
𝑘=1
L=24 10
Construimos una matriz de similitud JxI y calculamos la similitud acumulada para
cada nodo. El cálculo de la similitud acumulada se realiza con programación
dinámica. A la similitud acumulada se le llamará H(j,i), y se define tal como sigue
en la siguiente ecuación:
𝐻(𝑗, 𝑖) = 𝑚𝑎𝑥
{
𝐻(𝑗 − 1, 𝑖 − 1) + 𝑠(𝑖, 𝑗) − 𝐺𝑝,
𝐻(𝑗, 𝑖 − 𝑘) − (1 + 𝑘𝐺𝑝), 𝑘 = 1,… , 𝐺𝑙 ,
𝐻(𝑗 − 𝑚, 𝑖) − (1 +𝑚𝐺𝑝), 𝑚 = 1,… , 𝐺𝑙 ,
0
11
donde j≥2, i≥2, Gp es la penalización de huecos y Gl es el máximo hueco permitido,
medido en número de vectores Chroma.
En la sección 3.3.2 se proporcionaran valores convenientes de Gp y Gl,, siendo unos
parámetros a variar por el usuario. Conviene resaltar que la transición diagonal
corresponde a s(i,j)-Gp, la cual puede ser positiva o negativa dependiendo del
grado de similitud entre yj y xi. Es más, cada eliminación vertical u horizontal
introduce una penalización de hueco igual a (1+K∙Gp), donde K es la longitud de la
supresión, medido en número de cuadros (frames).
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
32
El proceso será el siguiente, para cada nodo de la red, almacenamos su predecesor
máximo W(j,i). Si H(j,i) es cero por algún nodo, a W(j,i) es asignado el nodo ficticio
(0,0). La inicialización del método es como sigue:
𝑊(𝑗, 1) = (0,0), 𝑗 = 1,… , 𝐽 𝑊(1, 𝑖) = (0,0), 𝑖 = 1, … , 𝐼
𝐻(𝑗, 1) = 𝑚𝑎𝑥{𝑆(𝑗, 1) − 𝐺𝑝, 0} 𝑗 = 1, … , 𝐽
𝐻(1, 𝑖) = 𝑚𝑎𝑥{𝑆(1, 𝑖) − 𝐺𝑝, 0} 𝑖 = 1,… , 𝐼
12
Una vez que toda la matriz es calculada, se localiza el nodo que ha acumulado la
mayor puntuación en similitud, y al final se hace una camino de retroceso hasta
que se llegue a un nodo (0,0). El mejor camino resultante desde el nodo con
mayor similitud hasta el (0,0) nos mostrará las dos subsecuencias que poseen el
alineamiento más significativo. El nodo de mayor similitud es entonces
normalizado por el número de nodos existentes en la el camino óptimo. De esta
manera, el nodo de mayor similitud encontrado evita sesgos.
Si la longitud del par de subsecuencias que corresponden a la del mejor camino no
excede en duración la mitad de la duración del patrón esperado, durmin, no lo
damos por válido y seleccionamos el nodo con la segunda mayor similitud
acumulada y volvemos a hacer el procedimiento de retroceso hasta el nodo (0,0).
Este procedimiento iterativo se repite hasta que encontramos el primer par de
subsecuencias que poseen como mínimo la mitad de durmin. Si al final no es
encontrado ningún par, las secuencias Chroma originales X e Y son descartadas.
Una vez que el alineamiento de todos los segmentos de voz haya sido procesado, se
toman K pares, donde K es un parámetro que se define como entrada del
algoritmo. Por ejemplo, si K es 5, el algoritmo dará como salida los mejores 5 pares
de caminos la red. Estos caminos se mostraran con su punto inicial y final (en
frames) de las subsecuencias que fueron alineadas. Por tanto, obtendremos un
conjunto P con K pares de patrones en la forma
𝑃 = {{((𝑡11, 𝑡12), (𝑡13, 𝑡14)}, … , {(𝑡𝐾1, 𝑡𝐾2), (𝑡𝐾3, 𝑡𝐾4}}
donde {(ti1, ti2), (ti3, ti4)} representa el patrón (secuencia Chroma) que comienza
en ti1 y termina en ti2 y que ha sido alineado con el patrón que comienza en ti3 y
termina en ti4. (t se muestra en ventanas o frames).
3.3.2 AGRUPAMIENTO DE PATRONES
Una vez que hemos conseguido emparejar patrones melódicos repetidos, el
siguiente reto es conseguir que un algoritmo agrupe estos patrones emparejados
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
33
en grupos similares. Por ejemplo, si el algoritmo de emparejamiento extrae cinco
pares de patrones repetidos, necesitamos otro algoritmo que agrupe los patrones
que sean similares entre ellos.
El algoritmo propuesto no es especialmente óptimo en resultados, pero posee la
ventaja de tener muy baja complejidad computacional y con un rendimiento
bastante aceptable.
La idea propuesta se basa en la identificación de vectores Chroma que pueden
formar parte de uno o más pares de patrones y se usa la propiedad de transitividad
para agruparlos. Por tanto, si en dos pares de patrones encontrados podemos
reconocer que comparten vectores Chroma idénticos, se clasifican como pares del
mismo grupo. Si aparece otro par con algún elemento del grupo anterior, los
patrones del par serán asociados al grupo primero y por tanto, usarán la misma
etiqueta. Si un vector no se consigue identificar dentro de ningún par alineado, su
respectiva etiqueta será un conjunto vacío.
Si realizamos un barrido de izquierda a derecha por los segmentos de voz,
generaremos una secuencia C de etiquetas, es decir, C={c1,c2,…,cN }, donde N es la
longitud de la grabación de audio que se está procesando (medido en frames). En
este proceso se requiere completar segmentos maximales. Se define que una
subsecuencia de C que comienza en i y termina en j, forma un segmento máximo si:
𝑐𝑘 ∩ 𝑐𝑘+1 ≠ ∅, ∀𝑖 ≤ 𝑘 ≤ 𝑗 − 1 ( 1 ) 𝑐𝑖−1 ∩ 𝑐𝑖 = ∅ ó 𝑐𝑖−1 = ∅ ( 2 ) 𝑐𝑗 ∩ 𝑐𝑗+1 = ∅ ó 𝑐𝑗+1 = ∅ ( 3 )
Todos los segmentos máximos pueden ser fácilmente detectados escaneando la
secuencia C de izquierda a derecha. La condición (1) es usada para detectar los
puntos de comienzo posibles de cada patrón c, la condición (2) trata de expandir
segmentos y (3) sirve para parar la expansión de dichos segmentos y marcar el
final. Cada vez que un segmento máximo es completado, su etiqueta será
establecida como la unión de las etiquetas de todos sus frames. Después de que
todos los segmentos máximos han sido formados, asignamos a los mismos grupos
todos los segmentos que posean la misma etiqueta. De esta manera, los pares
encontrados están agrupados y etiquetados.
La figura 10 representa la salida de nuestro algoritmo para una grabación de audio,
incluyendo la Ground Truth anotada manualmente por expertos así como los
puntos de comienzo de patrones estimados. Los círculos señalan errores. Los
patrones repetidos 3 y 4 marcan error por no haber sido descubiertos y el patrón 2
estuvo erróneamente agrupado con el patrón 1. Esto puede deberse al hecho que el
patrón 2 es muy similar al patrón 1, incluso cuando es percibido en una audición.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 3 El Algoritmo no Supervisado
34
Figura 10. Arriba: Salida de algoritmo de reconocimiento de
patrones. Abajo: Patrones de la Ground Truth. Más abajo: puntos de
inicio estimados.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
35
CAPÍTULO 4. EVALUACIÓN
CONTENIDO
4.1 CREACIÓN DE LA “GROUND TRUTH”
4.1.1 ¿POR QUÉ ES NECESARIO CREAR UNA BASE DE DATOS
“GROUND TRUTH”?
4.1.2 PROCESO DE CREACION DE LA GROUND TRUTH
4.2 EVALUACIÓN DE RESULTADOS
4.2.1 ALGORITMO DE EVALUACIÓN
4.2.2 EVALUACIÓN
4.1 CREACIÓN DE LA GROUND TRUTH
4.1.1 ¿POR QUÉ ES NECESARIO CREAR UNA BASE DE DATOS “GROUND TRUTH”?
Para poder determinar el grado de precisión de los resultados obtenidos de cara al
objetivo principal del proyecto, esto es, descubrir patrones repetidos en
grabaciones de audio de manera no supervisada, es necesario hacer una evaluación
comparativa con una notación manual realizada por un musicólogo o experto en la
materia.
En al campo de MIR se suele denominar Ground Truth a una anotación manual
realizada por expertos en la música de estudio que etiqueta los aspectos que se
pretenden encontrar automáticamente. La salida del algoritmo no supervisado de
reconocimiento de patrones repetidos vendrá dada por los patrones encontrados y
agrupados en conjuntos que son considerados como patrones similares. El objetivo
principal de la creación de una Ground Truth es poder evaluar la precisión de los
resultados obtenidos del algoritmo comparándolos los con los que en realidad
debería haber encontrado. El carácter no supervisado del algoritmo, esto es, se
diseña sin dar ninguna información acerca de lo que se busca, salvo que son
segmentos melódicos repetidos, nos aventura a obtener resultados que pueden ser
muy distintos a los deseados.
El algoritmo propuesto en el capítulo anterior nos dará tres tipos de información:
a- Patrones repetidos visualizados en grupos. Estos grupos acogen patrones que el algoritmo considera como idénticos dentro de una tolerancia dada.
b- El número de veces que cada patrón se repite, lógicamente el mínimo será dos.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
36
c- Tiempo de inicio y fin de cada patrón.
Nuestra Ground Thruth será una base de datos que necesariamente tenga de alguna
manera las informaciones anteriores, para cuando se realice la evaluación
podamos ver con la mayor exactitud la precisión de los resultados obtenidos, es
decir, una vez realizada la evaluación, poder observar si el algoritmo no
supervisado ha encontrado:
a- Los distintos grupos de patrones que se repiten en el audio establecido en la Ground Truth.
b- El número de veces que se repite cada patrón en cada grupo. c- Exactitud de inicio y fin de los patrones encontrados comparados con los
establecidos en la Ground Truth. Se decidirá una cota de error suficiente o tolerancia para dar el visto bueno al resultado.
4.1.2 PROCESO DE CREACION DE LA GROUND TRUTH
Es conveniente definir qué tipo de patrón melódico estamos buscando. En este
caso, buscamos frases melódicas que se repiten en el cante y que provienen del uso
de éstos en el folklore, donde la repetición hace más fácil la interpretación a coro.
Primero hay que definir cuáles son los patrones melódicos que esperamos
encontrar y su duración en segundos. Como ya se ha explicado anteriormente, en
este proyecto se trabajará con Fandangos de Huelva y Alboreás.
Los patrones que caracterizan a los fandangos son básicamente frases melódicas
que se repiten. Por ejemplo, como dijimos en el capítulo 2, para el fandango de
Valverde aparecen repetidos los patrones exp-1, exp-3 y exp-5 y los esperados en
las Alboreás serán P1.1, P1.2 y P1.3; P2.1 y P2.2; P3.1, P3.2, P3.3, P3.4; P4.1 y P4.2.
El proceso de realización de la Ground Thruth se ha llevado a cabo mediante un
programa de visualización de audio “Sonic Visualiser”10, que puede ser usado para
múltiples aplicaciones. La razón de haber elegido este programa es que posee una
interfaz simple (figura (11)) y a la vez de enorme utilidad para ir marcando con
secciones sobre la interfaz mientras el audio se reproduce.
10 http://www.sonicvisualiser.org/
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
37
Figura 11. Captura de pantalla de la interfaz del programa Sonic
visualizer
La opción “Layer-> Add New Regions Layer” permite asignar una capa de líneas de
tiempo donde podremos, a la vez que se está escuchando la grabación, hacer una
selección de cada patrón melódico que nos interese. Esta opción también nos
permite colocar etiquetas sobre cada patrón marcado. Se usará esta opción para
identificar que a qué grupo de patrones pertenece la sección marcada. En la
siguiente figura podemos ver un ejemplo con líneas de tiempo sobre la grabación
de audio y su etiqueta. Las capas al mismo nivel de altura pertenecen a patrones
del mismo grupo como podemos ver en la figura 12.
Figura 12. Ejemplo realizado sobre el fandango FAN01, Fandango
de Calañas.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
38
Para estimar el comienzo y final de cada patrón se ha tomado un criterio unificado
para todas las grabaciones del corpus seleccionado. El comienzo de cada patrón
melódico ha de estar justo un instante antes del comienzo real del patrón
melódico, aproximadamente 0.2-0.5 segundos y aplicamos el mismo criterio para
el final de la melodía a señalar. Este cálculo se realiza gracias a que el algoritmo de
extracción de patrones melódicos repetidos es capaz de hacer su función con una
ventana de 1 segundo de error, y así garantizamos que la Ground Thruth no pierde
ninguna nota de un patrón a la hora de evaluar resultados, es decir, creamos una
base de datos de los patrones bastante fiel a la realidad.
La funcionalidad de Sonic Visualizer nos va permitir, una vez terminado el trabajo
de etiquetado de patrones característicos, guardar estos datos en formato de
extensión “.csv”, el cual puede abrirse en una hoja Excel y encontramos en cada
celda: (1) instante donde comienza el patrón en segundos; (2) etiqueta del patrón
identificado; (3) tiempo que dura el patrón en segundos, tal como muestra la figura
13.
Figura 13. Captura del archivo .csv abierto como una hoja Excel
En conclusión, una vez obtenido el archivo .csv con los tiempos, podemos
comprobar que obtenemos los tres tipos de información mencionados
anteriormente, (a) grupos de patrones repetidos (b) número de ocasiones que
aparece cada patrón de cada grupo (c) instantes de inicio y fin del patrón.
Este archivo .csv también lo usaremos para poder realizar la base de datos en
formato necesario, que se use como una de las entradas del algoritmo de
evaluación.
Como último proceso de creación de la Ground Thruth, es necesario pasar los
archivos .csv a archivos .mat en Matlab. Estos archivos .mat son matrices que nos
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
39
permitirán introducir los datos de inicio y final de cada patrón identificado. Por
cada fila introduciremos patrones repetidos del mismo tipo, los cuales serán dos
números que representan el inicio y final de cada patrón. Cada pareja representa
un patrón, por consiguiente, se repetirá ese patrón tantas veces como parejas
aparezcan. Podemos ver un ejemplo en la siguiente figura 14.
Figura 14. Archivo .mat visualizado en Matlab
4.2 EVALUACION DE RESULTADOS
4.2.1 ALGORITMO DE EVALUACIÓN
Para la evaluación de los resultados obtenidos, seguimos una estrategia adoptada
en MIREX, “The Music Information Retrieval Evaluation eXchange” MIREXes un
evento anual, donde se presentan trabajos de investigación referentes a técnicas y
algoritmos para la evaluación para trabajos y proyectos realizados en la
conferencia internacional sobre recuperación de información (ISMIR11). Mirex es
un proyecto realizado por IMIRSEL12 (“International Music Information Retrieval
Systems Evaluation Laboratory”), de la Universidad de Illinois.
Aunque esta estrategia está enfocada para anotaciones MIDI, se definen dos
categorías de diferentes medidas que pueden ser realmente aplicadas a nuestro
caso. La primera categoría incluye medidas precisión de “establecimiento” que se
refieren al hecho de encontrar el patrón, PrEst (precision), REst (recall) y Fest (F-
measure). La segunda categoría incluye medidas de “ocurrencia”, PrOcc, ROcc, y Fest,
que miden la habilidad del algoritmo para recuperar todas las ocurrencias de los
patrones repetidos. Para ver todos los detalles de estas medidas podemos
consultar los trabajos (Downie, 2005-2007) (Collins, Boeck, Krebs, & Widmer,
2014).
11 http://www.ismir.net/ 12 http://www.music-ir.org/
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
40
Definición de Precision, Recall y F-measure
Llamaremos np al número de patrones que aparecen en la Ground Truth 𝝅 ={𝑷𝟏,𝑷𝟐,… , 𝑷𝒏𝒑} y nq al número de patrones que aparecen en la salida del
algoritmo 𝜩 = {𝑸𝟏,𝑸𝟐,… ,𝑸𝒏𝒒}. Si el algoritmo consigue identificar un número k
de patrones repetidos de la Ground Truth, entonces definiremos:
Precisión P=k/nq 13
Recall: R=k/np 14
F-measure: F-measure= 2∙P∙R/(P+R)
15
Las medidas explicadas son usadas en (Collins, Boeck, Krebs, & Widmer, 2014),
una de las primeras evaluaciones de descubrimiento de patrones y son bastante
estrictas. Es decir, un patrón PA a la salida del algoritmo podría tener solo un punto
diferente en comparación con su Ground Truth PT, pero no se contará como un
descubrimiento satisfactorio. Por tanto, se proponen las siguientes medidas, las
cuales, son más robustas a la hora de leves diferencias entre patrones encontrados
y Ground Truth.
Definición de la matriz Score.
Suponemos que en la Ground Truth hay un patrón P con ocurrencias 𝑷 ={𝑷𝟏,𝑷𝟐,… , 𝑷𝒎𝒑}, y también suponemos que en la salida de un algoritmo hay un
patrón Q con ocurrencias 𝑸 = {𝑸𝟏,𝑸𝟐,… ,𝑸𝒎𝒒}. La idea de la evaluación del
algoritmo es la medida en la cual Q constituye el descubrimiento de P por parte del
algoritmo. Para llevarlo a cabo, necesitamos ser capaces de obtener la similitud
musical entre Pi y Qj, (este proceso se ha llevado a cabo en el apartado 3.3).
La matriz score nos mostrará una medida de cómo las ocurrencias de Q
corresponden al patrón P.
𝑠(𝑃, 𝑄) = (
𝑠(𝑃1, 𝑄1) ⋯ 𝑠(𝑃1, 𝑄𝑚𝑄⋮ ⋱ ⋮
𝑠(𝑃𝑚𝑃, 𝑄1 ⋯ 𝑠(𝑃𝑚𝑃, 𝑄𝑚𝑄)) 16
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
41
Precisión establecida, recall establecido y F -measure establecido
La matriz score deberá necesariamente evaluar todos los patrones reconocidos
por el algoritmo contra todos los patrones de la Ground Truth. Podríamos estar
más interesados en saber si un algoritmo es capaz de establecer que un patrón P se
encuentra repetido al menos una vez en una pieza musical y menos interesados en
saber si el algoritmos es capaz de reconocer todas las ocurrencias Q (exactas e
inexactas). En este caso, para la Ground Thruth 𝝅 = {𝑷𝟏,𝑷𝟐,… , 𝑷𝒏𝒑} y los
patrones encontrados por el algoritmo 𝜩 = {𝑸𝟏,𝑸𝟐,… ,𝑸𝒏𝒒} podemos decir que
es posible medir la capacidad del algoritmo de establecer qué patrones de Π están
repetidos al menos una vez en la pieza, usando la que llamamos matriz score
establecida:
𝑆(Π, 𝜩) = (
𝑆(𝑃1, 𝑄1) ⋯ 𝑆(𝑃1, 𝑄𝑛𝑄)
⋮ ⋱ ⋮𝑆(𝑃𝑛𝑃, 𝑄1) ⋯ 𝑆(𝑃𝑛𝑃 , 𝑄𝑛𝑄)
) 17
La precisión establecida puede calcularse como:
𝑃𝑒𝑠𝑡 =1
nq∑max {𝑆(𝑃𝑖, 𝑄𝑖) |𝑖 = 1,… , 𝑛𝑝}.
𝑛𝑞
𝑗=1
18
Si un algoritmo descubre k patrones de exactamente de la Ground Truth, y pierde
nQ-k patrones, entonces la precisión establecida es igual a la precisión estándar
k/nQ.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
42
La llamada (recall) establecida es:
𝑅𝑒𝑠𝑡 =1
np∑max {𝑆(𝑃𝑖, 𝑄𝑖) |𝑗 = 1, … , 𝑛𝑞}.
𝑛𝑝
𝑖=1
19
F-measure establecida es:
F-measureest= 2∙Pest∙Rest/(Pest+Rest)
20
Precisión de ocurrencia, recall ocurrencia y F -measure
Tal como ya se mencionó anteriormente, existe una diferencia entre la capacidad
del algoritmo para establecer la existencia de patrones repetidos y la capacidad de
retornar todas las repeticiones de patrones que se definen en la Ground Thruth.
Ahora nos enfocamos en la capacidad del algoritmo de proveer todas las
ocurrencias de un patrón dado, exactas e inexactas. Esta medida de ocurrencias
favorecerá al algoritmo que sea fuerte a la hora de encontrar todas las ocurrencias
de los patrones que descubre a la salida y desfavorecerá a aquel algoritmo que
encuentre pocas repeticiones.
Los índices de la matriz de establecimiento con valores mayores o iguales a algún
umbral, (por defecto 0.75), indican cuáles de los patrones de la Ground Thruth
deben ser considerados como descubiertos por el algoritmo. Nos centraremos en
estos índices para definir lo que llamaremos como matriz de ocurrencias.
Llamaremos a esta matriz O(Π,Ξ) y comenzara como una matriz de ceros
dimensión np x nq. Para cada par de índices (i,j), calculamos la precisión de la
matriz score s(Pi,Qj), y utilizamos este escalar como elemento (i,j) de O(Π,Ξ). La
precisión de s(Pi,Qj) indica la precisión con que la salida Qj recupera patrones de
la ground thruth Pi. La precisión de ocurrencia, que llamaremos Pocc , se define
como la precisión de la matriz de ocurrencia O(Π,Ξ) y la suma de las columnas que
no son cero. Llamaremos Rocc a la llamada o recall de ocurrencia, que se define
analógicamente ala precisión pero en vez de columnas usaremos filas. F-measure
se calcula usando los términos Pocc y Rocc.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
43
4.2.2 EVALUACIÓN
Como hemos dicho, evaluaremos el funcionamiento del método propuesto usando
la metodología de MIREX y lo compararemos con los resultados del algoritmo de
reconocimiento de patrones repetidos propuesto en el trabajo reciente (Nieto &
Farbood, 2014).
Hay que reseñar que el método de Nieto y Farbood no está pensado para voz
cantada y asume tempo constante, lo cual no ocurre en el cante flamenco, objeto de
nuestro estudio. De todas maneras, para el caso de fandangos, el tempo no varía
tano como para las Alboreás.
Como vimos en el capítulo anterior, nuestro método usa tres parámetros en el
proceso de detección de patrones, a saber, penalización de huecos (Gp), longitud
de hueco (Gl) y un número K de emparejamientos.
En la Tabla 2 se muestran los resultados de la medida F-measure en el corpus de
fandangos para diferentes valores de los parámetros tomando K=15, esto es, los
mejores 15 pares. Hemos detectado que para los valores Gp =0.1 y Gl = 0.6 se
obtienen buenos resultados, Fest =0,60 y Focc= 0,33 .
En la tabla 2 podemos observar los resultados para distintos valores de K y
notamos que para k=15 nuestro método es competitivo con respecto al de Nieto y
Farbood. De hecho, su algoritmo ofrece mejor precisión pero muy mala medida de
recall, lo que hace que la medida F-measure sea peor que la nuestra.
Tabla 2. Valores extraídos para tres valores distintos de K. Gp=0.1 y
Gl=0.6. NF-14 representa los resultados con el algoritmo de Nieto y
Farbood.
En el corpus de Alboreás los resultados son sensiblemente inferiores. Los mejores
resultados para Alboreás han sido F-measureest= 0.52 y F-measureocc=0.16 para
valor de K=10.
Observamos que la medida de precisión F-measureocc es aproximadamente la
mitad en alboreas con respecto a fandangos.
K=10 K=15 K=20 NF-14
Prest 0.43 0.48 0.50 0.63 Rest 0.71 0.80 0.78 0.37
Fest 0.54 0.60 0.61 0.47 Procc 0.23 0.23 0.22 0.30
Rocc 0.32 0.56 0.07 0.07 Focc 0.27 0.33 0.31 0.11
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 4 Evaluación
44
Este resultado mucho más pobre que en fandangos era esperable para nuestro
algoritmo debido a las siguientes consideraciones en el corpus de alboreás:
1. No existen tantas repeticiones de sus patrones característicos.
2. El tempo y la ornamentación es muy variable en las distintas
interpretaciones, cosa que no ocurre en los fandangos. Esto hace que la
estimación de la longitud de los patrones que realiza el algoritmo no ofrezca
buenos resultados.
3. Los ataques en notas iniciales no son tan claros y la estimación de los
puntos de inicio de los patrones tampoco son muy precisos.
4. Finalmente, si bien en los fandangos elegidos los cantaores siguen con
cierta fidelidad los cánones establecidos por los maestros del cante, en el
cante por alboreás se observa un alto grado de improvisación, lo que
dificulta todo el cálculo de similitud melódica.
Como consecuencia, se requieren otros algoritmos que se adapten a esta
naturaleza musical mucho más compleja. Queda esta tarea como un nuevo reto de
investigación en el campo de la etnomusicología computacional aplicada al cante
flamenco.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 5 Conclusiones finales
45
CAPÍTULO 5. CONCLUSIONES FINALES
La búsqueda de patrones o cédulas melódicas repetidas es un problema
interesante tanto para el área de investigación de Tecnología Musical como para la
Etnomusicología. En efecto, si dos interpretaciones tienen patrones repetidos será
muy probable que pertenezcan al mismo grupo y esto podrá ser usado para tareas
como la clasificación automática o los sistemas de recomendación musical. Por otra
parte, un patrón melódico que se repita varias veces en un o varias
interpretaciones de un mismo estilo puede interpretarse musicalmente como una
“seña de identidad” del estilo y ayudar a los musicólogos a definir con precisión los
distintos géneros , estilos y variantes del flamenco con una herramienta objetiva y
no sesgada por gustos o pensamientos románticos personales. En definitiva, se
propone, desde la Tecnología, una herramienta adicional a los etnomusicólogos.
En este proyecto fin de carrera se ha propuesto un método de detección de
patrones repetidos en el contexto de la música flamenca, concretamente, el cante
flamenco.
Debido a la ausencia de transcripciones del cante flamenco, se ha trabajado
directamente desde los audios y se ha evitado pasar por un proceso de
transcripción automática que, a día de hoy, es un problema no resuelto para el
flamenco.
En nuestro estudio hemos tomado dos estilos de cante donde aparecen claramente
repeticiones de frases melódicas como son los fandangos de la sierra Huelva y en
menor medida las Alboreás.
El método propuesto tiene varias etapas que incluyen detección de voz cantada,
estimación de comienzo y duración de frases melódicas, algoritmo de alineación y
visualización de clusters o grupos de patrones muy similares que constituyen las
repeticiones.
La evaluación de resultados indicó que nuestro método es competitivo para esta
tarea no supervisada de reconocimiento de patrones. Es más, los resultados son
similares a los que se han obtenido para otras músicas cuando se trabaja con datos
simbólicos obtenidos de partituras, lo cual ayuda en la precisión de resultados.
Creemos que nuestro método puede ser fácilmente adaptado a otras tradiciones
musicales distintas del flamenco así como al estudio de otros estilos dentro del
flamenco, donde la detección automática de estos patrones pueden refrendar
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Cap. 5 Conclusiones finales
46
teorías sobre la evolución de los cantes o definir qué patrón define o es
característico de un determinado grupo de variantes.
En resumen, podemos decir que nuestro método posee las siguientes propiedades
de interés:
1. Es eficiente. 2. No requiere transcripción. Actúa directamente desde el audio. 3. Es no supervisado, esto es, no se le da ninguna información de los patrones
que ha de buscar, salvo que son secuencias repetidas. 4. Obtiene resultados de precisión similares a los mejores métodos que hay en
el área y que requieren una transcripción o representación simbólica y, por tanto, ni siquiera pueden ser aplicados cuando solo consideramos descriptores de bajo nivel como la frecuencia fundamental del “pitch”.
5. Se ha implementado pensando en cante flamenco pero puede ser usado para otras músicas de tradición oral donde no se dispone de partituras.
6. Puede adaptarse fácilmente a estudiar otros estilos del flamenco distintos a los considerados aquí.
Pensamos que la metodología seguida en este trabajo es coherente y puede dar
mucho mejor resultado se mejoran los algoritmos parciales que se han usado en
las distintas etapas del proceso. Esperemos que se lleve a cabo la continuación y
mejora de nuestra propuesta y que esto signifique un progreso parcial pero real en
el análisis y conocimiento de la música más reconocida de nuestro país, tanto
desde el punto de vista comercial como cultural.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Referencias
47
Referencias
Barrantes, V. (1855). Juan de Padilla. En V. Barrantes.
Bartsch, M., & Wakefield, G. (2005). “Audio thumbnailing of popular music using
chroma-based representations. Multimedia, IEEE Transactions , 96-104.
Berndt, D., & Clifford, J. (April de 1994). Using Dynamic Time Warping to Find
Patterns in Time Series. Information Systems Department, págs. 361-363.
Collins, T., Boeck, S., Krebs, F., & Widmer, G. (2014). Bridging the audio Symbolic
gap: The discovery of repeated pa note content directly from polyphonic
music audio. 53rd AES Conference. . Semantic Audio.
Collins, T., Boeck, S., Krebs, F., & Widmer, G. (2014). Bridging the audio-symbolic
gap: The discovery of repeated note content dircty from polyphonic music
audio. 53rd AES Conference: Semantic audio, (págs. 119-126).
Dannenberg, R. B. (2002). Discovering musical structure in audio recordings. Music
and Artificial Intelligence, 43-57.
Díaz-Báñez, J., & Rizo, J. (2014). Un algoritmo eficiente. Seville.
Díaz-Bañez, J., Farigu, G., Gomez, F., Rappaport, D., & Toussaint, G. T. (2005).
Similitud y evolución en la rítmica del flamenco: una incursión de la
matemática computacional. La Gaceta de la RSME, págs. 489-509.
Downie, J. (2005-2007). The music information retrieval evaluation. A window into
music information retrieval. Acoustical Science and Tecnology, 247-255.
Downie, J. (2008). The music information retrieval evaluation exchange (2005-
2007). Acoustic science and tecnology, 247-255.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Referencias
48
Gómez, E., & Bonada, J. (2013). Towards computer-assisted flamenco transcription:
An experimental comparison of automatic transcription algorithms as
applied to capella singing. Computer Music Journal, 73-90.
Gómez, E., Herrera, P., & Gómez-Martín, F. (2013). Computational
Ethnomusicology: Perspectives and Challenges. Journal of Music Research, 1.
Gómez, F., Díaz-Báñez, J., Gómez, E., & Mora, J. (2014). Flamenco music and its
computational study. Mathematical Connections in Art, Music andScience,
119-126.
Halmos, I., Köszegi, G., & Mandler, G. (1978). Computational Ethnomusicology in
Hungary. MI Publishing. Michigan: Ann Arbor.
Hand, D. (2002). Pattern detection and discovery . Springer Berlin Heideberg, 1-12.
Herrera, P., & Gómez, E. (2011). Tecnologías para el análisis del contenido musical
de archivos sonoros y para la generación de nuevos metadatos. . Boletín de
la Asociación Española de Documentación Musical, 28-38.
Jansen, B., de Haas, W., Volk, A., & van Kranenburg, P. (2013). Discovering repeated
patterns in music: state of knowledge, challenges perspectives.
Levy, M., & Sandler, M. (2008). Structural segmentation of musical audio by
constrained clustering. Audio, S`peech, and Language Processing, 318-326.
Muller, M., & Kurth, F. (2007). Towards structural analysis of audio recordings in
the presence of musical variations. EURASIP Journal on Applied Signal
Processing, 163-163.
Nettl, B. (1983). The study of ethnomusicology: twenty-nine issues and concepts.
University of Illinois Press, pág. 39.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Referencias
49
Nieto, O., & Farbood, M. (2012). Identifying polyphonic patterns from audio
recordings using music segmentation techniques. ISMIR. taiwan.
Nieto, O., & Farbood, M. (2014). Identifyinf polyphonic patternes from audio
recordings using segmentation techniques. ISMIR. Taipei.
Peeters, G. (2007). Sequence representation of music structure using higher-order
similarity matrix and maximun likelihod approach. ISMIR, (págs. 35-40).
Pikrakis, A. (2012). Tracking melodic patterns in flamenco singing by analyzing
polyphonic music recordings. ISMIR, (págs. 421-426).
Salomon, J., Gómez, E., Ellis, D. P., & Richards, G. (2014). ). Melody Extraction from
Polyphonic Music Signals: Approaches, Applications and Challenges. . IEEE
Signal Processing Magazine.
Sankalp, G. (2014). Mining melodic patterns in large audio collections of indian art
music. International conference on signal image tecnology & Internet based
systems. Marrakesh.
Tzanetakis, G. (2014). Computational Ethnomusicology: A music Information
Retrieval Pperspective. Proceedings ICMC|SMC| , (pág. 1). Athens.
Tzanetakis, G., Kapur, A., Schloss, A., & Wright, M. (2007). Computational
Ethnomusicology. Journal of interdisciplinary music estudies.
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Referencias
50
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
51
CÓDIGOS MATLAB
% Archivo getDFT.m
function [FFT, Freq] = getDFT(signal, Fs, PLOT)
% % function [FFT, Freq] = getDFT(signal, Fs, PLOT) %
% Esta función devuelve la DFT de una señal discreta y su respectiva
%frecuencia. % % ARGUMENTOS: % - Signal: vector containing the samples of the signal % - Fs: the sampling frequency % - PLOT: usa este argumento si la FFT (y sus respectivos
% valores de frecuencia) need to be returned in the % [-fs/2..fs/2] range. De otra manera sólo la mitad
% del espectro es devuelto % % RETURNS: % - FFT: the magnitude of the DFT coefficients % - Freq: the corresponding frequencies (in Hz) %
N = length(signal); % longitud de la señal % computa la magnitud del espectro % (y normalize por el numero de muestras): FFT = abs(fft(signal)) / N;
if nargin==2 % devuelve la primera mitad del espectro: FFT = FFT(1:ceil(N/2)); Freq = (Fs/2) * (1:ceil(N/2)) / ceil(N/2);
else if (nargin==3) % ... o devuelve el espectro completo % (in the range -fs/2 to fs/2) FFT = fftshift(FFT); if mod(N,2)==0 % define la frecuencia Freq = -N/2:N/2-1; % if N is even else Freq = -(N-1)/2:(N-1)/2; % if N is odd end Freq = (Fs/2) * Freq ./ ceil(N/2); end end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
52
Archivo chromagram_e.m
function Y = chromagram_E(d,sr,fftlen,nbin,f_ctr,f_sd) % Y = chromagram_E(d,sr,fftlen,nbin) % Calculate a "chromagram" of the sound in d (at sampling rate sr) % Use windows of fftlen points, hopped by ffthop points % Divide the octave into nbin steps % Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd (in
octaves) % 2006-09-26 [email protected]
if nargin < 3; fftlen = 2048; end if nargin < 4; nbin = 12; end if nargin < 5; f_ctr = 1000; end if nargin < 6; f_sd = 1; end
fftwin = fftlen/2; ffthop = fftlen/4; % always for this
D = abs(specgram(d,fftlen,sr,fftwin,(fftwin-ffthop)));
A0 = 27.5; % Hz A440 = 440; % Hz
f_ctr_log = log(f_ctr/A0) / log(2);
CM = fft2chromamx(fftlen, nbin, sr, A440, f_ctr_log, f_sd); % Chop extra dims CM = CM(:,1:(fftlen/2)+1);
Y = CM*D;
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
53
Archivo chromagram_IF
function Y = chromagram_IF(d,sr,fftlen,nbin,f_ctr,f_sd) % Y = chromagram_IF(d,sr,fftlen,nbin,f_ctr,f_sd) % Calculate a "chromagram" of the sound in d (at sampling rate sr) % Use windows of fftlen points, hopped by ffthop points % Divide the octave into nbin steps % Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd % (in octaves) % Use instantaneous frequency to keep only real harmonics. % 2006-09-26 [email protected]
% Copyright (c) 2006 Columbia University. % % This file is part of LabROSA-coversongID % % LabROSA-coversongID is free software; you can redistribute it
and/or modify % it under the terms of the GNU General Public License version 2 as % published by the Free Software Foundation. % % LabROSA-coversongID is distributed in the hope that it will be
useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with LabROSA-coversongID; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA % 02110-1301 USA % % See the file "COPYING" for the text of the license.
if nargin < 3; fftlen = 2048; end if nargin < 4; nbin = 12; end if nargin < 5; f_ctr = 1000; end if nargin < 6; f_sd = 1; end
A0 = 27.5; % Hz A440 = 440; % Hz f_ctr_log = log(f_ctr/A0) / log(2);
fminl = octs2hz(hz2octs(f_ctr)-2*f_sd); fminu = octs2hz(hz2octs(f_ctr)-f_sd); fmaxl = octs2hz(hz2octs(f_ctr)+f_sd); fmaxu = octs2hz(hz2octs(f_ctr)+2*f_sd);
ffthop = fftlen/4; nchr = 12;
% Calculate spectrogram and IF gram pitch tracks... [p,m]=ifptrack(d,fftlen,sr,fminl,fminu,fmaxl,fmaxu);
[nbins,ncols] = size(p);
%disp(['ncols = ',num2str(ncols)]);
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
54
% chroma-quantized IF sinusoids Pocts = hz2octs(p+(p==0)); Pocts(p(:)==0) = 0; % Figure best tuning alignment nzp = find(p(:)>0); %hist(nchr*Pmapo(nzp)-round(nchr*Pmapo(nzp)),100) [hn,hx] = hist(nchr*Pocts(nzp)-round(nchr*Pocts(nzp)),100); centsoff = hx(find(hn == max(hn))); % Adjust tunings to align better with chroma Pocts(nzp) = Pocts(nzp) - centsoff(1)/nchr;
% Quantize to chroma bins PoctsQ = Pocts; PoctsQ(nzp) = round(nchr*Pocts(nzp))/nchr;
% map IF pitches to chroma bins Pmapc = round(nchr*(PoctsQ - floor(PoctsQ))); Pmapc(p(:) == 0) = -1; Pmapc(Pmapc(:) == nchr) = 0;
Y = zeros(nchr,ncols); for t = 1:ncols; Y(:,t)=(repmat([0:(nchr-
1)]',1,size(Pmapc,1))==repmat(Pmapc(:,t)',nchr,1))*m(:,t); end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
55
Archivo chromagram_p.m
function Y = chromagram_P(d,sr,fftlen,nbin,f_ctr,f_sd) % Y = chromagram_E(d,sr,fftlen,nbin) % Calculate a "chromagram" of the sound in d (at sampling rate sr) % Use windows of fftlen points, hopped by ffthop points % Divide the octave into nbin steps % Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd (in
octaves) % 2006-09-26 [email protected]
if nargin < 3; fftlen = 2048; end if nargin < 4; nbin = 12; end if nargin < 5; f_ctr = 1000; end if nargin < 6; f_sd = 1; end
fftwin = fftlen/2; ffthop = fftlen/4; % always for this
D = abs(specgram(d,fftlen,sr,fftwin,(fftwin-ffthop)));
[nr,nc] = size(D);
A0 = 27.5; % Hz A440 = 440; % Hz
f_ctr_log = log(f_ctr/A0) / log(2);
CM = fft2chromamx(fftlen, nbin, sr, A440, f_ctr_log, f_sd); % Chop extra dims CM = CM(:,1:(fftlen/2)+1);
% Keep only local maxes in freq Dm = (D > D([1,[1:nr-1]],:)) & (D >= D([[2:nr],nr],:)); Y = CM*(D.*Dm);
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
56
Archivo chromsynth.m
function [x,CF,CM] = chromsynth(F,bp,sr) % [x,CF,CM] = chromsynth(F,bp,sr) % Resynthesize a chroma feature vector to audio % F is 12 rows x some number of columns, one per beat % bp is the period of one beat in sec (or a vector of beat times) % sr is the sampling rate of the output waveform % x is returned as a 12 semitone-spaced sines modulated by F % CF,CM return actual sinusoid matrices passed to synthtrax % Actual Shepard tones now implemented! 2007-04-19 % 2006-07-14 [email protected]
if nargin < 2; bp = 0.5; end % 120 bpm if nargin < 3; sr = 22050; end
[nchr,nbts] = size(F);
% resynth if length(bp) == 1 bups = 8; % upsampling factor framerate = bups/bp; ncols = nbts*bups; CMbu = zeros(nchr, ncols); for i = 1:bups CMbu = CMbu + upsample(F', bups, i-1)'; end else % vector of beat times - quantize framerate = 50; % frames per sec nbeats = length(bp); lastbeat = bp(nbeats) + (bp(nbeats) - bp(nbeats-1)); ncols = round(lastbeat * framerate); CMbu = zeros(nchr, ncols); xF = [zeros(12,1),F]; for i = 1:ncols CMbu(:,i) = xF(:,max(find(i/framerate >= [0,bp]))); end end
%CFbu = repmat(440*2.^([0:(nchr-1)]'/nchr),1,ncols); %x = synthtrax(CFbu,CMbu,sr,round(sr/framerate)); octs = 7; basefrq = 27.5; % A1; +6 octaves = 3520 CFbu = repmat(basefrq*2.^([0:(nchr-1)]'/nchr),1,ncols); CF = []; CM = []; % what bin is the center freq? f_ctr = 440; f_sd = 0.5; f_bins = basefrq*2.^([0:(nchr*octs - 1)]/nchr); f_dist = log(f_bins/f_ctr)/log(2)/f_sd; % actually just = ([0:(nchr*octs - 1)]/nchr-log2(f_ctr/basefrq))/f_sd % Gaussian weighting centered of f_ctr, with f_sd f_wts = exp(-0.5*f_dist.^2); for oct = 1:octs CF = [CF;(2^oct)*CFbu]; % pick out particular weights CM = [CM;diag(f_wts((oct-1)*nchr+[1:nchr]))*CMbu]; end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
57
% Remove sines above nyquist CFok = (CF(:,1) < sr/2); CF = CF(CFok,:); CM = CM(CFok,:); % Synth the sines x = synthtrax(CF,CM,sr,round(sr/framerate));
% Playing synth along with audio: %>> rdc = chromsynth(Dy.F(:,160+[1:300]),Dy.bts(160+[1:300]) -
Dy.bts(160),sr); %>> Dy.bts(161)*sr %ans = % 279104 %>> size(rdc) %ans = % 1 498401 %>> ddd = db(279104+[1:498401]); %>> soundsc([ddd,rdc'/40],sr)
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
58
Archivo detectSegments.m
function S=detectSegments(f,estDur,Th,winS)
x=f(:,2); L=length(x);
ind=find(x>0);
S(1,1)=ind(1); S(1,2)=0; k=2; while k<=length(ind) if ind(k)==ind(k-1)+1 ; else S(end,2)=ind(k-1); S(end+1,:)=[ind(k) 0]; end k=k+1; end
if S(end,2)==0 S(end,2)=ind(end); end
for m=1:size(S,1) S(m,1)=f(S(m,1),1); S(m,2)=f(S(m,2),1); end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
59
Archivo displayGroundTruth.m
function displayGroundTruth(rootdir,fname)
fhandle=2;
[x,fs,~]=wavread([rootdir fname]); load([rootdir fname '.mat']);
eval(['GT=' fname]);
t=[]; for k=1:length(GT) t=[t;[GT{k} k*ones(size(GT{k},1),1)]]; end
P=size(t,1);
FigHandle = figure(fhandle); clf;hold; L=ceil(length(x)/fs); set(FigHandle, 'Position', [100, 300, 4*L+100, 100])
for k=1:P mid=(t(k,1)+t(k,2))/2; plot(t(k,1):0.01:t(k,2),ones(size(t(k,1):0.01:t(k,2)))); plot(t(k,1)*ones(size(0.9:0.01:1.1)),0.9:0.01:1.1,'r') plot(t(k,2)*ones(size(0.9:0.01:1.1)),0.9:0.01:1.1,'r') text(mid,1.2,num2str(t(k,3))); end axis([0 L 0 2]) xlabel('Seconds'); ylabel('Pattern class');
while(1) d=ginput(1); if d(2)<0 break; end d=d(1); ind=find(d>=t(:,1) & d<=t(:,2)); a1=round(t(ind,1)*fs); a2=round(t(ind,2)*fs); sound(x(a1:a2),fs); end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
60
Archivo find_phrase_start.m
function find_phrase_start(path)
root='/Users/GinSonic/MTG/PatternDetection/alboreas gt/'; [w,fs]=audioread(strcat(root,path,'.wav')); hopSize=128; windowSize=4096; fftSize=2*windowSize; numFrames=floor((size(w,1)-windowSize)/hopSize); t=zeros(numFrames,1); for i=1:numFrames t(i)=i*128/44100; end
%% EXTRACT ENERGY RATIO minFreqLow=80.0; maxFreqLow=400.0; minFreqHigh=500.0; maxFreqHigh=6000.0; minBinLow=round(minFreqLow/(fs/2)*fftSize); maxBinLow=round(maxFreqLow/(fs/2)*fftSize); minBinHigh=round(minFreqHigh/(fs/2)*fftSize); maxBinHigh=round(maxFreqHigh/(fs/2)*fftSize);
% for stereo tracks if size(w,2)==2 wL=w(:,1); wR=w(:,2); eL=zeros(numFrames,1); eR=zeros(numFrames,1); for i=1:numFrames frameL=wL(i*hopSize:i*hopSize+windowSize); frameR=wR(i*hopSize:i*hopSize+windowSize); specL=fft(frameL, fftSize); specL=abs(specL(1:fftSize/2)); specL=specL./max(specL); lowEL=sum(specL(minBinLow:maxBinLow)); highEL=sum(specL(minBinHigh:maxBinHigh)); eL(i)=20*log10(highEL/lowEL); specR=fft(frameR, fftSize); specR=abs(specR(1:fftSize/2)); specR=specR./max(specR); lowER=sum(specR(minBinLow:maxBinLow)); highER=sum(specR(minBinHigh:maxBinHigh)); eR(i)=20*log10(highER/lowER); end eR(isnan(eR))=0; eL(isnan(eL))=0;
% SELECT CHANNEL averageERLeft=mean(eL); averageERRight=mean(eR); if averageERLeft>averageERRight energyRatio=eL; w=w(:,1); else energyRatio=eR; w=w(:,2); end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
61
% for mono tracks else energyRatio=zeros(numFrames,1); for i=1:numFrames frame=w(i*hopSize:i*hopSize+windowSize); spec=fft(frame, fftSize); spec=abs(spec(1:fftSize/2)); spec=spec./max(spec); lowEL=sum(spec(minBinLow:maxBinLow)); highEL=sum(spec(minBinHigh:maxBinHigh)); energyRatio(i)=20*log10(highEL/lowEL); end energyRatio(isnan(energyRatio))=0; end
energyRatioInit=energyRatio;
%% EXTRACT RMS vol=zeros(numFrames,1); for i=1:numFrames frame=w(i*hopSize:i*hopSize+windowSize); vol(i)=rms(frame); end
% volume envelope vol=vol./max(vol); vol=smooth(vol,10); volEnv=zeros(length(vol),1); [Ymax,Imax]=findpeaks(vol, 'minpeakheight', min(vol),
'minpeakdistance', 100); volEnv(1:Imax(1))=Ymax(1); for i=1:length(Imax)-1 dist=Imax(i+1)-Imax(i); volEnv(Imax(i):Imax(i)+round(dist/2))=Ymax(i); volEnv(Imax(i)+round(dist/2):Imax(i+1))=Ymax(i+1); end
%% ESTIMATE VOICED SECTIONS % normalize features energyRatio=energyRatio+abs(min(energyRatio)); volEnv=volEnv./max(volEnv); for i=1:length(energyRatio) energyRatio(i)=energyRatio(i)*volEnv(i); end eRatioMean=mean(energyRatio); eRatioStd=std(energyRatio); energyRatio=(energyRatio-eRatioMean)./eRatioStd;
% assign voicing voicing=zeros(length(energyRatio),1); voicing(energyRatio>0)=1; voicing=smooth(voicing, 100); energyRatio=energyRatioInit;
%% DIFFERENCE FUNCTION volDiff=zeros(numFrames,1); energyRatioDiff=zeros(numFrames,1);
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
62
for i=151:length(vol)-151 valV=(mean(vol(i:i+150))-mean(vol(i-150:i)))*mean(vol(i:i+150)); volDiff(i)=valV; valE=(mean(energyRatio(i:i+150))-mean(energyRatio(i-
150:i)))*mean(energyRatio(i:i+150)); energyRatioDiff(i)=valE; end
% normalization volDiff=volDiff+abs(min(volDiff)); volDiff=volDiff./mean(volDiff); volDiff=smooth(volDiff,20); energyRatioDiff=energyRatioDiff+abs(min(energyRatioDiff)); energyRatioDiff=energyRatioDiff./mean(energyRatioDiff); energyRatioDiff=smooth(energyRatioDiff,20);
% joint probability jointProbab=energyRatioDiff.*volDiff.*voicing; jointProbab=jointProbab./mean(jointProbab);
% phrase start estimation [pks, locs]=findpeaks(jointProbab, 'minpeakheight', 2,
'minpeakdistance', 340); estStartTimes=t(locs);
%% estimate phrase duration estStartTimes dur=[]; for i=2:length(estStartTimes) dur=[dur; estStartTimes(i)-estStartTimes(i-1)]; end
x=0:0.1:round(max(dur)); N=hist(dur,x); [Y,I]=max(N); smallest=x(I);
j=2; while smallest<3 smallest=x(I)*j; j=j+1; end
estimatedDuration=smallest;
%% write to file csvwrite(strcat(root,path,'.wav_estStartTimes.csv'), estStartTimes); csvwrite(strcat(root,path,'.wav_estDuration.csv'), estimatedDuration);
end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
63
Archivo find_phrase_start.m
dirName = '/Users/GinSonic/MTG/PatternDetection/alboreas gt/';
%# folder path files = dir( fullfile(dirName,'*.wav') ); %# list all *.xyz files files = {files.name}';
for i=21:length(files) filename=files(i); filename=filename{1}; filename=filename(1:length(filename)-4) find_phrase_start(filename); end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
64
Archivo musicThumbnailing.m
function [t,Chromagram] =
musicThumbnailing(x,fs,winSize,winStep,featureparams,numofPairs,stpoin
ts,penalty,timegap,estDur)
% SHORT-TERM FEATURE EXTRACTION
if strcmp(featureparams.feature, 'chroma') Features = stFeatureExtraction(x, fs, winSize, winStep); Chromagram = Features(23+1:23+12, :); % feature starts at row 23+1 elseif strcmp(featureparams.feature, 'chroma-inst-IF') Chromagram = chromagram_IF(x,fs,round(winSize*fs)); elseif strcmp(featureparams.feature, 'chroma-inst-E-12') Chromagram = chromagram_E(x,fs,round(winSize*fs),12); elseif strcmp(featureparams.feature, 'chroma-inst-E-24') Chromagram = chromagram_E(x,fs,round(winSize*fs),24); elseif strcmp(featureparams.feature, 'mfccs') Features = stFeatureExtraction(x, fs, winSize, winStep); Chromagram = Features(9:21, :); elseif strcmp(featureparams.feature, 'chroma+mfccs') Features = stFeatureExtraction(x, fs, winSize, winStep); Chromagram = Features([9:21 23+1:23+12], :); elseif strcmp(featureparams.feature, 'pitch') Chromagram=load('/home/aggelos/Dropbox/JESUS/Ground
Thruth/Fandangos/FAN01_f0.csv'); Chromagram(:,1)=[]; Chromagram=Chromagram(1:4:end); Chromagram=Chromagram'; end
if strcmp(featureparams.norm, 'zero-mean-unit-std') mval=mean(Chromagram'); Chromagram = Chromagram - repmat(mval',1,size(Chromagram,2)); sval=std(Chromagram'); Chromagram = Chromagram ./
repmat(eps+sval',1,size(Chromagram,2)); elseif strcmp(featureparams.norm, 'zero-mean') mval=mean(Chromagram'); Chromagram = Chromagram - repmat(mval',1,size(Chromagram,2)); end
if strcmp(featureparams.dimsreduction, 'pca') [COEFF, ~,LATENTS]=pca(Chromagram'); Chromagram=COEFF(:,1:featureparams.numofdims)'*Chromagram; end
stpoints=round(stpoints/winStep);
pats=zeros(size(stpoints,1)); winner11=zeros(size(stpoints,1)); winner12=zeros(size(stpoints,1)); winner21=zeros(size(stpoints,1)); winner22=zeros(size(stpoints,1));
timegap=round(timegap/winStep); if stpoints(1,1)==0 stpoints(1,1)=1;
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
65
end
for i=1:length(stpoints) for j=i+1:length(stpoints)
[~,~,~,tmp,bp]=smithWaterman(Chromagram(:,stpoints(i,1):stpoints(i,2))
,Chromagram(:,stpoints(j,1):stpoints(j,2)),penalty,timegap); if ~isempty(bp) pats(i,j)=tmp/size(bp,1); winner11(i,j)=stpoints(i,1)+bp(1,1)-1; winner21(i,j)=stpoints(j,1)+bp(1,2)-1; winner12(i,j)=stpoints(i,1)+bp(end,1)-1; winner22(i,j)=stpoints(j,1)+bp(end,2)-1; end end end
num=0; while num<numofPairs mv=max(max(pats)); if mv==0 break; end [x1,y1]=find(pats==mv); x1=x1(1);y1=y1(1); xc=winner11(x1,y1); yc=winner21(x1,y1); pats(x1,y1)=0; if (winner12(x1,y1)-winner11(x1,y1)+1)*winStep<0.5*estDur || ... (winner12(x1,y1)-winner11(x1,y1)+1)*winStep>1.5*estDur continue; end
num=num+1; t(num,1) = xc; t(num,2) = winner12(x1,y1); t(num,3) = yc; t(num,4) = winner22(x1,y1); t(num,5)=mv;
end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
66
Archivo postProcessing.m
function [G,t,Q]=postProcessing(t,Th,winS)
Gor=[]; for k=1:size(t,1) Gor=[Gor;[t(k,1) t(k,2) k]]; Gor=[Gor;[t(k,3) t(k,4) k]]; end [G,~,~,~,~]=projectClasses(Gor);
% prepare for evaluation Q=cell(1); g=max(G(:,3)); counter=0; for k=1:g ind=find(G(:,3)==k); if ~isempty(ind) counter=counter+1; Q{counter}=G(ind,1:2)*winS; end end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
67
Archivo patternDiscoveryEvaluation.m
function [sEST,sOCCp,sOCCr] = patternDiscoveryEvaluation(P,Q,Th)
nP=length(P); nQ=length(Q);
% ESTABLISHMENT sEST=zeros(nP,nQ); sOCCp=zeros(nP,nQ); sOCCr=zeros(nP,nQ); for i=1:nP for j=1:nQ pLoc=P{i}; qLoc=Q{j}; % score matrix score=zeros(size(qLoc,1), size(pLoc,1)); for m=1:size(qLoc,1) for n=1:size(pLoc,1) stOL=max(qLoc(m,1), pLoc(n,1)); endOL=min(qLoc(m,2), pLoc(n,2));
% overlap Percentage score(m,n)=max((endOL-stOL),0)/max((qLoc(m,2)-
qLoc(m,1)),(pLoc(n,2)-pLoc(n,1)));% % onset and offset within limitation (1.5s) end end sEST(i,j)=max(max(score)); score(score<Th)=0; sOCCp(i,j)=sum(max(score'))/size(score,1); sOCCr(i,j)=sum(max(score))/size(score,2); end end
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
68
Archivo manualExperiment.m
clc; clear; close('all'); fclose('all');
genre='Alboreas'; % Folder where the filename is located audiodir=['C:\Users\JESUS\Dropbox\JESUS\Ground Thruth\' genre '/']; % Folder where the file with the estimated parameters is located annotationsdir=['C:\Users\JESUS\Dropbox\JESUS\Ground Thruth\' genre
'/']; %%%%% resfile = [genre '.txt'];
% Filename (do not use the .wav suffix) D=dir([audiodir '*.wav']); EstPall=0; EstRall=0; OccPall=0; OccRall=0; denEstPall=0; denEstRall=0; denOccPall=0; denOccRall=0; %winl=1102*4/44100; winl=511*4/44100; wins=winl/4;
for EvalThreshold=0.75:0.05:0.75 for penalty=0.1:0.1:0.1 for timegap=0.8:0.1:0.8 for NumOfImportantResults=15:5:15 for filec=1:length(D) EstPall=0; EstRall=0; OccPall=0; OccRall=0; denEstPall=0; denEstRall=0; denOccPall=0; denOccRall=0;
param=D(filec).name(1:end-4); audiofile=[param '.wav'];
% Filename containing the estimations annotationsfile=[param '.wav_estStartTimes.csv'];
% Load starting points stpoints=load([annotationsdir annotationsfile]);
% Load wav and average channels if necessary durfile=[param '.wav_estDuration.csv'];
[x,fs,bits]=wavread([audiodir audiofile]); if size(x,2)==2
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
69
x=0.5*(x(:,1)+x(:,2)); end
% Load estimated pattern length estDur=load([annotationsdir durfile]);
% Load confidence conffile=[param '.wav_vconf.csv']; conffunction=load([annotationsdir conffile]); segs=detectSegments(conffunction,estDur,1,wins); ind=find(segs(:,2)-segs(:,1)<0.5*estDur); segs(ind,:)=[];
% Compute pairs of patterns. Just one run is used
in this version of the % algorithm. featureparams.feature='chroma-inst-E-24'; featureparams.norm='zero-mean-unit-std'; %featureparams.norm='zero-mean'; %featureparams.norm='none'; featureparams.dimsreduction='none'; featureparams.numofdims=0;
localcostfun='cosine'; tic fprintf('Scanning %s ...\n',param); [t,Chromagram] =
musicThumbnailing(x,fs,winl,wins,featureparams,NumOfImportantResults,s
egs,penalty,timegap,estDur); toc %%%%%%%%%%%%%%%%%
Th=1; proxTh=inf; [tnew,tt,Q]=postProcessing(t,Th,wins); %plotPatterns(tnew,length(x)/fs/wins);
% evaluate load([annotationsdir param '.mat']); eval(['P=' param ';']); [sEST{filec},sOCCp{filec},sOCCr{filec}] =
patternDiscoveryEvaluation(P,Q,EvalThreshold);
EstP=sum(max(sEST{filec}'))/size(sEST{filec},1); EstPall=EstPall+sum(max(sEST{filec}')); denEstPall=denEstPall+size(sEST{filec},1);
EstR=sum(max(sEST{filec}))/size(sEST{filec},2); EstRall=EstRall+sum(max(sEST{filec})); denEstRall=denEstRall+size(sEST{filec},2);
EstF=(2*EstP*EstR/(EstP+EstR));
OccP=sum(max(sOCCp{filec}'))/size(sOCCp{filec},1); OccPall=OccPall+sum(max(sOCCp{filec}')); denOccPall=denOccPall+size(sOCCp{filec},1);
Reconocimiento de patrones melódicos vocales repetidos en audios polifónicos en flamenco Anexo: Códigos Matlab
70
OccR=sum(max(sOCCr{filec}))/size(sOCCr{filec},2); OccRall=OccRall+sum(max(sOCCr{filec})); denOccRall=denOccRall+size(sOCCr{filec},2);
OccF=(2*OccP*OccR/(OccP+OccR));
Res(filec,:)=[EstP EstR EstF OccP OccR OccF];
EstPall=EstPall/denEstPall; EstRall=EstRall/denEstRall; EstFall=(2*EstPall*EstRall/(EstPall+EstRall));
OccPall=OccPall/denOccPall; OccRall=OccRall/denOccRall; OccFall=(2*OccPall*OccRall/(OccPall+OccRall)); end if ~exist(resfile,'file') fid=fopen(resfile,'w');
fprintf(fid,'Feature,FeatureNorm,DimReduction,NumofDims,winl, wins,
NumofResults,GapPenalty,Gaplength,MergeTimeTh,MergeSimTh,EstP,EstR,Est
F,OccP,OccR,OccF,EvalThreshold\n'); fclose(fid); end fid=fopen(resfile,'a');
fprintf(fid,'%s,%s,%s,%d,%3.2f,%3.2f,%d,%3.2f,%3.2f,%3.2f,%3.2f,%5.4f,
%5.4f,%5.4f,%5.4f,%5.4f,%5.4f,%5.2f\n',featureparams.feature,
featureparams.norm, featureparams.dimsreduction,
featureparams.numofdims,...
winl,wins,NumOfImportantResults,penalty,timegap,Th, proxTh,
EstPall,EstRall,EstFall,OccPall,OccRall,OccFall,EvalThreshold); fclose(fid); end end end end
Top Related