scieee AI-readable full text Open interactive document viewer

Desarrollo e implementación de algoritmos para escalado de melodías flamencas

Garcia Carrasco, Miguel

Abstract

El estudio de las medidas de la similitud melódica es de vital importancia en los sistema de recuperación de información musical. En este proyecto usamos técnicas de concordancia geométrica para medir la similitud entre dos melodías. Proponemos un algoritmo eficiente para un problema de optimización inspirado en la operación melódica del escalado lineal. En el problema de escalado, una melodía de consulta es escalada hacia adelante hasta que la similitud melódica entre la consulta y la referencia sea mínima. La métrica de similitud melódica utilizada es el área comprendida entre dos contornos melódicos.

Full text

Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías Industriales Desarrollo e implementación de algoritmos para escalado de melodías flamencas Autor: Miguel García Carrasco Tutor: José Miguel Díaz Báñez Dpto. de matemática aplicada Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías Industriales Desarrollo e implementación de algoritmos para escalado de melodías flamencas Autor: Miguel García Carrasco Tutor: José Miguel Díaz Báñez Catedrático de universidad Dpto. de matemática aplicada Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021 Trabajo Fin de Grado: Desarrollo e implementación de algoritmos para escalado de melodías flamencas Autor: Miguel García Carrasco Tutor: José Miguel Díaz Báñez El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: Agradecimientos Am i tutor, el Dr. José Miguel Díaz-Báñez, por contagiar su pasión por fusionar las matemáticas, la computación y el flamenco. A Fabio Rodríguez, por estar siempre dispuesto a echar un cable con python o con lo que haga falta. A cada profesor de la escuela del que pude aprender y contribuyó en mi formación. A cada compañero que me crucé en la carrera y los buenos momentos vividos durante estos años. Por último, a mi familia y amigos por estar en el día a día haciendo esto posible. Miguel García Carrasco Sevilla, 2021 I Resumen El estudio de las medidas de la similitud melódica es de vital importancia en los sistema de recuperación de información musical. En este proyecto usamos técnicas de concordancia geométrica para medir la similitud entre dos melodías. Proponemos un algoritmo eficiente para un problema de optimización inspirado en la operación melódica del escalado lineal. En el problema de escalado, una melodía de consulta es escalada hacia adelante hasta que la similitud melódica entre la consulta y la referencia sea mínima. La métrica de similitud melódica utilizada es el área comprendida entre dos contornos melódicos. III XÍndice 6.2 Clasificación de melodías entre deblas y martinetes 40 6.3 Aplicación de consulta entre melodías 40 6.4 Trabajo futuro 40 Índice de Figuras 43 Índice de Tablas 45 Índice de Códigos 47 Bibliografía 49 1 Introducción El presente documento corresponde a la memoria del trabajo de fin de grado del grado de ingeniería de las tecnologías industriales (GITI) cursado en la Universidad de Sevilla (US). En concreto está en el marco del proyecto COFLA (COMPUTATIONAL ANALYSIS OF FLAMENCO MUSIC), proyecto del que hablaremos a continuación. 1.1 Alcance y motivación El flamenco es sin lugar a duda una de las manifestaciones culturales más importantes de nuestro país, así como el principal referente de nuestra cultura a nivel internacional. Con origen andalúz y desarrollado en esta tierra, siempre ha sido una expresión artística de tradición fundamentalmente oral, al tratarse en sus orígenes de una manifestación popular. Este hecho, unido a que los expertos en música flamenca no han seguido habitualmente una formación académica tradicional, ha provocado un escaso acercamiento del método científico a cualquier ámbito relacionado con el flamenco, por lo que la cantidad y calidad de la investigación existente en torno al flamenco es limitada. Debido a la escasa investigación científica en la musicología del flamenco, se precisan diferentes fases de actuación para su puesta en valor en la comunidad científica, que abarcan desde la creación de un corpus de transcripciones o anotaciones musicales significativo, hasta el diseño de algoritmos eficientes para calcular distancias entre dos melodías. Entre los aspectos fundamentales que demandan avances en este área científica 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. La necesidad de un estudio riguroso y metódico de este arte a través de las matemáticas y las ciencias de la computación es el origen del nacimiento del proyecto COFLA 1 , liderado por José Miguel Díaz Báñez y financiado por la junta de Andalucía, proyecto que ha cimentado el área de investigación Teoría Computacional del Flamenco y marco donde se desarrolla este proyecto, con la intención de aunar los maravillosos mundos de la música, y la ciencia, en concreto el flamenco con las matemáticas y las ciencias de la computación. La industria de la música fue una de las primeras en verse completamente reestructurada por los avances de la tecnología digital, y hoy en día tenemos acceso a miles de canciones almacenadas en nuestros dispositivos móviles y a millones más a través de servicios en internet. Dada esta inmensa cantidad de música a nuestro alcance, necesitamos nuevas maneras de describir, indexar, buscar e interactuar con el contenido musical. Desgraciadamente, las aplicaciones informáticas existentes en la actualidad no suelen ser útiles para el contexto musical flamenco, por lo que es necesario adaptar y diseñar nuevos algoritmos que abran las puertas del mundo tecnológico a la música flamenca. Las técnicas computacionales y modelos matemáticos utilizados en el área de investigación de la Teoría Computacional del flamenco, pertenecen al campo de la Music Information Retrieval (MIR), ciencia interdisciplinar que se dedica a la recuperación de información de la música. MIR es un campo de conocimiento en 1http://www.cofla-project.com/ 1 2Capítulo 1. Introducción crecimiento que involucra a distintas ramas de conocimiento como pueden ser: la psicología, la formación musical académica, tratamiento de señal, algoritmia, etc. Algunas de las aplicaciones del MIR son: •Sistemas de recomendación musical. •Separación y reconocimiento de instrumentación. •Transcripción automática. •Caracterización automática. Desde los comienzos de MIR como campo de conocimiento, la mayoría de las técnicas y modelos han sido desarrollados para una corriente particular de la música tradicional, la conocida como música popular de tradición occidental. En los últimos años ha surgido un especial interés en aplicar las técnicas desarrolladas por el MIR para el estudio de otras músicas tradicionales, folk o música étnica (ISMIR) 2 , ya que etnomusicólogos, musicólogos y otros profesionales de la música podrían beneficiarse considerablemente de esta investigación. Aunque las técnicas computacionales han demostrado ser de gran interés cuando se aplica a diferentes repertorios musicales, es evidente que se deben desarrollar técnicas y algoritmos matemáticos específicos para comprender, modelar y procesar diferentes repertorios musicales. Debido a que el flamenco es una música de tradición y difusión oral, está fuertemente ligada a la cultura del entorno donde nace, en este caso la historia y cultura andaluza. Por ello, no debe realizarse una investigación científica ajena al contexto cultural y las implicaciones que esto supone en el desarrollo y sentido de la música flamenca. De hecho, existe un interés reciente por el estudio tecnológico interdisciplinar de músicas de tradición oral, lo que ha llevado a la consideración de una nueva área de investigación conocida como Etnomusicología Computacional. La Etnomusicología Computacional se remonta a 1978 [ 9 ] cuando Halmos, Köszegi y Mandler, dos matemáticos y un ingeniero proporcionaron una interesante reflexión sobre el papel de los ordenadores en las cinco principales áreas de investigación en Etnomusicología: recopilación de datos, administración, notación, selección y sistematización, y tratamiento científico. El término fue redefinido por Tzanetakis [ 20 ] en 2007 como "el diseño, el desarrollo y la utilización de herramientas informáticas que tienen el potencial de ayudar en la investigación etnomusicológica". Con este enfoque se ve a la etnomusicología como la base científica que se sirve de los avances en otras disciplinas de apoyo tales como Matemáticas Computacionales, Musicología o estudios de carácter cultural. Cuando nos acercamos a la Etnomusicología Computacional de esta manera, se adopta un nuevo marco mental que ayuda a reestructurar problemas y percibir las relaciones entre sus elementos bajo una perspectiva diferente. 1.2 Objetivo y aplicaciones Muchos problemas relacionados con la teoría musical son fundamentalmente geométricos por naturaleza, esto es, miden alguna característica que contiene el corpus musical . Pongamos un ejemplo: dos melodías pueden ser representadas por polígonos ortogonales (funciones escalón) y una posible medida de similitud es el área comprendida entre las dos curvas correspondientes a cada canción (permitiendo traslaciones verticales u horizontales, compresiones o escalado de melodías, etc). De esta forma, el problema se traslada al campo de la computación, donde coincide con el problema de emparejamiento de formas poligonales [ 1 ]. Este proyecto toca un problema fundamental del Análisis Computacional de la Música: la similitud melódica. La trascendencia de la similitud melódica ha sido, y es, tal que numerosas disciplinas se han ocupado intensivamente de su estudio: • En Etnomusicología, por ejemplo, para entender la lógica musical, para evaluar los estilos y sus características, para conocer los criterios de improvisación [2][19][10]. •En Análisis Musical, para construir modelos tanto teóricos como computacionales [13]. •En la resolución de conflictos de propiedad intelectual [6]. •En Tecnología Musical, para aplicar los modelos obtenidos tras el correspondiente análisis [10]. • En Psicología de la música, para comprender mejor el hecho musical, para aportar conocimiento a un análisis integral de la música [8]. 2The International Society for Music Information Retrieval (www.ismir.net) 1.2 Objetivo y aplicaciones 3 La investigación existente en similitud musical está centrada fundamentalmente en música occidental y en los sistemas actuales de recomendación es esta música la que se encuentra etiquetada. Sin embargo, existe un creciente interés en el campo para analizar y etiquetar músicas tradicionales y folclóricas. En este proyecto trabajaremos en el contexto de la música tradicional más importante en Andalucía y, que posee además, gran interés por todo el mundo. La música flamenca es fundamentalmente de tradición y difusión oral, lo que dificulta, y hace más interesante a su vez, su estudio científico. La conservación de esta música 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 o palos del flamenco, siendo éste uno de los problemas abiertos más apasionantes de este área de investigación. Puesto que el cante flamenco no ha sido llevado a partituras (al menos hasta ahora no existe consenso sobre la transcripción del cante flamenco), trabajaremos con una base de datos de melodías de cantes a capela (corpus tonás), que veremos con detalle en el capítulo 4. Teniendo en cuenta lo expuesto en los anteriores párrafos, en este trabajo de fin de grado pretendemos dar un nuevo paso que permita realizar una aproximación al flamenco a través del uso de técnicas computacionales con objeto de analizar con más profundidad y con rigor científico este arte milenario. El objetivo de este trabajo será la resolución e implementación del problema de escalado lineal de una melodía, basado en el algoritmo propuesto en el trabajo [ 4 ]. En concreto, vamos a considerar dos estilos flamencos que corresponden al grupo de cantes a capela del flamenco, las deblas y los martinetes. Habría que aclarar que aunque en este proyecto se realizan los experimentos computacionales con estos cantes a capella, podrían llevarse a cabo igualmente con otros estilos musicales. 2 Definición del problema La musicología y los estudios computacionales de similitud rítmica y melódica han dado lugar a numerosos problemas geométricos. Una melodía se puede representar como una secuencia consecutiva de notas y cada nota se puede representar por un punto o una línea horizontal en el plano bidimensional. En este trabajo estudiamos uno de los problemas que surgen de la recuperación de información musical (MIR): el escalado lineal. Dada una melodía de referencia, una melodía de consulta y una medida de similitud, en el problema de escalado la melodía de consulta es escalada en la dirección horizontal para encontrar el mínimo de la medida de similitud entre las melodías de consulta y referencia. El estudio de medidas para la similitud melódica es de vital importancia en un sistema de recuperación de información musical. Técnicas basadas en medidas de similitud geométrica han sido ampliamente utilizadas en la literatura. La ventaja de utilizar concordancia geométrica es su alta tasa de acierto, mientras que su desventaja es que consume mucho tiempo de computación. En [ 15 ], la siguiente técnica de concordancia geométrica fue propuesta: Cada nota es representada por un segmento horizontal de manera que la secuencia de notas puede describir un contorno rectangular en un sistema de coordenadas de dos dimensiones, en el cual los ejes horizontal y vertical corresponden respectivamente al tiempo y la altura o tono. Entonces la medida de similitud es el área mínima que hay entre dos contornos melódicos. 2.1 Ingredientes del problema En este trabajo, las melodías son representadas por una secuencia de notas en un plano bidimensional cuyos ejes son el tiempo (eje horizontal) y la altura o tono (eje vertical). Cada nota es descrita por una línea horizontal donde su altura y su longitud denotan el tono y la duración, respectivamente. En esta representación, la melodía es una secuencia de segmentos horizontales, es decir, una melodía se puede ver como una función de escalón en el tiempo. Resaltar que gracias a la propiedad de invarianza de este tipo de representación, solo hay necesidad de mover la melodía de consulta en el eje del tiempo para el problema de escalado. Sean por tanto R= (R1,R2,...,Rn) y Q= (Q1,Q2,...,Qm) las secuencias que representan las dos melodías, con m<n . R es la melodía de referencia de una base de datos y Q la melodía de consulta de la cual se quiere averiguar la concordancia. Los elementos de RyQson segmentos horizontales. Los ingredientes principales del problema, introducidos a continuación, son la medida geométrica que utilizamos para evaluar la similitud y operación que le realizamos a la melodía de consulta: •Área: la región comprendida entre las dos melodías con la misma duración en la representación de línea puede ser dividida en rectángulos con bordes verticales soportados por líneas verticales que pasan por el final de los segmentos. El área entre las dos melodías se define como la suma de las áreas de cada región en las que han sido divididas. Para la melodía más corta, se extiende la última nota hasta igualar las longitudes. Ver figura 2.1 •Escalado lineal: consideremos la representación bidimensional de las melodías R y Q . Sean X= (x0=0,x1,x2,...,xn) y T= (t0=0,t1,t2,...,tm) las divisiones temporales de la representación de R y Q respectivamente. Dado ε>0 , se define el ε -escalado de la melodía de consulta Q , SQ(ε) , como la operación de incrementar por εla duración de cada segmento de Qpero manteniendo fijado 5 6Capítulo 2. Definición del problema Figura 2.1 Área entre 2 melodías genéricas. el inicio de la melodía Q. Entonces, tras un ε -escalado, X no se transforma y T es transformada a T+ε= (t0,t1+ε,t2+2ε,...,tm+mε) . La melodía de consulta puede ser escalada hasta que ambas melodías tengan la misma duración. Entonces, 0≤ε≤xn−tm m. Nótese que la altura de las notas no se ve afectada por el problema de escalado. Definición del problema: Dados dos contornos melódicos RyQ, calcular cuál es el valor de ε>0 que minimiza el área entre RySQ(ε) 2.2 Escalado usando el área como medida de la similitud Dado que la duración de Q es menor que la de R , extendemos el último segmento de Q de forma que las duraciones de Q y R sean iguales. Así, el área entre R y Q es la suma de O(m+n) rectángulos tal y como se ilustra en la figura 1. Denotamos ARQ(ε) al área entre R y SQ(ε) como función de ε . Obsérvese que tras el ε -escalado de la consulta para un ε lo suficientemente grande, al menos dos de los límites verticales coincidirán, esto es, xi=tj(ε) para algunos i , j distintos. En este instante, hay un rectángulo que desaparece, y después de ese instante aparecerá uno nuevo. A este valor de ε se le llama evento. Hay que destacar también que, entre dos eventos, las áreas de algunos rectángulos se incrementan, otras disminuyen y otras no se ven afectadas. De hecho, el tipo de rectángulo puede ser determinado por sus límites verticales. Los rectángulos pueden ser clasificados en 4 tipos: Tipo C0 , con límites verticales [ xi , xi+1 ] (rectángulo estático, azul); tipo C1 , con límites verticales [ tj , tj+1 ] (rectángulo rojo en aumento); tipo C2 , con límites verticales [ xi , tj ] (rectángulo en aumento)y tipo C3, con límites verticales [tj,xi] (rectángulo en disminución); La figura 2.2 ilustra cómo desaparece un rectángulo tipo C3al producirse un evento. Figura 2.2 Tras realizar un escalado a Q, se produce un evento en el que desaparece un rectángulo tipo C3. 2.2 Escalado usando el área como medida de la similitud 7 Los siguientes resultados nos permiten discretizar el problema: Lemma 1. ARQ(ε)es una función lineal definida a trozos. Demostración. Sea rjk el k-ésimo rectángulo generado por el j-ésimo segmento de Q tal y como ilustra la figura 2.2. Dado que en la operación de escalado solo cambia el ancho de los rectángulos, denotemos por bjk y hjk la base y la altura de rjk , respectivamente. Usando esta notación, el área entre dos eventos consecutivos se puede expresar como: ARQ(ε) = ∑ rjk∈C0 bjk(ε)hjk+∑ rjk∈C1 bjk(ε)hjk+∑ rjk∈C2 bjk(ε)hjk+∑ rjk∈C3 bjk(ε)hjk.(2.1) Ahora, sea ε0<ε00 dos movimientos de escalado entre dos eventos consecutivos. Solo cambia la anchura del rectángulo, y el área se ve modificada por: ARQ(ε00) = ARQ(ε0)+(ε00 −ε0) ∑ rjk∈C1 hjk+∑ rjk∈C2 jhjk−∑ rjk∈C3 (j−1)hjk  .(2.2) De esta forma, el área entre las dos melodías es lineal entre dos eventos consecutivos.  Como consecuencia del Lemma 1, el área mínima se alcanza en los eventos y nuestro objetivo es reevaluar el área en cada evento (hay O(nm)eventos en el peor de los casos) y quedarse con el mínimo valor. Lemma 2. ARQ(ε)entre dos eventos consecutivos puede ser actualizada en tiempo O(1). Demostración. Sean εi , εi+1 dos eventos consecutivos. Usando la ecuación (2.2) se puede calcular ARQ(εi+1) a partir de ARQ(εi) actualizando el tipo de rectángulo modificado. Nótese que solo hay 4 cambios posibles para dos notas de Qinvolucradas en el evento: •Un rectángulo C2cambia a un C0y crea otro C2 •Un rectángulo C1cambia a un C3y crea otro C2 •Un rectángulo C0cambia a un C3y crea otro C3 •Un rectángulo C2cambia a un C1y borra un C3(ver figura 2.2)  Entonces, la suma en el evento dado por εi+1 puede recalcularse actualizando la altura de los rectángulos modificados. Dado que como mucho solo 3 rectángulos habrán cambiado, se puede computar en O(1) y el resultado está probado. Estamos listos para resolver eficientemente el problema del escalado lineal. Teorema 3. El problema de escalado puede ser resuelto en tiempo O(nmlogm). Demostración. Primero, para cada segmento de la consulta Q , se guardan sus eventos en una lista ordenada. A cada evento de la lista le corresponde a un valor de épsilon, una altura y el tipo de rectángulo del que se trata. Tenemos en total m listas. Dado que la entrada R es una secuencia ordenada de segmentos, cada lista puede ser computada en O(n), así que nos toma O(nm)para las mlistas. Por otra parte, dada un área para un ε=0 , ARQ(0) , construimos un montículo (más comúnmente conocido por su anglicismo, heap) cuyos nodos son los m eventos, el primero para cada lista. Desplazando de izquierda a derecha la melodía de consulta usamos las listas para mantener en la pila el siguiente evento y actualizar el área de cada evento. El deslazamiento acaba cuando no quedan eventos en la lista y el área mínima se ha mantenido en el proceso. Dado que actualizar el área toma un tiempo O(1) por el lemma 2, el algoritmo en total consume tiempo O(mnlogm). 3 Algoritmo e Implementación En este capítulo desarrollamos en detalle el algoritmo que proponemos para resolver el problema del escalado lineal y mostramos su implementación. En esencia el problema que queremos resolver es averiguar cuánto se parecen dos melodías entre sí, y en concreto qué modificación hay que hacerle a una de las dos melodías para que sea lo más parecida posible a la otra. Nuestro algoritmo requiere en esencia dos entradas, que son las dos melodías Q y R , siendo respectivamente la melodía de la cual queremos extraer la información y la referencia con la que queremos contrastar nuestra consulta. Nuestro objetivo es por tanto obtener el valor de ε que minimiza el área entre las dos melodías, es decir el valor del escalado que hay que realizarle a la consulta Q para que se parezca lo máximo posible a la referencia R. Una manera ampliamente extendida de representar gráficamente un algoritmo o proceso es mediante un diagrama de flujo. En la figura 3.1 podemos apreciar el diagrama de flujo de nuestro algoritmo, que ayuda a analizar las directrices generales que vamos a seguir a lo largo del algoritmo. Figura 3.1 Diagrama de flujo general del algoritmo de escalado. 9 16 Capítulo 3. Algoritmo e Implementación if R[i][1] > notaactual[1] and e < maxeps: if j == 0: notaactualdesplazada = ( 0, notaactual[1]+e*(j+1), notaactual[2]) notasiguientedesplazada = ( notasiguiente[0]+e*(j+1), notasiguiente[1] + e*(j+2), notasiguiente[2]) else: notaactualdesplazada = ( notaactual[0]+e*(j), notaactual[1]+e*(j+1), notaactual[2]) notasiguientedesplazada = ( notasiguiente[0]+e*(j+1), notasiguiente[1] + e*(j+2), notasiguiente[2]) # caculo de las 4 alturas existentes: # h1 es la altura del primer rectangulo que forman las 2 notas h1 = abs(notaactualdesplazada[2]-R[i][2]) # h2 es la altura del rectanglo c3 que siempre desaparace en un evento h2 = abs(notasiguientedesplazada[2]-R[i][2]) # h3 es la altura del rectangulo c2 que siempre aparace en un evento h3 = abs(notaactualdesplazada[2]-R[i+1][2]) # h4 es la altura del rectangulo que forman las 2 siguientes notas de un evento h4 = abs(notasiguientedesplazada[2]-R[i+1][2]) # caso 0: de c2,c3,c0 a c0,c2,c3 # antes del evento: c2 en aumento en la nota actual y un azul contenido en la nota siguiente # Despues del evento: azul contenido en la nota actual y un c3 en disminucion en la nota siguiente if notaactualdesplazada[0] <= R[i][0] and R[i+1][1] <= notasiguientedesplazada[1]: epsilon.eps.append([e, 0, i, h1, h2, h3, h4, n]) # caso 1: de c1,c3,c2 a c3,c2,c1 # antes del evento: rojo contenido en aumento en la nota actual y un c2 en aumento en la nota siguiente # Despues del evento: c3 en disminucion en la nota actual y un rojo contenido en la nota siguiente elif R[i][0] <= notaactualdesplazada[0] and notasiguientedesplazada [1] < R[i+1][1]: epsilon.eps.append([e, 1, i, h1, h2, h3, h4, n]) # caso 2: de c2,c3,c2 a c0,c2,c1 # antes del evento: c2 en aumento en la nota actual y un c2 en aumento en la nota siguiente # Despues del evento: azul contenido en la nota actual y un rojo contenido en la nota siguiente elif notaactualdesplazada[0] < R[i][0] and notasiguientedesplazada [1] < R[i+1][1]: epsilon.eps.append([e, 2, i, h1, h2, h3, h4, n]) # caso 3: de c1,c3,c0 a c3,c2,c3 # antes del evento: rojo contenido en aumento en la nota actual y un azul contenido en la nota siguiente # Despues del evento: c3 en disminucion en la nota actual y un c3 en disminucion en la nota siguiente 3.4 Explicación detallada del código 17 elif R[i][0] < notaactualdesplazada[0] and R[i+1][1] <= notasiguientedesplazada[1]: epsilon.eps.append([e, 3, i, h1, h2, h3, h4, n]) n += 1 En la clase Event se definen 3 atributos, .eps , .index y .pitch . La idea consiste en crear un objeto Event para cada nota de Q . El atributo .eps es una lista que contiene los eventos que tiene la nota de Q a la cual pertenece el objeto Event creado. En el peor de los casos esta lista tendrá una longitud de m eventos, que sería el caso en el que la nota de Q tuviera un evento con las m notas de la melodía de referencia R. Como es evidente, todos los eventos de una misma nota Q tienen el mismo atributo .index y .pitch , pues corresponden respectivamente al número de la nota en cuestión y a su altura. La función calculaeventos_main precisa como entradas las melodías R y Q y el valor máximo que puede tener un evento, maxeps según lo definido en la sección 2.1 y retorna como resultado una lista q en la que cada elemento de la lista es un objeto Event que contienen todos los eventos de cada nota de Q. En esta función un bucle for itera a lo largo de cada una de las notas de Q . En cada iteración se crea su objeto Event correspondiente y se rellenan los atributos. Los atributos .index y .pitch se rellenan tal cual, pero para rellenar el atributo .eps es para lo que existe la función “get_epsilons”, explicada a continuación. La función get_epsilons precisa de los siguientes parámetros de entrada: epsilon (objeto Event para la nota de Q correspondiente), notaactual(es la nota de Q para la cual se produce el evento), notasiguiente(nota siguiente para la cual se produce el evento, también necesaria para calcular el evento), R (al completo), maxeps , j (número de la nota de Q para la que se produce el evento). Esta función no tiene ningún parámetro de retorno, pero guarda en el atributo .eps la información necesaria para cada objeto épsilon que recibe como entrada. Recordemos que esta función se ejecuta en un for para cada nota de Q . A su vez, en esta función, se itera en un for anidado para cada nota R . Lo primero que haremos es calcular el valor de ε al cual llamaremos e en el código. Este valor se calcula restando el valor de tiempo del final la nota de cada una de las notas de R con el final de la nota de Q de esa iteración. A continuación tenemos que contrastar si es un resultado valido, es decir, que sea mayor que cero y menor que maxeps . En caso de tratarse de un resultado válido, se escalan las notas actual y siguiente de Qsegún lo definido en la sección 2.1 En el transcurso de un evento entre dos notas hay en juego 4 alturas correspondientes a los 6 rectángulos involucrados en el evento (3 antes del evento y 3 después). El cálculo de estas alturas es clave para actualizar los sumatorios h11 , h22 y h33 que se calcularon en el paso anterior, y por eso es el siguiente paso de esta función. Por último tenemos en esta función un conjunto de sentencias i f /eli f para discernir entre los 4 pasibles casos correspondientes a los 4 tipos de eventos existentes, que se representan cualitativamente en las siguientes imágenes. •Caso 0 (figura 3.3): de c2,c3,c0ac0,c2,c3. Antes del evento: c2en aumento en la nota actual y un azul contenido en la nota siguiente. Después del evento: azul contenido en la nota actual y un c3en disminución en la nota siguiente •Caso 1 (figura 3.4): de c1,c3,c2ac3,c2,c1 Antes del evento: rojo contenido en aumento en la nota actual y un c2 en aumento en la nota siguiente. Después del evento: c3en disminución en la nota actual y un rojo contenido en la nota siguiente •Caso 2 (figura 3.5): de c2,c3,c2ac0,c2,c1 Antes del evento: c2en aumento en la nota actual y un c2en aumento en la nota siguiente Después del evento: azul contenido en la nota actual y un rojo contenido en la nota siguiente •Caso 3 (figura 3.6): de c1,c3,c0ac3,c2,c3 Antes del evento: rojo contenido en aumento en la nota actual y un azul contenido en la nota siguiente Después del evento: c3en disminución en la nota actual y un c3en disminución en la nota siguiente. 18 Capítulo 3. Algoritmo e Implementación (a) Antes del evento. (b) Después del evento 0. Figura 3.3 Evento de tipo 0. (a) Antes del evento. (b) Después del evento. Figura 3.4 Evento de tipo 1. (a) Antes del evento. (b) Después del evento. Figura 3.5 Evento de tipo 2. (a) Antes del evento. (b) Después del evento. Figura 3.6 Evento de tipo 3. 3.4 Explicación detallada del código 19 Una vez averiguado en qué caso nos encontramos ya disponemos de toda la información necesarias para crear un nuevo elemento en el atributo .eps . Cada uno de estos elementos es una lista el cual contiene el valor e , la topología del evento del que se trata, el número de la nota de R con la que se ha producido el evento, las 4 alturas antes descritas (h1,h2,h3yh4) y por último el número de evento del que se trata para esa nota. La función display no tiene un objetivo funcional para la resolución del algoritmo, si no un apoyo para visualizar si se están realizando correctamente los cálculos. 3.4.3 Paso 3, construcción del heap Este paso se resuelve con una única función llamada heap (código 3.5)en la cual se crea un heap en el que se guarda el primer evento de cada segmento de Q . Tiene como parámetro de entrada la lista q de objetos Evenets creadas en el paso anterior y devuelve como parámetro de salida el heap, h. Código 3.5 Función para la construcción del heap. def heap(q): """Función que crea un heap en el que se guarda el primer evento de cada segmento de Q""" h = [] for j in q: if len(j.eps) > 0: e = j.eps[0] heapq.heappush(h, [e[0], j.index, e[-1]]) return h Con un único bucle for iteramos para cada elemento de q . En cada iteración añadimos un elemento al heap. Cada elemento es una lista de 3 elementos, los cuales son el valor del primer épsilon de cada atributo .eps del objeto Event , el segundo es el índice de la nota de Q para el que se produce el evento y por último el número de evento del que se trata para esa nota de Q. 3.4.4 Paso 4, actualización y seguimiento del área En esta última parte del algoritmo obtendremos el resultado deseado con la ayuda de la información recabada en las partes anteriores del algoritmo. La función “actualizar” del archivo “actualizacionarea” (código 3.6) será la encargada de esta misión. Esta función tiene como parámetros de salida el área mínima entre las dos canciones y el valor de épsilon para el que se produce dicha área mínima. Como entradas precisa del heap ( h ), del vector de objetos Event ( q ), el áreainicial ( areainicial ), de los sumatorios ponderados ( h11 , h22 y h33), y del valor máximo de épsilon (maxeps). En líneas generales, en esta función, vamos a ir sacando y metiendo elementos en el heap. Un bucle while va extrayendo el nodo raíz del heap, averiguamos a qué nota de Q pertenece el evento que acabamos de sacar y metemos en el heap el siguiente evento de esa misma nota de Q (si queda alguna). Notar que en cada iteración se saca un evento del heap, pero no en todas se mete uno nuevo, de forma que la longitud del heap va disminuyendo y por ello la condición de fin del bucle es que no queden eventos en el heap. Antes de comenzar el bucle inicializamos las dos variables que vamos a entregar como salidas. areamin la inicializamos con el valor del área inicial, y en cada iteración del bucle se comparará esta variable con el área actualizada tras cada iteración ( nuevaarea ). epsmin comienza inicializado en cero, pues es el valor de épsilon para el área inicial. Se irá sobreescribiendo cuando corresponda según dicte la comparación entre areamin ynuevaarea. En cada iteración lo primero que haremos será sacar el nodo raíz del heap. Después calculamos el área para el valor de épsilon del evento sacado con la fórmula (2.1) del lemma 1. Con este cálculo estamos en 20 Capítulo 3. Algoritmo e Implementación condiciones de realizar la comparación descrita en el párrafo anterior, llevando así el registro del área mínima y su respectivo épsilon. A continuación, tenemos que averiguar a qué nota de la melodía Q pertenece el épsilon con el que acabamos de trabajar y comprobar si a dicha nota tiene más eventos. En caso afirmativo se mete el siguiente evento en el heap. Por último, queda preparar las variables para la siguiente ejecución del bucle. Esto es, actualizar los sumatorios ponderados por el índice j ( h11 , h22 y h33 ) y las variables areaanterior yepsilonanterior de las que se hace uso en la ecuación (2.1). Código 3.6 Archivo para la actualización y seguimiento de área entre eventos. # Actualizacion y calculo de área import heapq # inicializamos el área mínima como área inicial # while (mientras queden elementos en el heap): # sacar el nodo raíz del heap, # mirar a que segmento de q pertenece el evento que acabamos de sacar, # ver si para dicho segmento quedan eventos que meter en el heap, # en caso afirmativo, meter dicho evento en el heap # para el evento sacado: # recalcular el área # comparar la nueva área con el área mínima # si la nueva es menor sobreescribimos areamin con este nuevo valor # actualizamos las alturas de los rectángulos involucrados en el evento para el próximo evento def actualizar(h, q, areainicial, h11, h22, h33, maxeps): areamin = areainicial areaanterior = areainicial epsilonanterior = 0 epsmin = 0 i=0 ayuda = [] while(h): # recupera es una lista de 3 elementos. el 0 es un valor de epsilon, el 1 es la nota de Q para la que se produce dicho epsilon y el 2 el no ¯ de evento para esa nota recupera = heapq.heappop(h) nuevoepsilon = recupera[0] j = recupera[1] n = recupera[2] # en esta lista hemos guardado toda la info relativa al próximo evento que se producirá en el tiempo(osea, el menos evento siguiente) nuevoevento = q[j].eps[n] nuevaarea = areaanterior+(nuevoepsilon-epsilonanterior)*(h11+h22-h33) ayuda.append([nuevaarea, nuevoevento[1]]) if nuevaarea < areamin: areamin = nuevaarea epsmin = nuevoepsilon if nuevoepsilon == maxeps: 3.4 Explicación detallada del código 21 break # si aún quedan eventos para el segmento del que acabamos de sacar nuevoevento: if len(q[j].eps) > (n+1): heapq.heappush(h, [q[j].eps[n+1][0], q[j].index, n+1]) # preparamos los datos para la siguiente ejecución: areaanterior = nuevaarea epsilonanterior = nuevoepsilon # chequeamos topología para saber como actualizar las alturas if nuevoevento[1] == 0: h11 = h11 h22 = h22-(j+1)*nuevoevento[3]+(j+1)*nuevoevento[5] h33 = h33-(j+1)*nuevoevento[4]+(j+1)*nuevoevento[6] elif nuevoevento[1] == 1: h11 = h11-nuevoevento[3]+nuevoevento[6] h22 = h22-(j+2)*nuevoevento[6]+(j+1)*nuevoevento[5] h33 = h33-(j+1)*nuevoevento[4]+(j)*nuevoevento[3] elif nuevoevento[1] == 2: h11 = h11+nuevoevento[6] h22 = h22-(j+1)*nuevoevento[3]-(j+2) * \ nuevoevento[6]+(j+1)*nuevoevento[5] h33 = h33-(j+1)*nuevoevento[4] elif nuevoevento[1] == 3: h11 = h11-nuevoevento[3] h22 = h22+(j+1)*nuevoevento[5] h33 = h33-(j+1)*nuevoevento[4]+(j) * \ nuevoevento[3]+(j+1)*nuevoevento[6] i += 1 return areamin, epsmin, ayuda 4 Base de datos: Tonás El corpus objeto de estudio en este proyecto está formado por un grupo grabaciones de dos palos flamencos: las deblas y los martinetes, pertenecientes al grupo de las tonás. A continuación, se va a realizar un breve estudio descriptivo sobre dicho grupo y sobre los palos que se van a analizar. El flamenco se nutre de fuentes muy variadas entre las que destaca el repertorio de romances, tonás y otros cantes "a palo seco" (sin acompañamiento de guitarra). La debla y el martinete pertenecen al grupo de las tonás. Toná proviene del término español tonada, que significa “cantable” o “fragmento melódico”. Se cree que muchas de estas tonadas (tonás en andaluz) provienen de antiguos romances y son partes desgajadas de los mismos que se conservan en la memoria del pueblo. Otros estilos que pertenecen al grupo de las tonás son las carceleras, la debla y la matriz, la gama de las tonás. El concepto de tonás no fue bien definido en el cante flamenco hasta la obra de Ricardo Molina y Antonio Mairena “Mundo y formas del Cante Flamenco” [ 16 ]. Hasta ese momento, estos cantes se denominaban como martinetes, en el caso de Jerez, Cádiz o Málaga; como tonás; indistintamente como martinetes o tonás en Triana y El Puerto; o reservando el nombre de martinete a alguna de sus variedades y llamando tonás al resto. A principios del s. XX el nombre de toná cae en desuso y en los discos de pizarra no aparece la palabra toná, pero sí martinete y, a veces, carcelera. En este contexto, el prestigio del que goza Antonio Mairena influye en que se adopte su propuesta relativa al concepto y la denominación de toná de modo generalizado. Molina y Mairena definen la toná como coplas de cuatro versos octosílabos, rimados los pares de forma asonante e interpretadas a capella, sin acompañamiento de guitarra y sin marcar externamente el compás con palmas, bastón o pié. Algunos de los cantes con estas características tienen una denominación específica, como es el caso de los martinetes y las deblas. El nombre de carceleras, en cambio, puede aplicarse igual, a un estilo determinado de toná que a martinetes con letras de contenido alusivo a la vida en prisión. Para Molina y Mairena el cante por tonás es el género, y los martinetes y deblas las variedades o especies de tonás. En la actualidad se conservan varios tipos de martinetes, destacando el conocido como “martinete trianero”, desarrollado en los ambientes fragueros del barrio de Triana, Sevilla, que será el estilo elegido aquí para su estudio. Al contrario que las tonás, que usan como tonalidad la cadencia andaluza, los martinetes se realizan en tono mayor. Con respecto al ritmo, se cantan, como todas las tonás, sin un compás determinado. Sin embargo, Antonio Ruiz El Bailarín realizó una versión bailable eligiendo el compás de la seguiriya para realizarlo y desde entonces se ha generalizado la interpretación del martinete sobre este metro rítmico. Finalmente, respecto a la copla, es una cuarteta octosílaba (romance) y se canta sin repetición de ningún verso o con repeticiones cuando se hace redoblado. Suele iniciarse el martinete con un onomatopéyico trantran, imitando el sonido del martillo sobre el yunque. Para una descripción más profunda de algunos cantes del grupo de tonás, se pueden consultar los trabajos [12], [5] y [18]. 23 24 Capítulo 4. Base de datos: Tonás 4.1 Los cantes por tonás para un estudio computacional Quizá sean los cantes por tonás de los cantes que ofrecen más dificultades a la hora de estudiarlos computacionalmente, debido a que las diferentes variedades existentes dependen más de la idiosincrasia del cantaor que de variables locales o de estructuras musicológicas bien definidas. La inexistencia del armazón armónico proporcionado por la guitarra y las irregularidades de afinación de muchos intérpretes entorpecen la identificación de los modos musicales y otro tanto cabe decir de una estructura rítmica que va ad libitum el intérprete puede variar el tempo, la velocidad a la que interpreta el cante, como lo desee. Por todo ello, muchos aficionados consideran que representan la esencia del cante flamenco. Las tonás son cantes a capella, sin instrumentación, en algunos casos con alguna percusión tales como nudillos o golpes de martillo en el caso de martinetes, en el argot flamenco son denominados cantes a palo seco. Tradicionalmente se les ha considerado cantes de las fraguas. En efecto, algunos intérpretes históricos han sido herreros, y ciertas letras aluden a las labores de fragua. Lo mismo ocurre con las letras de tema carcelario, que justifican la denominación de carceleras que reciben algunas de las tonás. La casi total ausencia de grabaciones de tonás en cilindros y discos de pizarra influye en las dificultades para su estudio. De los 5.500 títulos de la discografía en 78 rpm recogida en el Diccionario Enciclopédico Ilustrado del Flamenco de Blas Vega y Ríos Ruiz solo hay 6 grabaciones de tonás, realizadas entre 1922 y 1933 por Centeno, Tenazas, Cepero, El Gloria, Mazaco y El Cuacua. Esto confirma lo dicho por Demófilo [14] sobre el olvido en que habían caído estos cantes. Sobre el número de tipos diferentes de tonás existentes se ha hablado mucho, y existen diferentes versiones. Por citar un ejemplo, Demófilo [ 14 ] enumera treinta y un tipos diferentes. Pierre Lefranc [ 12 ], sin embargo, identifica catorce. El repertorio de tonás diferentes merece un estudio independiente, que permita una clasificación basada más en criterios musicológicos que de filiación, local o de atribución, como hasta ahora se ha hecho. A grandes rasgos, dentro del género de las tonás pueden distinguirse los siguientes cantes diferenciados: •Martinetes •Carceleras •Deblas •Saetas •Tonás propiamente dichas Conviene indicar que el grupo de las saetas presenta características que pueden aconsejar estudiarlas de manera independiente al resto de tonás. Para un estudio musicológico de las saetas se puede consultar [ 11 ], [ 3 ], [ 17 ]. Respecto al grupo de tonás propiamente dichas, se define por exclusión: pertenecen a él los cantes que no se incluyen dentro de algunos de los grupos restantes. 4.2 Descripción y características musicales: debla y martinete Para nuestro estudio se van a seleccionar dos estilos dentro del grupo tonás: la debla que popularizó Tomás Pavón y el martinete trianero conocido como “martinete de Juan Pelao de Triana”. Un estudio musicológico de estos cantes se puede consultar en el trabajo [ 18 ]. Hacemos a continuación un breve resumen de dicho artículo. •DEBLAS : La debla es una variante o especie de las tonás. En general, se caracteriza por su gran ornamentación melismática, más abrupta que el resto de las canciones de este estilo, que hace muy exclusiva su melodía. Las deblas se caracterizan por un contorno melódico en particular. La versión actual de la debla se debe a una aportación de Tomás Pabón en 1948, que la había aprendido de su suegro Antonio El Baboso. Es indudable que se trata de una toná trianera, pero algunos clásicos dudan que fuera la verdadera debla de la que hablaba Demófilo [14]. 4.2 Descripción y características musicales: debla y martinete 25 La letra que graba Pabón y que se ha difundido es insustancial. Ha sido modificada primero por Antonio Mairena y después por otros cantaores para hacer alusiones a persecuciones sufridas por los gitanos o a figuras trianeras legendarias. Como otras tonás, se trata de un cante de cuatro versos que sigue el esquema 8-/8a/8- /8a. Seguramente por influjo de las características vocales de Pabón, este cante se presta a la aparición de melismas abundantes y prolongados, ejecutados con pocas respiraciones. Las variables musicales que caracterizan las diferentes variantes dentro del estilo debla son las siguientes según el trabajo [18]: I Comienzo por la palabra ¡Ay!: ¡Ay! es una interjección de dolor, característica de fuerte idiosincrasia en la música flamenca. II Vinculación de ¡Ay! con el resto de los versos: El ¡Ay! inicial puede ser unido con el resto de los versos o simplemente separado de ellos. III La nota inicial: Hace referencia a la primera nota del terceto. Normalmente es el sexto grado de la escala (VI), aunque también puede aparecer el quinto (V). IV Tendencia de la melodía en el primer hemistiquio: (un hemistiquio es la mitad o el fragmen- to de un verso, dividido por una pausa en la entonación) La tendencia puede ser ascendente (appoggiatura rápida en V, a continuación, la progresión VI-IV), simétrica (III-VI-IV) o ascendente. V Repetición del primer hemistiquio: La repetición puede ser del hemistiquio completo o de parte de él. VI Cesura: La cesura (del latín caesura: cortadura) es el espacio o pausa dentro de un verso separando dos partes. VII Tendencia de la melodía en el segundo hemistiquio: La tendencia se define igual que el primer hemistiquio. VIII Mayor grado en el segundo hemistiquio: Es el grado más alto encontrado en el segundo hemistiquio. Por lo general, se alcanza el séptimo grado, aunque pueden aparecer quinto y sexto grado. •MARTINETES : Como se ha visto antes, los martinetes también son considerados una variante de las tonás. Se diferencian de las deblas en la temática de sus letras y en su estructura melódica que siempre termina en modo mayor. La temática de las deblas es usualmente triste, cantadas sin acompañamiento de guitarra, como el resto de tonás. Sin embargo, los martinetes se suelen acompañar con el sonido de un martillo golpeando un yunque. Los aspectos musicales que caracterizan el martinete trianero [18] son: IRepetición del primer hemistiquio: Como en las deblas, la repetición puede ser completa o parcial. II Clivis/flexa (movimiento alto/bajo) en el final del primer hemistiquio: Normalmente, caída IV-III o IV-IIIb. El final más común para un terceto es el cuarto grado, cuyo sonido es sostenido hasta alcanzar la cesura. Algunos cantes utilizan a modo de cierre el III o IIIb. III Uso del mayor grado en los dos hemistiquios: La práctica habitual es llegar hasta el cuarto grado, y algunos cantantes llegan al quinto grado. IV Nota final del segundo hemistiquio: El segundo hemistiquio termina cayendo al segundo grado. Se eligen estos dos estilos porque tienen un contorno melódico claramente diferenciado como se puede ver en la transcripción de la Figura 7. Por tanto, estamos abordando un estudio inter-estilo, esto es, definiendo una medida de similitud que discrimina estilos diferentes de cantes. En otros contextos, estudios intra-estilo, podríamos estudiar las distintas variantes de martinetes que interpretan distintos cantaores. Una alternativa sería diseñar medidas de similitud combinadas en las que se involucra además del contorno melódico otras otros parámetros de carácter musical, como se propone en el artículo [18]. 32 Capítulo 5. Experimentos def exclude_pabon_and_mairena(): references_array = [] # el metodo .drop para quitar la primera columna/fila? for path_name in glob.glob("./DB_files/deblas/*.csv"): if (’TPabon’ not in path_name) and (’AMairena’ not in path_name): references_array.append(pd.read_csv( path_name, names=["inicio", "duracion", "tono", path_name]).drop ([0], axis=0)) return references_array def all_deblas(): references_array = [] for path_name in glob.glob("./DB_files/deblas/*.csv"): references_array.append(pd.read_csv( path_name, names=["inicio", "duracion", "tono", path_name]).drop ([0], axis=0)) return references_array def all_martinetes(): references_array = [] # el metodo .drop para quitar la primera columna/fila? for path_name in glob.glob("./DB_files/martinetes/*.csv"): references_array.append(pd.read_csv( path_name, names=["inicio", "duracion", "tono", path_name]).drop ([0], axis=0)) return references_array En este script encontramos la función d f rame , la cual crea la lista tr cuyos elementos son objetos tipo data f rame y cada uno de estos objetos se corresponde a una melodía. Estos objetos se han creado a partir de un archivo .csv del corpus tonás, y por cómo están estructurados los datos no están preparados para poder aplicarle el algoritmo directamente. Va a ser necesario convertir la tipología de cada uno de los datos, ya que estos están insertados como si fueran cadenas de caracteres en vez de floats. Además será necesario desplazar toda la melodía, nota a nota, para que el comienzo del cante de las deblas y martinetes empiecen en el instante cero ya que muchas de las transcripciones tienen un silencio previo al comienzo del cante. Por último será necesario añadir notas nuevas a la melodía. Esto se debe a que el corpus objeto de estudio no contempla los silencios como notas, por lo tanto será necesario añadir notas con un pitch de 0dB con la longitud del espacio que exista entre dos notas consecutivas en la que una no empiece en el mismo instante de tiempo en el que acabó la anterior. A continuación vamos a aplicarle el algoritmo usando como consulta la debla de Tomás Pavón y contrastarla con el dataset de deblas. 5.2.1 Experimento 1: Clasificación de las deblas según su escuela Tomás Pavón y Antonio Mairena fueron dos grandes cantaores flamencos del siglo XX con una influencia en el género indiscutible. En la siguente tabla (5.1) puede observarse una clasificación de las deblas registradas 5.2 Probando el algoritmo con la base de datos 33 en la base de datos según se parezca más a la debla cantada por Tomás Pavón o por Antonio Mairena para valorar la influencia de estos dos artistas. Tabla 5.1 Clasificación de las deblas según su similitud al estilo de Tomás Pavón o Antonio Mairena. Más similares a Tomás Pavón Más similares a Antonio Mairena Naranjito TalegondeCordoba JHeredia Turronero Chocolate RafaelRomeroElGallina JAlmaden ChanoLobato PdeLucia JMerce MSimon MVargas DiegoClavel Como puede observarse en la tabla 5.1, la influencia de Tomás Pavón fue mayor que la de Antonio Mairena, no por ello quitar mérito al legado de Mairena. En la tabla (5.2) se listan el conjunto de deblas de la base de datos ordenadas por similitud a cada uno de los dos artistas (de más parecidas a menos parecidas) junto con el valor del área mínima entre las dos deblas. Tabla 5.2 Lista de áreas mínimas de deblas ordenadas de más a menos parecidas para los maestros Tomás Pabón y Antonio Mairena. Órden de similitud a Tomás Pavón Órden de similitud a Antonio Mairena Nombre Área mínima Nombre Área mínima ChanoLobato 175.996 RafaelRomeroElGallina 316.651 DiegoClavel 233.203 ChanoLobato 333.954 MSimon 234.062 DiegoClavel 373.511 JAlmaden 244.288 Chocolate 385.568 JMerce 244.417 PdeLucia 385.859 PdeLucia 260.604 JMerce 390.645 Chocolate 283.834 JHeredia 403.098 Naranjito 302.860 Naranjito 418.298 JHeredia 361.878 Turronero 424.494 RafaelRomeroElGallina 410.94 JAlmaden 436.779 Turronero 425.660 MSimon 462.328 MVargas 507.174 TalegondeCordoba 509.092 TalegondeCordoba 569.778 MVargas 511.022 En la figura 5.5 se muestra la representación gráfica de los contornos melódicos de la deblas cantadas por Tomás Pavón y por Diego Clavel, antes de aplicarle el algoritmo de escalado para minimizar el área entre los contornos melódicos. Como se observa la deblas de Diego Clavel es más larga que la de Tomás Pavón, por lo que escalaremos linealmente la debla de Pavón. En la figura 5.6 vemos en más detalle los 7 primeros segundos de las deblas de Pavón y Diego Clavel una vez escalada la debla de menor duración al épsilon que minimiza el área entre los dos contornos melódicos. En este tramo puede apreciarse bastante bien la similitud entre los contornos melódicos de estas dos deblas. 5.2.2 Experimento 2: Comparación de deblas Para este experimento vamos coger el conjunto de deblas y vamos a aplicarle el algoritmo a cada una de los elementos que la componen, contrastándolas con el resto de deblas de la base de datos. De esta manera generamos una matriz de distancias en las que ambos ejes de la matriz corresponden al listado de deblas y cada celda de la matriz corresponde al área mínima entre las dos deblas correspondiente a sus índices. 34 Capítulo 5. Experimentos Figura 5.5 Representación de los contornos melódicos de las deblas de Tomás Pavón y Diego Clavel. Figura 5.6 Detalle de la primera frase de las deblas de Tomás Pavón y Diego Clavel tras escalar la debla de Tomás Pavón al épsilon que minimiza el área. Obtenemos así la matriz de distancias, matriz simétrica que contiene números reales no negativos como elementos, y a partir de la cual podemos generar el mapa de calor de la figura 5.7 A la luz del mapa de calor de la figura 5.7, donde se representa el grado de similitud según intensidad de color, parece que las dos deblas más parecidas son la de ChanoLobato y la de JAlmaden. Vemos también cómo la debla más parecida a la de Tomás Pavón es la debla de Chano Lobato, tal y como veíamos en el experimento 1. Se aprecia también la similitud entre los cantes de Pavón y de Mairena. Las deblas que más distan, es decir, las menos similares parecen ser las de Diego Clavel y la de Talegón de Cordoba. 5.2.3 Experimento 3: Comparación de martinetes Este experimento es totalmente análogo al anterior, con la salvedad de que esta vez usaremos los martinetes del corpus de tonás en vez de las deblas. De este modo, generamos de nuevo una matriz de distancias al comparar todos los martinertes entre sí y generamos un mapa de calor (figura 5.8) a partir de la matriz de distancias. Gracias a que la muestra de martinetes es bastante mayor que la de deblas, nos permite observar en el mapa de calor de la figura 5.8 muchos más pares de canciones mucho más similares entre sí.Por destacar algunos vemos celdas muy oscuras (es decir, martinetes muy similares) como son la de El Torta con la de Tía Anica la Piriniaca o la de Miguel Vargas con la de Juan Talega. Vemos también cómo las líneas horizontal y vertical correspondientes al martinete de Manuel Agujetas son de un color muy claro, es decir, es bastante distinta de cualquier otro martinete, por tener un estilo muy propio. 5.2 Probando el algoritmo con la base de datos 35 Figura 5.7 Mapa de calor de la matriz de distancias de deblas. Figura 5.8 Mapa de calor de la matriz de distancias de los martinetes. 5.2.4 Experimento 4: Deblas y martinetes, comparativa de toda la base de datos En esta ocasión vamos a tomar los subconjuntos de deblas y martinetes y vamos a comparar todas las melodías entre sí, generando una matriz de distancias y el mapa de calor asociado con todas las canciones que componen la base de datos del corpus de tonás (figura 5.9) . En las figuras 5.9 y 5.10 pueden observarse la existencia de 3 regiones ligeramente diferenciadas por la intensidad de colores del mapa de calor. El sector de arriba a la izquierda de la figura 5.10 corresponde con el subconjunto de deblas, que al ser más parecidas entre sí se ven de un color más oscuro. A su vez, el sector de abajo a la derecha de la figura 5.10 también se muestra de un color más oscuro al tratarse de la región correspondiente al subconjunto de martienetes, también más parecidos entre sí. Sin embargo, en el rectángulo de abajo a la izquierda tiene una intensidad de color más clara, correspondiendo a la región en la que se están comparando deblas con martientes, menos parecidos entre sí, reflejando así que parece existir una separación entre estos dos estilos, lo que muestra que, además de las tareas de búsqueda por escalado, 36 Capítulo 5. Experimentos Figura 5.9 Mapa de calor de la matriz de distancias de toda la base de datos(deblas y martinetes). nuestro método también podría usarse para clasificación de estilos, aunque para esto habría que hacer un estudio más elaborado que caería fuera del objetivo de este trabajo. Figura 5.10 Separación de regiones de deblas y martinetes en el apa de calor de la matriz de distancias de toda la base de datos. 5.3 Comparativa de coste computacional La aplicación de técnicas geométricas en sistemas de recuperación de información musical ha sido ampliamente utilizado como vimos en el capítulo introductorio. Sin embargo uno de los problemas de las técnicas geométricas es su coste compuacional, por ello el algoritmo propuesto para el problema de escalado supone una buena mejoría del tiempo de cómputo y por tanto de la eficiencia del mismo con respecto a otros 5.3 Comparativa de coste computacional 37 algoritmos propuesto anteriormente. En esta sección vamos a comparar el tiempo de computo que supone realizar los experimentos del capítulo anterior aplicando el algoritmo implementado con respecto a un algoritmo exhaustivo que recalcula las áreas en cada evento. Este segundo algoritmo es el descrito en la sección 5.1.3 (ver código 5.2) que se utilizó para comprobar los resultados calculados con el algoritmo eficiente. Más concretamente vamos a realizar esta comparativa para los experimentos de: aplicación del algoritmo de escalado lineal a dos melodías (tabla 5.3), clasificación de deblas según similitud a Tomás Pavón y Antonio Mairena (tabla 5.4), cálculo de la matriz de distancias del subconjunto de deblas (tabla 5.5), cálculo de la matriz de distancias del subconjunto de martinetes (tabla 5.6) y cálculo de la matriz de distancias del corpus de tonás (tabla 5.7). Tabla 5.3 Comparativa de tiempos para el experimento de comparación de dos melodías. Algoritmo Tiempo Eficiente 0.004072109858194987 No eficiente 0.07136336962381998667 Tabla 5.4 Comparativa de tiempos para el experimento de clasificación de deblas según su escuela. Algoritmo Tiempo Eficiente 0.43394931157430012 No eficiente 5.058680772781372 Tabla 5.5 Comparativa de tiempos para el experimento de comparación de todas las deblas entre sí. Algoritmo Tiempo Eficiente 2.2145053545633951333 No eficiente 20.599667231241862 Tabla 5.6 Comparativa de tiempos para el experimento de comparación de todas los martinetes entre sí. Algoritmo Tiempo Eficiente 12.608126401901245 No eficiente 103.64595588048299333 En cada una de estas tablas pueden observarse los tiempos que tardó en ejecutarse cada uno de los dos algoritmos, el desarrollado e implementado en este trabajo y un algoritmo exchaustivo que recalcula el área en cada evento. Para el experimento de aplicación del algoritmo de escalado lineal a dos melodía se ha sacado una media tras comparar dos a dos la debla de Tomás Pavón con el resto de deblas del corpus de tonás. Las conclusiones que podemos extraer de estas tablas se discuten en la tabla final de resultados (tabla 6.1) del capítulo 6. 38 Capítulo 5. Experimentos Tabla 5.7 Comparativa de tiempos para el experimento de comparación de todo el corpus de tonás. Algoritmo Tiempo Eficiente 23.251962661743164 No eficiente 269.84739510218302667 6 Conclusiones y trabajo futuro La música flamenca es un arte milenario que puede verse profundamente beneficiado de ser estudiado con rigor desde las matemáticas y la computación. El presente documento supone un pequeño ejemplo del trabajo que puede realizarse en pos de preservar y popularizar el flamenco haciendo uso de la ciencia y la tecnología. A las vista de los resultados obtenidos en los experimentos realizados en el capítulo 5 se pueden extraer como resumen tres ideas principales: • El algoritmo propuesto supone una notable mejoría de la eficiencia de la complejidad computacional respecto a un algoritmo de exhaustivo de escalado. • El problema de similitud geométrica en el escalado lineal puede usarse para distintas aplicaciones: operaciones de consulta comparando dos melodías, clasificación por escuelas o clasificación por estilos, siendo quizás esta última en la que menos rendimiento se observa. • El escalado lineal disminuye considerablemente la medida de similitud entre dos cantes, lo que indica que es una técnica indicada para detectar versiones de una misma canción. A continuación desarrollamos un poco estos aspectos. 6.1 Eficiencia computacional En los 4 exeperimentos en los que se ha evaluado el tiempo de cómputo, la aplicación del algoritmo propuesto frente a un algoritmo de fuerza bruta ha supuesto una mejoría considerable, reduciendo el tiempo de cómputo notablemente tal y como refleja la tabla 6.1 Tabla 6.1 Tiempo medio de cómputo de cada algoritmo para diferentes experimentos. Experimento Algoritmo Eficiente No eficiente Comparación de dos melodías 0.004072109858194987 0.07136336962381998667 Clasificación en las escuelas de Pavón o Mairena 0.43394931157430012 5.058680772781372 Comparación de todas las deblas entre sí 2.2145053545633951333 20.599667231241862 Comparación de todas los martinetes entre sí 12.608126401901245 103.64595588048299333 Comparación de todas la base de datos entre sí 23.251962661743164 269.84739510218302667 Esto supone una reducción del tiempo de cómputo del 94.29% al comparar dos melodías sueltas, un 91.42% en la clasificación de las deblas en las escuelas de Tomás Pavón o Antonio Mairena, un 89.25% en la comparación de todas las deblas entre sí, un 87.83% al comparar todos los martinetes entre sí y un 91.38% al comparar toda corpus de deblas y martinetes entre sí, lo que supone un autentico éxito de cara a optimizar recursos de tiempo y memoria al aplicar este algoritmo para resolver el problema de escalado lineal a dos melodías. 39 40 Capítulo 6. Conclusiones y trabajo futuro 6.2 Clasificación de melodías entre deblas y martinetes El flameco es un arte vivo y en constante cambio, con distintas interpretaciones de un mismo cante y con numerosas ornamentaciones e improvisaciones propias de cada cantaor. Esto supone una dificultad a la hora de tratar el problema de clasificación musical desde una perspectiva puramente geométrica y se requiere incluir en el método algorítmico aspectos músico-culturales propios de los cantes en cuestión. En el mapa de calor de la figura 5.9 se muestra una visualización de la similitud entre melodías a partir de la matriz de distancias generada tras comparar al completo el corpus de tonás. Aunque parece existir regiones ligeramente diferenciadas, no parece ser una diferenciación lo suficientemente conclusoria como para clasificar tonás en los subestilos de deblas y martinetes. Concluimos por tanto que abordar geométricamente la clasificación de tonás entre deblas y martinetes puede suponer un complemento para dicha clasificación, pero no un resultado concluyente. 6.3 Aplicación de consulta entre melodías En las imágenes 5.5 y 5.6 de la sección 5 veíamos la similitud de los contornos melódicos entre dos deblas muy parecidas (la de Tomás Pavón y la de Diego Clavel). En la tabla 6.2 tomamos la debla de Tomás Pavón y la comparamos con el resto de deblas. El resultado mostrado es la diferencia entre el valor del área antes de que la melodía de consulta sea escalada con el área mínima tras aplicarle el algoritmo de escalado y escalarla un épsilon que minimiza el área. De este modo podemos tener una referencia de cuánto cambia la debla tras aplicarle el algoritmo: Tabla 6.2 Diferencia entre el área inicial y el área mínima tras comparar la debla de Tomás Pavón con el resto de deblas. Debla de TPavon contrastado con areainicial - areamin Naranjito 302.86059 - 302.8605 = 1.6672402e-08 JHeredia 363.822780 - 361.8780 = 1.9446 Chocolate 285.398988 - 283.8347 = 1.56424 JAlmaden 368.34848 - 244.2887 = 124.0596 ChanoLobato 335.309820 - 175.9965 = 159.3133 TalegondeCordoba 569.79608 - 569.7780 = 0.01807201 PdeLucia 344.199635 - 260.6047 = 83.5949 JMerce 378.52967 - 244.4174 = 134.112 MSimon 247.24796 - 234.0625 = 13.18545 MVargas 528.1233 - 507.1743 = 20.94892 DiegoClavel 245.501236 - 233.2030 = 12.29821 Turronero 524.53528 - 425.6602 = 98.8749 RafaelRomeroElGallina 426.775571 - 410.948 = 15.8275 En la tabla 6.2 podemos apreciar que hay ocasiones en las que apenas es necesario escalar la melodía para encontrar el área de máxima similitud, pero existen muchos otros casos en los que hay que modificar mucho la melodía original para maximizar la similitud entre las melodía de consulta y de referencia (como son los casos de J. Almaden o J. Merce, por ejemplo). Gracias a aplicarle el algoritmo a este tipo de situaciones podemos identificar que dos melodías que a priori parecían muy distintas, en realidad sean muy parecidas pero que una esté cantada mucho más lenta que la otra por ejemplo. Por tanto, cocluimos que aplicar el algoritmo parece dar muy buenos resultados para situaciones en las que hay dos tonás que son muy parecidas en cuanto a la forma de su perfil melódico pero la ejecución de los cantes están realizados a tempos distintos. 6.4 Trabajo futuro Aún queda mucho por hacer en el campo de la teoría computacional de la música flamenca que ha comenzado a desarrollar el proyecto Cofla. Algunas sugerencias que continuen la senda de este proyecto pueden ser: 6.4 Trabajo futuro 41 • Probar si se obtienen mejores resultados probando un escalado específico para cada nota en lugar de un escalado lineal para toda la melodía en su conjunto. • Complementar la clasificación de deblas y martinetes con técnicas melódicas además de geométricas. • Aplicación del algoritmo de escalado lineal geométrico para el estudio de otros palos e incluso de otros géneros musicales. •Ampliación del corpus de deblas y martinetes para poner a prueba de nuevo el algoritmo propuesto. Bibliografía [1] G. Aloupis, T. Fevens, S. Langerman, T. Matsui, A. Mesa, Y. Nunez, D. Rappaport, and G. Toussaint, Algorithms for computing geometric measures of melodic similarity, Computer Music Journal 30 (2006), no. 3, 67–76. [2] B. Bartók and B Lord, Texts and transcriptions of 75 folk songs from the milman parry collection, and a morphology of serbo croatian folk melodies, Columbia University Press, 1951. [3] M. A. Berlanga et al., Música y religiosidad popular: Saetas y misereres en la semana santa andaluza, (2001). [4] L.E. Caraballo, J.M. Díaz-Báñez, F. Rodríguez, V. Sánchez-Canales, and I. Ventura, Scaling and compressing melodies using geometric similarity measures, Proc. European Workshop on Computational Geometry, EuroCG 2020. [5] G. Castro, Las mudanzas del cante en tiempos de silverio, análisis histórico, vol. 4, Primento, 2014. [6] C. Cronin, Concepts of melodic similarity in music copyright infringement suits, Computing in musicology: a directory of research, 1998. [7] E. Gómez and C. López, Criterios para la transcripción manual de la colección de tonás, Barcelona, 2013. [8] U. Hahn, N. Chater, and L. B. Richardson, Similarity as transformation, Cognition 87 (2003), no. 1, 1–32. [9] I. Halmos, Computational ethnomusicology in hungary in 1978, University of Michigan Library, 1978. [10] A. Holzapfel and Y. Stylianou, Similarity methods for computational ethnomusicology, Unpublished doctoral dissertation). University of Crete, Crete (2010). [11] C. Kramer and L. J. Plenckers, The structure of the saeta flamenca: An analytical study of its music. yearbook for traditional music, 1998. [12] P. Lefranc, El cante jondo: del territorio a los repertorios: tonás, siguiriyas, soleares, vol. 16, Universidad de Sevilla, 2000. [13] F. Lerdahl and R. S. Jackendoff, A generative theory of tonal music, reissue, with a new preface, MIT press, 1996. [14] Machado and A. Álvarez, Colección de cantes flamencos recogidos y anotados por a. sevilla: El porvenir, reedited Madrid: Cultura Hispinica, 1975, 1881. [15] D. O. Maidín, A geometrical algorithm for melodic difference, Computing in musicology: a directory of research (1998), no. 11, 65–72. [16] R. Molina and A. Mairena, Mundo y formas del cante flamenco, Revista de Occidente (1963). 49 50 Bibliografía [17] J. Mora, F. Gómez, E. Gómez, and J. M. Díaz-Báñez, Melodic contour and mid-level global features applied to the analysis of flamenco cantes, Journal of New Music Research 45 (2016), no. 2, 145–159. [18] J. Mora, F. Gómez, E. Gómez, F. Escobar-Borrego, and J. M. Díaz-Báñez, Characterization and melodic similarity of a cappella flamenco cantes, Proceedings of ISMIR, 2010, pp. 9–13. [19] S. Seeger, Versions and variants of the tunes of “barbara allen”, Selected Reports in Ethnomusicology, 1966. [20] G. Tzanetakis, A. Kapur, W. A. Schloss, and M. Wright, Computational ethnomusicology, Journal of interdisciplinary music studies 1(2007), no. 2, 1–24.