Universidad de Costa Rica Facultad de Ingenierı́a Escuela de Ingenierı́a Eléctrica Algoritmo de detección de escalas musicales para violı́n. Por: Mauricio Campos Salas Ciudad Universitaria “Rodrigo Facio”, Costa Rica Diciembre de 2014 Algoritmo de detección de escalas musicales para violı́n. Por: Mauricio Campos Salas IE-0499 Proyecto eléctrico Aprobado por el Tribunal: Ing.Gustavo Núñez Segura Profesor guı́a Ing. Teodoro Willink Castro Profesor lector Ing. Osvaldo Fernández Cascante Profesor lector Resumen El objetivo general del presente trabajo fue el desarrollar un algoritmo que permitiera, dado un archivo de audio interpretado en violı́n, el reconocimiento de la escala o escalas musicales relacionados directamente con las notas ejectudas. A pesar de la existencia de varios programas que permiten reconocimiento de notas, el presente proyecto pretende introducir más conceptos musicales, abarcar más generalmente desde el punto de vista ingenieril y musical un extracto de audio, como por ejemplo su señal en el tiempo y el reconocimiento de escalas. De esta manera se creó un algoritmo que permitió la lectura del archivo y a partir de esto se obtuvo la señal en el tiempo y consecuentemente la transformada rápida de Fourier de la señal. Al realizarse el análisis en la frecuencia, se crearon ventanas para identificar las distintas notas musicales ejecutables por un violinista. Al crearse las ventanas se pudo extraer las magnitudes máximas encontradas y con esto verificar si se trataba de la ejecución de una nota o de ruido producido por el entorno de la grabación del archivo. Luego se crearon los distintos patrones de las escalas musicales, para ası́ agrupar en uno, alguno o ningún grupo el conjunto de notas musicales reconocido. Por último se creó una interfaz gráfica que permitiera al usuario ejecutar el algoritmo, obteniendo a partir de esta la señal en el tiempo, la transformada rápida de Fourier de la señal, las notas musicales ejectudas y la o las escalas a las que este conjunto de notas musicales pertenece. Se logró implementar correctamente el algoritmo para extractos de una duración cercana a los 10 segundos, con esto es posible eventualmente realizar análisis en el tiempo que permita el estudio de otros ámbitos relacionados tanto con la música como con la ingenierı́a. v Índice general Índice de figuras viii Índice de cuadros ix Nomenclatura xi 1 Introducción 1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Metodologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Alcance del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 2 Desarrollo teórico 2.1 Teorı́a Musical . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Procesamiento de señales . . . . . . . . . . . . . . . . . . . . . 2.3 Funciones utilizadas en MATLAB . . . . . . . . . . . . . . . . . 5 5 9 12 3 Desarrollo del algoritmo 3.1 Análisis en el dominio del tiempo . . . . 3.2 Análisis en el dominio de la frecuencia . 3.3 Recorrido por las frecuencias . . . . . . 3.4 Banderas de las frecuencias . . . . . . . 3.5 Reconocimiento de Escalas . . . . . . . 3.6 Interfaz de usuario en GUI de MATLAB 15 16 17 18 19 21 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Conclusiones y recomendaciones 27 4.1 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2 Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Bibliografı́a 29 A Documentación 31 vii Índice de figuras 2.1 Espectro de potencia de una señal continua periódica (John G. Proakis, 1996). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 Diagrama de contenido del proyecto. . . . . . . . . . . . . . . . . . Señal en el tiempo del archivo en Do Mayor. . . . . . . . . . . . . Transformada rápida de Fourier del archivo en Do mayor. . . . . . Transformada rápida de Fourier del archivo en La menor armónico. Espectro de potencia de la nota LA con frecuencia central en 440.5Hz. Creación de la matriz z. . . . . . . . . . . . . . . . . . . . . . . . . Recorrido de rango de frecuencias de Sol1. . . . . . . . . . . . . . . Valor mı́nimo de amplitud. . . . . . . . . . . . . . . . . . . . . . . Archivo .fig de la interfaz de GUIDE. . . . . . . . . . . . . . . . . Interfaz desplegada al darle play al archivo creado. . . . . . . . . . Archivos desplegados al presionar el Push Button SELECCIONE EL ARCHIVO DE AUDIO. . . . . . . . . . . . . . . . . . . . . . . 3.12 Interfaz en ejecución con archivo de audio en Do Mayor. . . . . . . 3.13 Interfaz en ejecución con archivo de audio de disco de Henryk Szeryng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii 15 16 17 18 19 19 20 20 23 25 25 26 26 Índice de cuadros 2.1 2.2 2.3 2.4 Enarmonı́as musicales . . . . . . . . . . . . . . . Intervalos entre notas consecutivas . . . . . . . . Frecuencias de las notas musicales (Macı́as, 2012) Rangos de frecuencias de las notas musicales . . ix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 8 14 Nomenclatura DF T S serie de Fourier en tiempo discreto, del inglés Discrete Fourier Transform. FFT transformada rápida de Fourier, del inglés Fast Fourier transform. b alteración musical correspondiente al bemol. # alteración musical correspondiente al sostenido. xi 1 Introducción Con el fin de evitar el desconocimiento de la teorı́a musical por cuanto al reconocimiento de ciertos elementos especı́ficos, como por ejemplo, los tipos de notas y escalas musicales, se pretende desarrollar un algoritmo que permita, dado un fragmento musical interpretado por un violı́n, ubicar en una escala determinada y de esta forma facilitar el reconocimiento de una tonalidad. Se utilizará el programa MATLAB para implementar y probar el algoritmo, de manera que, a partir de un archivo de audio que contenga el fragmento auditivo, se obtenga información, como la nota o las notas que se reproducieron ” y al comparar con patrones musicales establecidos sobre escalas musicales, determinar a cuál de esas escalas pertenece el fragmento. De esta manera, se pretende un uso pedagógico del algoritmo para la enseñanza del violı́n, sin embargo, es aplicable a los diversos instrumentos orquestales, ya que los rangos utilizados en frecuencia lo permiten. 1 2 1 Introducción 1.1 Objetivos Objetivo General Desarrollar un algoritmo que permita determinar la escala musical utilizada en un fragmento de interpretación de violı́n, con el fin de evitar el desconocimiento de la teorı́a musical por cuanto al reconocimiento de ciertos elementos en música, mediante el desarrollo de un programa en MATLAB. Objetivos Especı́ficos • Analizar, con ayuda de MATLAB, un fragmento de audio interpretado por violı́n, de forma que se pueda determinar la nota musical o notas musicales ejecutadas. • Comparar las notas musicales del fragmento de audio, con las formas de escalas musicales ya definidas. • Crear una interfaz gráfica que permita al usuario la ejecución del algoritmo. 1.2. Metodologı́a 1.2 3 Metodologı́a Para el desarrollo de este proyecto, se efectuó en varias etapas, de manera que cada una permitiera funcionar a la siguiente. Primero, se debió realizar un análisis del espectro armónico de las distintas notas utilizadas en el violı́n. Luego, se formó una base de datos en MATLAB, donde se contiene la información de las distintas escalas musicales a reconocer. Seguidamente, se procedió a hacer las grabaciones de los extractos en violı́n, en un formato de .wav, que luego se procedieron a leer en MATLAB. Una vez contenidos los archivos de audio, se realizó el algoritmo en MATLAB para reconocer la nota musical interpretada en un momento determinado. Luego se amplió el algoritmo para reconocer también, cuando en el archivo hay un cambio en el tiempo de una nota, y hacer un reconocimiento de la nueva. Ası́ sucesivamente hasta terminar con el archivo completo. Por último, al haber hecho el reconocimiento de la totalidad de las notas del archivo, se tomaron los resultados obtenidos, y se compararon con los datos de la base de datos realizada al principio, con lo que se pudo proceder con la detección de escalas musicales. 4 1.3 1 Introducción Alcance del proyecto Se utilizó un archivo de grabación con una extensión de 10 segundos máximo, luego se analizó en MATLAB y por último utilizando el algoritmo desarrollado se logró determinar la escala o las escalas musicales en las cuales se puede clasificar el patrón de notas identificado. Luego, se creó una interfaz que permitiera al usuario manipular el algoritmo por medio de la selección del archivo de audio y que este, automáticamente desplegara la información obtenida. 2 Desarrollo teórico 2.1 Teorı́a Musical Notas, intervalos y alteraciones La distancia que separa a una nota de otra, es conocida como intervalo. El semitono es la distancia (o intervalo) más pequeña entre dos notas musicales reconocida en la música ortiental, puesto que en la música oriental se puede encontrar el cuarto de tono, sin embargo, se remitió a trabajar exclusivamente con lo que se refiere a la música occidental. En el lenguage musical se cuenta con siete notas en su estado natural, estas son en orden: do, re, mi, fa, sol, la y si. Existen dos tipos de alteraciones a estas, que son el sostenido y el bemol. La alteración del sostenido (#) consiste en agregar un semitono a alguna nota en particular, es decir, la hace un semitono más aguda. Por su parte, la alteración del bemol (b) realiza lo contrario al sostenido, le resta un semitono a la nota dada. Es decir, la hace un semitono más grave. En el lenguage musical se llama enarmonı́a a aquellas notas que se escriben de manera diferente pero que suenan igual, las enarmonı́as más comunes, y las utilizadas para este proyecto se muestran en 2.1. Los intervalos entre las Cuadro 2.1: Enarmonı́as musicales Notas Do# - Reb Re# - Mib Fa# - Solb Sol# - Lab La# - Sib notas naturales consecutivas se pueden observar en 2.2. 5 6 2 Desarrollo teórico Cuadro 2.2: Intervalos entre notas consecutivas Notas Do - Re Re - Mi Mi - Fa Fa - Sol Sol - La La - Si Si - Do Intervalo Un tono (dos semitonos) Un tono Un semitono Un tono Un tono Un tono Un semitono Escalas y tonalidades Una escala musical consiste en una sucesión de notas que comienzan y terminan en la misma nota, a esta nota se le llama tónica, y es lo que se denomina el centro tonal. La sucesión de las ocho notas de la escala musical se denomina octava, y la diferencia entre una nota y esta misma una octava más arriba es exactamente el doble de su frecuencia (Isabel Jeremı́as L, 2005). En este proyecto, se tomaron en cuenta 36 escalas, 12 mayores, 12 menores armónicas y 12 menores melódicas, en las que cada una de ellas se conforman de un total de 7 notas consecutivas con patrones distintos. Una tonalidad consiste en un sistema organizado de tonos y semitonos, que da como resultado las dos escalas básicas, la escala mayor y la escala menor. La tonalidad mayor, está basada en la estructura melódica de la escala diatónica (Isabel Jeremı́as L, 2005). El patrón de estas escalas está formado por las siguientes relaciones interválicas: • Tono - Tono - Semitono - Tono - Tono - Tono - Semitono. Ası́, por ejemplo la escala de Re Mayor serı́a: • Re - (Tono) - Mi - (Tono) - Fa # - (Semitono) - Sol - (Tono) - La (Tono) - Si - (Tono) - Do # - (Semitono) - Re. La tonalidad menor por su parte, se basa en la estructura melódica de tres escalas: la escala menor natural, la escala menor melódica y la escala menor armónica (Isabel Jeremı́as L, 2005). Sin embargo, para el proyecto se tomó en consideración la escala menor armónica y la escala menor melódica. La escala menor natural está formada por la siguiente sucesión de intervalos melódicos: 2.1. Teorı́a Musical 7 • Tono - Semitono - Tono - Tono - Semitono - Tono - Tono. De este modo, por ejemplo, la escala de La menor natural serı́a: • La - (Tono) - Si - (Semitono) - Do - (Tono) - Re - (Tono) - Mi - (Semitono) - Fa - (Tono) - Sol - (Tono) - La. La escala menor melódica, tiene la siguiente estructura interválica: • Tono - Semitono - Tono - Tono - Tono - Tono - Semitono. La escala de La menor melódica es: • La - (Tono) - Si - (Semitono) - Do - (Tono) - Re - (Tono) - Mi - (Tono) - Fa# - (Tono) - Sol# - (Semitono) - La. La escala menor armónica, se conforma de la siguiente secuencia de intervalos: • Tono - Semitono - Tono - Tono - Semitono - Tono y medio - Semitono. La escala de La menor armónica es: • La - (Tono) - Si - (Semitono) - Do - (Tono) - Re - (Tono) - Mi - (Semitono) - Fa - (Tono y medio) - Sol# - (Semitono) - La. Frecuencias de las ondas sonoras Actualmente, las notas musicales se definen a partir de la frecuencia de vibración de la onda sonora que esta produce, lo que es conocido como afinación Pitagórica. Matemáticamente se puede expresar la frecuencia (f) de la siguiente manera, v . (2.1) l Donde v es la velocidad del sonido en metros por segundo, y l es la longitud de onda en metros (Tomasini, sf). Las frecuencias que identifican a las ocho notas de la escala son, aproximadamente las mostradas en 2.3. Es importante resaltar que, al doble de la frecuencia de una nota musical especı́fica se le llama una octava por encima, y es por esto que estas dos notas llevarán el mismo nombre. Por ejemplo: la nota La central tiene una frecuencia de 440 Hz, el siguiente La que es una octava f= 8 2 Desarrollo teórico Cuadro 2.3: Frecuencias de las notas musicales (Macı́as, 2012) Nota Do Do#/Reb Re Re#/Mib Mi Fa Fa#/Solb Sol Sol#/Lab La La#/Sib Si Do Frecuencia (Hz) 261.63 277.18 293.66 311.13 329.63 349.23 369.99 392 415.30 440 466.16 493.88 523.26 por encima, tiene una frecuencia de 880 Hz. El ser humano tiene un espectro audible de entre los 20 Hz y los 20 kHz, sin embargo, en música se trabaja con un rango de 27 Hz a 13186 Hz, lo que corresponde a las frecuencias fundamentales de las ondas sonoras de la nota más grave y más aguda del piano. La región más aguda, es decir, de frecuencias mayores (hasta los 20 kHz), es dedicada a los armónicos de los tonos altos, lo que produce el timbre de los distintos instrumentos, por lo que se puede diferenciar uno de otro (Macı́as, 2012). Al ser el violı́n un instrumento de cuerda no temperado, es decir, que cada una de las notas que se interpretan dependen del desarrollo auditivo y fı́sico del ejecutante ya que no hay referencias fı́sicas sobre cada nota, y la afinación depende de la pulsación que se realice sobre la cuerda, se tiene que la afinación no necesariamente va a ser precisa en todos los casos. Por esto, al ser un algoritmo que está dirigido al reconocimiento de escalas musicales en violı́n, se tomarán rangos de frecuencias sobre cada una de las notas, y no ası́ solo la frecuencia central de cada una de ellas. Los rangos utilizados para cada una de las notas, con su respectiva notación en este proyecto son mostrados en 2.4. Cabe resaltar que estos rangos son denotados geométricamente, es decir por distancias Pitagóricas. 2.2. Procesamiento de señales 2.2 9 Procesamiento de señales Cuando se habla de un filtro digital, se trata de un sistema que a partir de una información dada, es capaz de discriminar cierta parte de esta. Generalmente esta discriminación se realiza con base en consideraciones de contenido en frecuencia, sin embargo, se puede discriminar con base en longitud de onda, velocidad, y otros criterios (Danilo, sf). Es importante tomar en cosideración el teorema de la convolución en el análisis de Fourier, este dice que la convolución en el dominio del tiempo equivale a multiplicación en el dominio de la frecuencia. Es decir, la convolución de dos transformadas es igual a la multiplicación de sus transformadas. Esto facilita un poco el trabajo, ya que al aplicarse un filtro a cualquiera de los dos dominios (tiempo o frecuencia), se va a obtener el mismo resultado que con el otro. El tipo de filtro utilizado en el dominio del tiempo se caracteriza por su respuesta impulsiva, es decir, los coeficientes y muestras del filtro. Por su parte, el tipo de filtro utilizado en el dominio de la frecuencia se caracteriza porque tienen en cuenta los espectros de magnitud y de fase, y toma en cuenta conceptos como frecuencia de corte, banda de paso, entre otras (Danilo, sf). 10 2 Desarrollo teórico Análisis frecuencial Espectro de señales continuas periódicas Para este tipo de señales se utiliza el análisis por series de Fourier. Donde, para la señal se utiliza, ∞ X x(t) = ck ejΩ0 kt . (2.2) k=−∞ Luego, para su respectivo análisis se utiliza, Z t0 +Tp ck = x(t)e−jΩ0 kt dt. (2.3) t0 Si la señal tiene potencia media finita Px se sigue que, Px = 1 Tp Z t0 +Tp |x(t)|2 dt = t0 ∞ X |ck |2 . (2.4) k=−∞ Esta última se conoce como relación de Parseval, y afirma que la potencia media de la señal equivale a la suma de potencias medias de sus componentes frecuenciales, también llamados armónicos (Moya, 2011). Se tiene también que la frecuencia fundamental (F0 ) viene dada por, Ω0 (2.5) 2π Por lo tanto, para cada frecuencia kF0 a la gráfica de |ck |2 se le llama densidad espectral de potencia, espectro de densidad de potencia, ó espectro de potencia (Moya, 2011). El diagrama en 2.1 muestra el espectro de potencia para una señal continua periódica. F0 = Figura 2.1: Espectro de potencia de una señal continua periódica (John G. Proakis, 1996). 2.2. Procesamiento de señales 11 Espectro de señales discretas periódicas Una señal discreta periódica, que cuenta con un periodo fundamental N, puede tener componentes en frecuencia distantes unos de otros por ciclos de la siguiente manera, ω= 2π N (2.6) f= 1 N (2.7) O bien, Se representan por los exponenciales complejos armónicamente relacionados por, sk (n) = ej2πkn/N (2.8) Donde se tiene que k = 0,...,N-1. Para la sı́ntesis de la señal se tiene, x(n) = ∞ X ck ej2πln/N . (2.9) k=−∞ Por lo tanto, N −1 X x(n)e−j2πln/N = N cl . (2.10) N −1 1 X x(n)e−j2πln/N . N (2.11) n=0 Donde se tiene que, cl = n=0 Con l=0,...,N-1. Esto se conoce como serie de Fourier en tiempo discreto (DTFS, por sus siglas en inglés). La relación de Parseval en este caso es, N −1 N −1 X 1 X 2 |x(n)| = |ck |2 . N n=0 (2.12) k=0 Por lo tanto, la potencia media de la señal equivale a la suma de las potencias medias de las componentes de frecuencia (Moya, 2011). 12 2.3 2 Desarrollo teórico Funciones utilizadas en MATLAB Al ser el objeto de estudio del proyecto un algoritmo de reconocimiento de escalas musicales en violı́n por medio del uso de MATLAB, se consideraron varias funciones propias del programa para el desarrollo de las distintas etapas del algoritmo, a continuación se mencionan y cómo se utilizan. Función audioread La función [y, F s] = audioread(0 nombredearchivo.tipodearchivo0 ) carga un archivo con algún formato de audio por el arreglo llamado ”nombredearchivo”, y devuelve una tasa de muestras (Fs) en Hertz codificadas en el archivo, además de devolver la tasa de muestras en y (Mathworks, 2014b). Función abs La función Y = abs(X) devuelve el valor absoluto de cada uno de los valores del arreglo de X, donde X puede ser un escalar, un vector, una matriz o un arreglo multidimensional (Mathworks, 2014a). Función fft Las siglas fft se refieren a la Transformada rápida de Fourier (Fast Fourier transform), la función y = f f t(x) devuelve la transformada de Fourier de cada una de las columnas de la matriz X (Mathworks, 2014c). Esto lo realiza utilizando la transformada de Fourier para un vector de longitud N, donde, X(k) = N X (j−1)(k−1) x(j)ωN (2.13) j=1 x(j) = N 1 X X(k)ωN N (2.14) k=1 Donde se tiene que, ωN = e(−2πi/N ) (2.15) 2.3. Funciones utilizadas en MATLAB 13 Función median La función M = median(A), devuelve el valor de la media de todos los valores de las muestras del vector A (Mathworks, 2014a). Función std La función S = std(A), devuelve el valor de la desviación estándar del vector A, esto lo hace de la siguiente forma, n s= 1 X − (xi − x)2 n−1 !( 1 ) 2 (2.16) i=1 Donde s es la desviación estándar y n es el número de muestras del vector A (Mathworks, 2014c). Función msgbox La función h = msgbox(0 M ensaje0 ) crea un mensaje en un cuadrado de texto que inmediatamente envuelve el texto 0 M ensaje0 y lo acomoda de manera apropiada en una figura. El mensaje puede ser un vector string, una matriz string ó un arreglo de celdas (Mathworks, 2014b). GUIDE La herramienta GUIDE (graphical user interface design environment por sus siglas en inglés) (MathWorks, 2014) es un entorno de programación lineal que pertenece a MATLAB, se utiliza especialmente en la realización y ejecución de programas con entrada continua de datos. Posee el mismo tipo de caracterı́sticas de programas visuales como lo es Visual C + + (Guerrero, 2008). 14 2 Desarrollo teórico Cuadro 2.4: Rangos de frecuencias de las notas musicales Nota Sol1 Sol#1 / Lab1 La1 La#1 /Sib1 Si1 Do1 Do#1 / Reb1 Re1 Re#1 / Mib1 Mi1 Fa1 Fa#1 / Solb1 Sol2 Sol#2 / Lab2 La2 La#2 /Sib1 Si2 Do2 Do#2 / Reb2 Re2 Re#2 / Mib2 Mi2 Fa2 Fa#2 / Solb2 Sol3 Sol#3 / Lab3 La3 La#3 /Sib3 Si3 Do3 Do#3 / Reb3 Re3 Rango de frecuencias (Hz) 190.4975 - 201.825 201.825 - 213.825 213.825 - 226.54 226.54 - 240.01 240.01 - 254.285 254.285 - 269.405 269.405 - 285.42 285.42 - 302.395 302.395 - 320.38 320.38 - 339.43 339.43 - 359.61 359.61 - 380.995 380.995 - 403.65 403.65 - 427.65 427.65 - 453.08 453.08 - 480.02 480.02 - 508.57 508.57 - 538.81 538.81 - 570.84 570.84 - 604.79 604.79 - 640.76 640.76 - 678.86 678.86 - 719.22 719.22 - 761.99 761.99 - 807.3 807.3 - 855.3 855.3 - 906.16 906.16 - 960.04 960.04 - 1017.14 1017.14 - 1077.62 1077.62 - 1141.68 1141.68 - 1209.58 3 Desarrollo del algoritmo En este capı́tulo se describe el desarrollo por etapas que tuvo el proyecto, desde el análisis en el tiempo de la grabación, a partir de esto al análisis de frecuencia y por último el algoritmo en sı́ de reconocimiento de las notas y las escalas musicales. La figura3.1 muestra el diagrama de contenido del proyecto, iniciando por el desarrollo del algoritmo paso a paso hasta llegar a la interfaz gráfica. Como primer paso se graba el archivo de audio y se guarda este en la carpe- Figura 3.1: Diagrama de contenido del proyecto. ta donde se contiene el algoritmo. Posteriormente se procede a la lectura del archivo, la reproducción del audio, la obtención de la señal en el tiempo y la señal en la frecuencia. Una vez identificado esto, se procede al reconocimiento de las frecuencias con rangos establecidos, luego las banderas de estas, las cuales se encargaron de colocar en 1 o en 0 si la nota fue interpretada o no, respectivamente. A partir del reconocimiento de las frecuencias se procedió al reconocimiento de las escalas por medio de patrones establecidos musicalmente. Para probar el correcto funcionamiento del algoritmo se continuó con el despliegue de una ventana de texto con el nombre o nombres de las escalas reco15 16 3 Desarrollo del algoritmo nocidas. Con esto se unió todo y se formó una sola función para ser utilizada en GUI de MATLAB y ası́ crear una interfaz gráfica manipulable por el usuario. 3.1 Análisis en el dominio del tiempo Para poder abrir y correr la grabación del archivo de audio utilizando MATLAB, se utilizó la función ’audioread’, la cual permite leer cualquier formato de audio. De esta manera se obtienen las tasas de muestras que se necesitan para el análisis. Además se puede apreciar que la función audioread define la frecuencia de muestreo fs la cual corresponde a 44100 Hz. Una vez cargado el archivo de audio, se creó un arreglo de vectores de tiempo llamado ’t’ el cual tiene pasos de 1/fs , además, tiene una longitud de el tamaño del archivo menos 1, de manera que se garantice que el arreglo tenga el tamaño correcto. Luego, se procedió a graficar en el tiempo el archivo de audio. Esto indica que en el eje x se tiene la información correspondiente a la duración en segundos y en el eje y se tiene la amplitud del archivo de audio. Se utilizó este algoritmo para algunos archivos, a continuación se muestran los resultados. Para el archivo de audio en Do Mayor se obtuvo la señal en el tiempo representada en 3.2. Nótese que el archivo de audio cumple con la especificación de tener una du- Figura 3.2: Señal en el tiempo del archivo en Do Mayor. ración igual o menor a 10 segundos. 3.2. Análisis en el dominio de la frecuencia 3.2 17 Análisis en el dominio de la frecuencia Una vez analizado en el tiempo, se creó una variable ’n’ de manera que tuviera la extensión del audio menos 1. A partir de la definición de ’n’ se definió el arreglo de vectores en frecuencia, de forma que fuera de 0 hasta fs en pasos de fs/n. Luego se aplica al archivo de audio la transformada rápida de Fourier junto con el valor absoluto de esta, de manera que se pueda trabajar correctamente en el dominio de la frecuencia. Una vez obtenida la transformada rápida se procedió a graficar cada uno de los archivos de audio ya analizados en el tiempo, pero en este caso en la frecuencia. De manera que tiene los datos de frecuencia en Hz en el eje x y datos de amplitud en el eje y. Se acotaron los lı́mites en frecuencia desde 0 Hz hasta un máximo de 1210 Hz, ya que la nota con la frecuencia central más alta interpretada en las grabaciones tiene una frecuencia de 1176 Hz. El archivo de audio en Do Mayor tiene la transformada de Fourier de la señal como se muestra en 3.3. La transformada rápida de Fourier para el archivo de audio en La menor Figura 3.3: Transformada rápida de Fourier del archivo en Do mayor. armónico se puede observar en 3.4. Se puede observar de los tres casos analizados, que todos están en el rango de frecuencia de entre 0 Hz y 1210 Hz, además que la magnitud de la transformada de Fourier no es mayor a 3000 en ningún caso. De este análisis en frecuencia se puede observar el espectro de potencia tal y como se muestra en 2.1, por ejemplo una nota LA centrada aproximadamente en la frecuencia de 440 Hz se ve en 3.5. 18 3 Desarrollo del algoritmo Figura 3.4: Transformada rápida de Fourier del archivo en La menor armónico. 3.3 Recorrido por las frecuencias Una vez leı́do el archivo wav introducido y al ser recorrido tanto en el tiempo como en la frecuencia, se sigue entonces con el recorrido de las frecuencias. Primeramente se tomó en cuenta una sola columna de ’wave1’ ya que este contiene dos columnas idénticas. Luego se combinaron los vectores, de manera que se creó una matriz z con dos colummas, en la primera se colocaron los valores de la magnitud de la transformada de Fourier, y en la segunda columna los valores de la frecuencia asociados a dichas magnitudes. Esto se logró utilizando el código descrito en 3.6. Ya creada la matriz z, se empezó a recorrer cada uno de los rangos de frecuencias, de manera que se comparara cada par ordenado con el siguiente, y se guardara el valor de amplitud máximo de cada uno de los rangos. De esta forma se guardaron los valores de frecuencia y amplitud donde se encuentran los picos en la transformada de Fourier. En 3.7 se muestra un ejemplo de cómo se recorrieron los rangos de frecuencia. En Finicial se definió el valor mı́nimo de frecuencia en el rango establecido y en Ffinal el valor máximo, luego se colocó el valor de SOL1 en 0 para empezar con la comparación. Una vez establecido esto, se recorrieron uno por uno cada uno de los pares ordenados, de manera que si se encontraba un valor de amplitud mayor se guardara este valor nuevo, y ası́ sucesivamente hasta llegar al valor final del rango, ya con el pico máximo encontrado. Se recorrió cada uno de los 32 rangos en total por analizar, tan solo cambiando los valores de frecuencia inicial y de frecuencia final. 3.4. Banderas de las frecuencias 19 Figura 3.5: Espectro de potencia de la nota LA con frecuencia central en 440.5Hz. Figura 3.6: Creación de la matriz z. 3.4 Banderas de las frecuencias Para hacer el reconocimiento de las escalas más sencillo, lo siguiente que se implementó fue la utilización de banderas para denotar las frecuencias, es decir colocar las notas musicales en 0 o en 1 según estas tuvieran picos de amplitud o no. 20 3 Desarrollo del algoritmo Figura 3.7: Recorrido de rango de frecuencias de Sol1. Esta comparación se realizó de la siguiente manera: primero se tomó la media de todas las muestras de amplitud de la FFT, luego la desviación estándar, y con esto se determinó y definió experimentalmente, que para que hubiera un pico de amplitud considerable en el muestreo, particularmente en este proyecto y tipo de grabación, se debı́a tomar el valor mı́nimo de la media más ocho desviaciones estándar, cómo se puede observar en 3.8. Una vez definido el valor mı́nimo para considerar un pico, se tomaron cada Figura 3.8: Valor mı́nimo de amplitud. uno de los picos reconocidos en la sección reconocimiento de frecuencias y se compararon contra el valor mı́nimo, de esta forma si el pico ya reconocido era 3.5. Reconocimiento de Escalas 21 mayor a este valor se coloca en 1, mientras que en el caso contrario se coloca en 0. Terminada la bandera del SOL1 se continuó con la siguiente nota y de manera consecutiva hasta terminar con todos los picos de amplitud reconocidos. 3.5 Reconocimiento de Escalas Con las banderas de frecuencias en 0 o en 1, se pueden agrupar las distintas notas reconocidas en escalas musicales, especı́ficamente en escalas mayores, menores armónicas ó menores melódicas. El código primero toma en cuenta las notas que no pueden formar parte del patrón de notas establecidas para cada patrón, de manera que, si se encuentra una bandera en 1 de alguna nota que forme parte de la escala recorrida en ese momento, de inmediato coloca la bandera de esa escala en 0, y continúa con la siguiente escala, es decir con solo que haya una nota que no debe estar debe continuar con el siguiente caso. Si todas las banderas de las notas que no pueden estar dentro de la escala están en 0, entonces el programa continúa con las notas que sı́ pueden estar, de esta manera, puede estar una, varias o todas las notas y ası́ el programa coloca la bandera de la escala en 1. Casos posibles Dentro del reconocimiento de la escala pueden ocurrir algunos casos factibles, que se enumerarán a continuación. • El violinista interprete una escala cromática, esto es, que se interprete una secuencia de semitonos de por lo menos una octava, lo que provocarı́a que las banderas de todas las escalas se coloquen en 0, es decir no se podrı́a ubicar el segmento en ninguna escala. • Un conjunto de pocas notas, lo que provocarı́a que las banderas en 1 correspondan a una o varias escalas. • La escala mayor tiene una relativa menor natural, por lo tanto, al reconocerse una escala mayor, implı́citamente se reconoce la escala menor natural. • Puede reconocerse un grupo de notas que correspondan a una sola escala. 22 3 Desarrollo del algoritmo Ventana de texto La ventana de texto es utilizada para desplegar el nombre o nombres de la o las escalas reconocidas por el algoritmo. Esta ventana reconoce si la bandera de cada escala está en 1 o en 0, de esta manera si está en 1 automáticamente se despliega una ventana que contiene el nombre de dicha escala. Nótese que el algoritmo detecta si la bandera de dicha escala se encuentra en 1, de esta manera utilizando la función msgbox de MATLAB el despliega el mensaje de la escala. Al tener toda escala mayor una relativa menor natural que posee las mismas notas, entonces en el mensaje que se despliega para cada una de las escalas mayores se adjunta el nombre de su escala relativa menor natural, ya que se podrı́a tratar de cualquiera de los dos casos. 3.6 Interfaz de usuario en GUI de MATLAB Creación de la interfaz Realizados los distintos scripts en MATLAB para cada una de las secciones del programa, se unieron todos en un solo script, y luego se transformaron en una función para ser utilizada en GUIDE, de manera que se permitiera crear una interfaz gráfica que fuera utilizada por cualquier usuario. Al crearse un nuevo Blank GUI, o nuevo documento de GUIDE, se forman dos tipos de archivo, uno gráfico (.fig) donde se colocan los distintos componentes que llevará la interfaz y otro (.m) donde se colocan las funciones y distintos comandos que se le asignarán a cada uno de los componentes de la interfaz. De esta manera se empezó a implementar la interfaz gráfica, la cual cuenta con 3 imágenes (axes1, axes2,axes3), un botón (SELECCIONE EL ARCHIVO DE AUDIO), dos listas (listbox1, listbox2) y dos textos estáticos (ESCALA O ESCALA RECONOCIDAS, NOTAS INTERPRETADAS) tal y como se muestra en 3.9. Se describirá a continuación cada uno de los componentes. • Axes1: se trata de un complemento tipo AXES, en el cual se incluyó la imagen de fondo para el programa final, esta imagen se llama violin1.jpg. • Axes2: esta imagen también de tipo AXES, es utilizada para captar la señal en el tiempo del script PARTE 1 del algoritmo, de esta manera se le asigna a Axes2 la imagen obtenida por plot(t,wave). 3.6. Interfaz de usuario en GUI de MATLAB 23 Figura 3.9: Archivo .fig de la interfaz de GUIDE. • Axes3: esta imagen de tipo AXES, al igual que a Axes2, se le asignó una imagen graficada por el script PARTE 1, en este caso la transformada rápida de Fourier de la señal. • SELECCIONE EL ARCHIVO DE AUDIO: corresponde a un botón de tipo Push Button, el cual al momento de presionarlo se direcciona a la carpeta donde se encuentra el programa y a la vez todos los archivos de audio, de manera que se puede seleccionar el archivo y a partir de esto se obtienen los resultados generados por todos los algoritmos automáticamente. • ESCALA O ESCALA RECONOCIDAS: este texto es de tipo Static Text, es decir, es un texto estático que en el caso de la interfaz se utilizó como tı́tulo para denotar la lista donde se colocó el nombre de la escala o escalas reconocidas tal y como se realizó en el script de Reconocimiento de Escalas. • NOTAS INTERPRETADAS: este texto también es de tipo Static Text, utilizado como tı́tulo para la lista de notas interpretadas, tal y como se extrajeron en los scripts Reconocimiento de frecuencias y Banderas de las frecuencias. • listbox1: Esta lista de tipo Listbox fue utilizada en la interfaz de manera que en ella se colocara el nombre o los nombres de las escalas que el algoritmo reconoció. Para lograr esto, se reemplazó la ventana de texto 24 3 Desarrollo del algoritmo desplegada, de manera que en su lugar, si la función entra en la sentencia ’if’, este guarda en ’hn, 1’ un String con el nombre de dicha escala, y luego sumara 1 el contador para que continuara con todos los casos hasta finalizar. De esta manera ’h’ es un arreglo de celdas (cell array) que corre por todas las escalas y guarda todos los casos correspondientes. Una vez creado el arreglo de celdas ’h’, se procedió a introducir este en una lista (listbox1), al contener este solamente contenido de tipo String (solo texto). • listbox2: Esta lista también de tipo Listbox, fue utilizada para colocar en ella el nombre de todas las notas que el algoritmo reconoció. Se realizó en la parte del algoritmo correspondiente a la Banderas de las Frecuencias, de esta manera, al poner la bandera en 0 o en 1, se coloca una sentencia ’if’ de forma que si se encuentra en 1 se guardara en en lz, 1 un String con el nombre de dicha nota, por lo tanto al igual que en el caso pasado, ’l’ es un arreglo de celdas de longitud z. Al crearse el arreglo de celdas ’l’ se procedió a colocarlo en listbox2, de esta forma en la lista se desplegara el nombre de todas las notas reconocidas por el algoritmo. Interfaz en ejecución La última parte del proyecto, correspondió a ejecutar la interfaz realizada. Al darle play al archivo creado se desplegó la interfaz mostrada en 3.10. Se puede observar cada uno de los componentes introducidos ya en ejecución, donde axes1 es un fondo permamente o fijo en la interfaz, el Push Button SELECCIONE EL ARCHIVO DE AUDIO se encuentra disponible para que el usuario lo presione y se despliegue la lista de archivos de audio, las imágenes axes2 y axes3 se encuentran vacı́as puesto que aún no se ha ejectudo ningún archivo, y las listas listbox1 y listbox2 igualmente están vacı́as ya que no se ha corrido el programa. En la figura 3.11 se puede observar la lista con los archivos de audio disponibles que se despliega al presionar el Push Button SELECCIONE EL ARCHIVO DE AUDIO. Se selecciona el archivo de audio que se desee y a continuación el programa despliega la señal en el tiempo en axes1, la transformada rápida de Fourier en axes2, la escala o escalas reconocidas en listbox1 y las notas interpretadas en listbox2, tal como se muestra en 3.12, adicionalmente, el programa reproduce el archivo de audio elegido. El archivo reproducido es un audio en Do Mayor. Nótese que el programa identificó el archivo en Do Mayor, tal y cómo se es- 3.6. Interfaz de usuario en GUI de MATLAB 25 Figura 3.10: Interfaz desplegada al darle play al archivo creado. Figura 3.11: Archivos desplegados al presionar el Push Button SELECCIONE EL ARCHIVO DE AUDIO. peraba. El programa reconoció el archivo de audio en Lab Mayor, lo que era de esperarse. Por último, se muestra en 3.13 al programa ejecutándose con un archivo de audio de una grabación de la casa disquera Deutsche Grammophon del violinista Henryk Szeryng. Esta obra seleccionada no pertenece al conjunto de una sola tonalidad puesto que pasa por varias al ser una obra de longitud larga, 26 3 Desarrollo del algoritmo Figura 3.12: Interfaz en ejecución con archivo de audio en Do Mayor. por lo que el programa debe reconocer que no pertenece a ninguna escala (ya que está en varias, y estos requisitos anulan unas de otras), además, se podrá observar más de una señal al ser un archivo de una casa disquera, el cual corrige ciertos errores para la edición de este. Se puede observar las dos señales tanto en el tiempo como en la frecuencia, Figura 3.13: Interfaz en ejecución con archivo de audio de disco de Henryk Szeryng. además no pertenece a ninguna escala como ya se sabı́a y se despliegan las notas interpretadas, tal como se esperaba. 4 Conclusiones y recomendaciones 4.1 Conclusiones • Se crearon cinco Scripts en MATLAB, de manera que cada uno cumpliera una función especı́fica del algoritmo, luego se unieron en un solo Script, con lo que se creó una función para implementarse en GUIDE de MATLAB. • Se logró por medio de MATLAB, leer un archivo de audio y partir de esto se pudo reconocer la señal en el tiempo y en la frecuencia, ası́ reconocer las distintas notas musicales ejecutadas mediante ventanas establecidas en la frecuencia. • Se logró implementar un algoritmo que permitiera agrupar el conjunto de las distintas notas musicales en escalas mayores, escalas menores armónicas o escalas menores melódicas. • Se creó una interfaz gráfica por medio de la herramienta GUIDE de MATLAB, accesible al usuario, de manera que desplegara la lista de archivos de audio disponibles y luego el nombre de la o las escalas reconocidas, las notas ejecutadas, la señal en el tiempo y la señal en la frecuencia. 4.2 Recomendaciones • El presente proyecto puede ser eventualmente implementado en tiempo real mediante procesamiento digital de señales en una plataforma de hardware libre como por ejemplo en Arduino. • Se puede profundizar en métodos de procesamiento digital de señales para el análisis de la transformada rápida de Fourier, como lo es el Zero Padding. • Procurar realizar las grabaciones en un entorno cerrado con poco ruido externo, además de verificar el correcto funcionamiento del micrófono, de manera que el archivo de audio sea fiel a la interpretación del violinista. • Las ventanas utilizadas en la frecuencia para el reconocimiento de notas pueden definirse de manera distinta, dependiendo del fin con el que se 27 28 4 Conclusiones y recomendaciones utilice el programa, de manera que si se trata de un estudiante avanzado de violı́n o de un profesional, la ventana se puede reducir para ser más estrictos con la afinación. • El algoritmo puede ampliarse para incluir en él conceptos musicales como el tempo y el ritmo, además se puede expandir la longitud del archivo de audio para poder reconocer cuándo se termina una escala y comienza una nueva. • Se puede agregar al algoritmo la opción de poder interpretar más de un instrumento a la vez, como por ejemplo una orquesta, y que este a la vez reconozca cada uno de ellos. Bibliografı́a Danilo (s.f.). Notas de danilo. páginas 3–7. Guerrero, D. O. B. (2008). Manual de interfaz gráfica de usario en matlab. Isabel Jeremı́as L, E. C. R. (2005). Curso Básico de Armonı́a. Editorial de la Universidad de Costa Rica. John G. Proakis, D. G. M. (1996). Digital Signal Processing. Prentice Hall International, Inc. Macı́as, J. M. (2012). Diseño e implementación de un detector automático de acordes. Master’s thesis, Universidad Carlos III de Madrid. Mathworks (2014a). abs. http://www.mathworks.com/help/matlab/ref/abs.html. Mathworks (2014b). audioread. http://www.mathworks.com/help/matlab/ref/audioread.html. Mathworks (2014c). fft. http://www.mathworks.com/help/matlab/ref/fft.html. MathWorks (2014). Matlab gui. http://www.mathworks.com/discovery/matlabgui.html. Mathworks (2014a). median. http://www.mathworks.com/help/matlab/ref/median.html. Mathworks (2014b). msgbox. http://www.mathworks.com/help/matlab/ref/msgbox.html. Mathworks (2014c). std. http://www.mathworks.com/help/matlab/ref/std.html. Moya, J. P. A. (2011). Notas de clase, procesamiento digital de señales. Instituto Tecnológico de Costa Rica, páginas 91–100. Tomasini, M. C. (s.f.). El fundamento matemático de la escala musical y sus raı́ces pitagóricas. Universidad de Palermo, páginas 16, 17. 29 A Documentación Las grabaciones en los distintos formatos de audio utilizados en este proyecto fueron grabados por: • Mauricio Campos Salas. Los archivos fueron grabados en una computadora Dell Inspiron N4110 y utilizando el programa propio de Windows 7, Sound Recorder. Noviembre de 2014 en San José Costa Rica. • Henryk Szeryng. Disco ’Sonatas & Partitas For Violin’ de la casa disquera Deutsche Grammophon, año 1967. Hamburgo, Alemania. 31