Informe - Escuela de Ingeniería Eléctrica

Anuncio
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
Descargar