Universidad de San Buenaventura Bogotá
1
RAE
1. TIPO DE DOCUMENTO Trabajo de grado para optar al título de INGENIERO DE SONIDO.
2. TITULO DESARROLLO DE UN CONVERSOR DE WAV A MIDI PARA TRANSCRIPCIÓN MUSICAL DE CLARINETE.
3. AUTORES MYRIAN LUCRECIA CALVO TORRES, SALOMÓN DÍAZ DONADO
4. LUGAR Bogotá, D.C.
5. FECHA Noviembre de 2011
6. PALABRAS CLAVE Conversión, wav, MIDI, Detección de pitch, transcripción musical, Función de Autocorrelación.
7. DESCRIPCION DEL TRABAJO
El presente trabajo describe el desarrollo de un software prototipo conversor de wav a MIDI para transcripción musical de clarinete. Es propuesto un algoritmo de segmentación de las notas musicales basado en frecuencia y en un umbral de intensidad, usando un método de detección de pitch de dominio temporal. También se presenta una forma de calcular el velocity , un algoritmo de cuantización,un calculador de tempo, y se escribe el archivo .mid, mediante la librería MIDI Toolbox.
8. LINEAS DE INVESTIGACION
La línea de investigación en que se desarrolla el presente proyecto de investigación es: Tecnologías actuales y sociedad. La sub-línea de la facultad es: Procesamiento de señales digitales y/o analógicas. El presente proyecto de investigación se realiza dentro del campo de Análisis y procesamiento de señales.
9. FUENTES CONSULTADAS ANDERTON, Craig. The MIDI Protocol. Berkeley, California. CORDANTONOPULOS, Vanessa. Curso completo de Teoría de la Música. 2002. DANHAUSER, A. Teoría de la música. Editorial Ricordi; 2005. EEROLA, Tuomas; TOIVIAINEN, Petri. MIDI Toolbox: MATLAB Tools for Music Research. Department of Music, University of Jyväskylä. Finlandia. 2004 [Internet]: www.jyu.fi/hum/laitokset/musiikki/en/research/coe/materials/miditoolbox [consulta: Septiembre 2011] FORSBERG, Johan. “Automatic conversion of sound to the MIDI-format” 1998.
Universidad de San Buenaventura Bogotá
2
GERHARD, David. “Pitch Extraction and Fundamental Frequency: History and Current Techniques”. University of Regina. 2003 JYH-SHING, Roger Jang; YANG GAO, Ming. “ A Query-by-Singing System based on Dynamic Programming”, Computer Science Department, National Tsing Hua University, Hsinchu, Taiwan, 2000. JYH-SHING, Roger Jang. Audio Signal Processing and Recognition. KAWAHARA, Hidek; DE CHEVEIGNE, Alain. “YIN, a fundamental frequency estimator for speech and music”, 2002. KOSTEK, Bo˙zena. Perception-Based Data Processing in Acoustics. Editorial In-chief. 2005 MERINO DE LA FUENTE, Jesús Mariano. Las vibraciones de la música. Editorial Club Universitario. 2006. MIDDLETON, Gareth. “Pitch Detection Algorithms”. 2003 MOLINA REVERTE, Albert. Proyecto final de Carrera “Conversor wave a MIDI en tiempo real para guitarras eléctricas”, Escuela Universitaria de Ingeniería Técnica Industrial de Terrassa, Universidad Politécnica de Cataluña 2006. RIPE RODRIGUEZ, Andrés. Tesis de grado “Dispositivo conversor de nota musical a nota MIDI para bajo eléctrico”, Universidad de San Buenaventura Bogotá, 2008. RODRIGUEZ BLANCO, Alicia. Música. Editorial Editex. 2007. SEISDEDOS, Marcela. Apreciación Musical I. Argentina. Disponible en: http://apreciacionmusical1emba.blogspot.com/2010/10/el-clarinete.html
10. CONTENIDOS Algoritmos de Detección de pitch de dominio temporal y espectral. Función de Autocorrelación Algoritmo de segmentación Algoritmo para el cálculo del velocity Algoritmo de Cuantización Algoritmo para la detección del tempo Algoritmo para la creación del fichero MIDI mediante la librería MIDI Toolbox. Evaluación de cada algoritmo que compone el software
11. METODOLOGIA El presente proyecto sigue un enfoque Empírico-analítico, debido a que se ha realizado una investigación científica mediante la implementación y análisis de algoritmos para la detección de frecuencia, y la realización de pruebas para verificar su eficiencia en los resultados obtenidos.
12. CONCLUSIONES
El software desarrollado cuenta con un algoritmo de detección de pitch de dominio temporal, específicamente un algoritmo basado en autocorrelación, que presenta una eficiencia del 100%, superando la eficiencia de los métodos AMDF, SIFT, HPS y Cepstrum.
Universidad de San Buenaventura Bogotá
3
La escritura del fichero MIDI, es realizada por la librería Midi Toolbox, generando un archivo .mid que funciona en todos los medios compatibles, la librería funciona únicamente en las versiones de matlab que van desde la 5.3 hasta las 7.3. El software conversor de wav a MIDI, posee una herramienta para calcular el tempo, cuya eficiencia calculada es del 90%. Dicha eficiencia varía de acuerdo la estabilidad rítmica del instrumentista y de quien realiza el cálculo. El cálculo del velocity logrado hace que el archivo MIDI resultante de la conversión sea más fiel al audio original, por lo cual al reproducirlos la intensidad de las notas corresponde a la intensidad en el archivo de audio original. El software conversor de wav a MIDI, contiene entre sus herramientas la opción de cuantizar la duración de las notas obtenidas en el análisis del archivo de audio de origen, para la correcta visualización de la partitura. El software conversor de wav a MIDI, posee una interfaz gráfica con diferentes herramientas que permiten al usuario realizar la conversión de forma rápida, sencilla y eficiente. El software desarrollado no funciona únicamente para el clarinete, sino también para otros instrumentos de viento, pues la configuración de los parámetros de conversión, y el algoritmo de detección de pitch empleado en el desarrollo del proyecto hacen posible la detección de las notas en la mayoría de los instrumentos, incluso puede ser usado en instrumentos percusivos para plasmar una idea rítmica. El software desarrollado funciona de forma correcta únicamente para audios mono, que contengan ejecuciones de una sola línea melódica, en general para instrumentos melódicos, o para instrumentos armónicos que ejecuten una melodía. No funciona para un audio que contenga varios instrumentos melódicos cuya ejecución conforme acordes, es decir más de una nota a la vez. Al realizar una conversión sobre un archivo de audio que contenga en toda su extensión, o en partes de ella, mas de una nota a la vez, el archivo .mid resultante de la conversión presenta errores, mostrando que el conversor identifica en la mayoría de los casos en que se presenta armonía, la nota cuya frecuencia sea mas alta, o la mas baja del acorde pero una octava por debajo de su frecuencia real.
Universidad de San Buenaventura Bogotá
4
DESARROLLO DE UN CONVERSOR DE WAV A MIDI PARA
TRANSCRIPCIÓN MUSICAL DE CLARINETE
MYRIAN LUCRECIA CALVO TORRES SALOMÓN DÍAZ DONADO
UNIVERSIDAD DE SAN BUENAVENTURA FACULTAD DE INGENIERÍA
INGENIERÍA DE SONIDO BOGOTÁ D.C OCTUBRE
Universidad de San Buenaventura Bogotá
5
2011 DESARROLLO DE UN CONVERSOR DE WAV A MIDI PARA
TRANSCRIPCIÓN MUSICAL DE CLARINETE
MYRIAN LUCRECIA CALVO TORRES SALOMÓN DÍAZ DONADO
PROYECTO DE GRADO
UNIVERSIDAD DE SAN BUENAVENTURA FACULTAD DE INGENIERÍA
INGENIERÍA DE SONIDO BOGOTÁ D.C OCTUBRE
Universidad de San Buenaventura Bogotá
6
2011
CONTENIDO
INTRODUCCIÓN ............................................................................................................. 14
1. PLANTEAMIENTO DEL PROBLEMA ....................................................................... 15
1.1. ANTECEDENTES ................................................................................................. 15
1.2. DESCRIPCIÓN Y FORMULACIÓN DEL PROBLEMA. ...................................... 18
1.3. JUSTIFICACIÓN................................................................................................ 18
1.4. OBJETIVOS DE LA INVESTIGACIÓN .................................................................. 20
Objetivo General ....................................................................................................... 20
Objetivos Específicos ............................................................................................... 20
1.5. ALCANCES Y LIMITACIONES DEL PROYECTO ................................................ 21
1.5.1. Alcances ......................................................................................................... 21
1.5.2. Limitaciones .................................................................................................... 21
2. MARCO DE REFERENCIA ...................................................................................... 22
2.1. MARCO CONCEPTUAL ........................................................................................ 22
2.1.1. Audio ............................................................................................................. 22
2.1.2. Características de las señales de Audio ........................................................ 22
2.1.2.1 Amplitud ....................................................................................................... 22
2.1.2.2 Frecuencia ................................................................................................... 23
2.1.2.3 Armónico...................................................................................................... 23
2.1.2.4 Espectro en frecuencia ................................................................................ 23
2.1.2.5 Octava ......................................................................................................... 23
2.1.2.6 Pitch ............................................................................................................. 23
2.1.2.7 Detección de pitch mediante la función de autocorrelación .......................... 24
2.1.2.8 Frecuencia de muestreo .............................................................................. 24
2.1.2.9 Resolución en bits ........................................................................................ 25
2.1.3. Formatos de almacenamiento de archivos de audio ....................................... 25
2.1.3.1 Formato wav ................................................................................................. 25
2.1.4. MIDI ................................................................................................................ 26
2.1.4.1 Mensajes MIDI .............................................................................................. 26
2.1.4.2 Canales MIDI ............................................................................................... 27
2.1.4.3 Parámetros MIDI .......................................................................................... 28
Universidad de San Buenaventura Bogotá
7
2.1.4.4 Ficheros MIDI ............................................................................................... 29
2.1.5. MIDI Tool box ................................................................................................. 34
2.1.6. Conceptos musicales básicos ........................................................................ 34
2.1.6.1 Pentagrama ................................................................................................. 34
2.1.6.2 Las notas musicales .................................................................................... 34
2.1.6.3 Los silencios ............................................................................................... 35
2.1.6.4 Las claves musicales ................................................................................... 36
2.1.6.5 El compás .................................................................................................... 36
2.1.7. Instrumentos musicales de viento ................................................................... 37
2.1.7.1 Instrumentos de Viento-Metal ...................................................................... 38
2.1.7.2 Instrumentos de Viento-Madera ................................................................... 38
2.1.7.3 El clarinete ................................................................................................... 39
2.1.7.4 Rango de frecuencias de los Instrumentos de Viento.................................... 41
2.2. MARCO TEÓRICO ............................................................................................... 42
2.2.1. Detección de Pitch .......................................................................................... 42
2.2.2. ALGORITMOS DE DETECCIÓN DE PITCH DE DOMINIO TEMPORAL ........ 44
2.2.2.1 ACF ( Autocorrelation Function / Función de Autocorrelación) ...................... 44
2.2.2.2 AMDF (Average Magnitude Difference Function/ Magnitud promedio de la Función Diferencia) ................................................................................................... 45
2.2.2.3 SIFT (Simplified inverse filtering technique/ Técnica de filtrado inverso simplificado).............................................................................................................. 46
2.2.3. ALGORITMOS DE DETECCIÓN DE PITCH DE DOMINIO ESPECTRAL....... 47
2.2.3.1 HPS (Harmonic Product Spectrum/ Producto del espectro armónico) ........... 48
2.2.3.2. CEPSTRUM ................................................................................................. 49
3. METODOLOGÍA ....................................................................................................... 50
3.1. ENFOQUE DE LA INVESTIGACIÓN ..................................................................... 50
3.2 LÍNEA DE INVESTIGACIÓN DE USB / SUB-LÍNEA DE FACULTAD / CAMPO TEMÁTICO DEL PROGRAMA ..................................................................................... 50
3.3. TÉCNICAS DE RECOLECCIÓN DE INFORMACIÓN ........................................... 51
HIPÓTESIS .................................................................................................................. 51
3.4. VARIABLES .......................................................................................................... 52
3.4.1. Variables Independientes................................................................................ 52
3.4.2. Variables Dependientes .................................................................................. 52
4. DESARROLLO INGENIERIL .................................................................................... 53
4.1. SELECCIÓN DEL MÉTODO DE DETECCIÓN DE PITCH .................................... 53
Universidad de San Buenaventura Bogotá
8
4.2. DESARROLLO DEL SOFTWARE CONVERSOR WAV A MIDI PARA CLARINETE ............................................................................................................. 59
4.2.1. Fase de inicialización ...................................................................................... 59
4.2.1.1 Abrir un archivo de Audio ............................................................................. 60
4.2.1.2 Grabar un archivo de Audio .......................................................................... 61
4.2.1.3 Reproducción de un archivo de audio ........................................................... 64
4.2.2. Fase de Configuración de parámetros de conversión .................................... 65
4.2.2.1 Frecuencia Mínima ....................................................................................... 66
4.2.2.2 Frecuencia Máxima ....................................................................................... 68
4.2.2.3 Tempo .......................................................................................................... 68
4.2.2.4 Compás ........................................................................................................ 69
4.2.2.5 Cuantización ................................................................................................. 71
4.2.3. Fase de Conversión ........................................................................................ 73
4.2.3.1 Algoritmo para la detección de la frecuencia ................................................ 74
4.2.3.2 Algoritmo para el cálculo del velocity ........................................................... 86
4.2.3.3 Algoritmo para la cuantización ..................................................................... 87
4.2.3.4 Algoritmo para el cálculo del tempo: “calculador de tempo” .......................... 90
4.2.4. Fase de Finalización ....................................................................................... 93
4.2.4.1 Guardar archivo MIDI .................................................................................... 93
4.2.4.2 Algoritmo para la creación del fichero MIDI a partir de la librería “MIDI Tool box” .......................................................................................................................... 95
4.2.4.3 Reproducción del Archivo MIDI ..................................................................... 98
4.3. DESARROLLO DE LA INTERFAZ GRÁFICA ....................................................... 99
4.3.1. INTERFAZ GRÁFICA PRINCIPAL .................................................................. 99
4.3.1.1 Barra de herramientas ................................................................................ 100
4.3.1.2. Botones ..................................................................................................... 103
4.3.1.3 Gráfica de forma de onda ........................................................................... 105
4.3.1.4 Gráfica archivo MIDI ................................................................................... 105
4.3.2. INTERFACES GRÁFICAS SECUNDARIAS .................................................. 106
4.3.2.1 Grabar archivo de audio.............................................................................. 106
4.3.2.2 Calcular tempo ............................................................................................ 107
4.3.2.3 Parámetros de conversión. ......................................................................... 108
4.3.2.4 Acerca de WAV2MIDI CONVERTER .......................................................... 111
5. ANÁLISIS DE RESULTADOS................................................................................. 113
5.1. EVALUACIÓN ALGORITMO DE SEGMENTACIÓN........................................... 113
5.2. EVALUACIÓN ALGORITMO PARA LA DETECCIÓN DEL VELOCITY ........... 129
Universidad de San Buenaventura Bogotá
9
5.3. EVALUACIÓN ALGORITMO PARA EL CÁLCULO DE TEMPO ...................... 133
5.4. EVALUACIÓN ALGORITMO DE CUANTIZACIÓN ............................................. 135
5.5. EVALUACIÓN DE LA ESCRITURA DEL FICHERO MIDI ................................ 136
CONCLUSIONES .......................................................................................................... 137
BIBLIOGRAFÍA .............................................................................................................. 139
Universidad de San Buenaventura Bogotá
10
ÍNDICE DE FIGURAS
Figura 1. Figuras de las notas musicales y sus respectivos silencios............................. 35 Figura 2. El compás ...................................................................................................... 36 Figura 3. Instrumentos de Viento-Metal .......................................................................... 38 Figura 4. Instrumentos de Viento-Madera ....................................................................... 39 Figura 5. Clarinete .......................................................................................................... 40 Figura 6. Extensión de los clarinetes .............................................................................. 40 Figura 7. ACF- Función de autocorrelación ..................................................................... 45 Figura 8. AMDF- Magnitud promedio de la Función Diferencia ....................................... 46 Figura 9. Fases generales conversor Wav a MIDI .......................................................... 59 Figura 10. Fase de Inicialización ..................................................................................... 60 Figura 11. Fase de Configuración parámetros de conversión ...................................... 65 Figura 12. Fase de conversión ....................................................................................... 73 Figura 13. Fase de finalización ...................................................................................... 93 Figura 14. Interfaz gráfica principal ................................................................................. 99 Figura 15. Menú Archivo ............................................................................................... 100 Figura 16. Abrir Archivo de Audio ................................................................................. 100 Figura 17. Guardar Archivo MIDI .................................................................................. 101 Figura 18. Menú Herramientas ..................................................................................... 101 Figura 19. Menú Configuración ..................................................................................... 102 Figura 20. Menú Ayuda ................................................................................................. 102 Figura 21. Botones ....................................................................................................... 103 Figura 22. Barra de progreso proceso de conversión.................................................... 104 Figura 23. Gráfica forma de onda ................................................................................. 105 Figura 24. Gráfica Archivo MIDI .................................................................................... 105 Figura 25. Interfaz gráfica secundaria “Rec” ................................................................. 106 Figura 26. Interfaz gráfica secundaria “Calculador_Tempo” .......................................... 108 Figura 27. Interfaz Gráfica secundaria “Configuracion_Parametros_Conversion” ......... 109 Figura 28. Interfaz gráfica secundaria “About_us” ......................................................... 111 Figura 29. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 1 ........................................................................................................... 117 Figura 30. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 1 ................................................................................................................... 119 Figura 31. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 2 ........................................................................................................... 119 Figura 32 Representación en piano roll del archivo MIDI generado por el conversor para la melodía 2 ................................................................................................................... 120 Figura 33. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 3 ........................................................................................................... 121 Figura 34. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 3 ................................................................................................................... 122 Figura 35. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 4 ........................................................................................................... 123 Figura 36. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 4 ................................................................................................................... 124
Universidad de San Buenaventura Bogotá
11
Figura 37. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 5 ........................................................................................................... 125 Figura 38. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 5 ................................................................................................................... 126 Figura 39. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 6 ........................................................................................................... 127 Figura 40. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 6 ................................................................................................................... 128 Figura 41. Detección de velocity, realizada por el algoritmo para la melodía 1 ............. 130 Figura 42. Detección de velocity, realizada por el algoritmo para la melodía 2 ............. 130 Figura 43. Detección de velocity, realizada por el algoritmo para la melodía 3 ............. 131 Figura 44. Detección de velocity, realizada por el algoritmo para la melodía 4 ............. 131 Figura 45. Detección de velocity, realizada por el algoritmo para la melodía 5 ............. 132 Figura 46. Detección de velocity, realizada por el algoritmo para la melodía 6 ............. 132
Universidad de San Buenaventura Bogotá
12
ÍNDICE DE TABLAS
Tabla 1. Mensajes MIDI . ................................................................................................ 27 Tabla 2. Expresiones usadas para indicar el tempo ......................................................... 28 Tabla 3. Figuras y duración de las notas musicales. ........................................................ 35 Tabla 4. Rango de frecuencias de los instrumentos musicales de Viento ........................ 41 Tabla 5. Resultados obtenidos en la detección de frecuencia, con los diferentes métodos de detección de pitch. ...................................................................................................... 55 Tabla 6. Eficiencia del calculador de tempo ................................................................... 135
Universidad de San Buenaventura Bogotá
13
ANEXOS
Anexo 1 ......................................................................................................................... 141 Anexo 2 ......................................................................................................................... 144 Anexo 3 ......................................................................................................................... 149 Anexo 4 ......................................................................................................................... 154 Anexo 5 ......................................................................................................................... 156
Universidad de San Buenaventura Bogotá
14
INTRODUCCIÓN
En la actualidad la herramienta MIDI es usada para múltiples propósitos durante
las etapas de preproducción y producción de un proyecto musical, haciendo uso
de controladores MIDI, secuenciadores y editores de partitura, incluso en la
ejecución musical en vivo a partir de muestras provenientes de bancos de sonidos.
La creación de una canción tiene su inicio en una idea musical, una melodía o
una sucesión de acordes que son plasmados en un papel o en una grabación
(herramienta usada por varios compositores) y que finalmente se convierte en una
obra maestra.
Siguiendo la línea de optimizar cada uno de los procesos en este campo
mediante el uso de la herramienta MIDI, es conveniente pensar en un sistema que
permita a compositores y músicos en general, decodificar la información musical
para llevar a cabo transcripciones automáticas en forma rápida y efectiva, de sus
composiciones, ideas musicales o fragmentos melódicos, partiendo de una
grabación de las mismas; esto con el objetivo de vincular la idea musical a un
secuenciador o de visualizarla en un editor de partitura.
Es por esto que se ha desarrollado un software prototipo conversor de wav a MIDI
para clarinete, que tiene como objetivo facilitar y agilizar la ejecución de los
procesos musicales anteriormente mencionados, y servir como referencia para
futuras investigaciones en el tema.
En el presente documento se describen cada uno de los procesos, fases de
investigación y desarrollo, llevados a cabo para el diseño y programación del
software prototipo conversor de wav a MIDI para clarinete.
Universidad de San Buenaventura Bogotá
15
1. PLANTEAMIENTO DEL PROBLEMA
1.1. ANTECEDENTES
La investigación sobre la transcripción musical inició varias décadas atrás, en sus
primeros años se empezaron a desarrollar sistemas que procesaban las señales
de audio con el objetivo de obtener la partitura de la ejecución musical de la señal
analizada. A continuación se mencionan los avances más relevantes, a nivel
global, nacional e institucional.
Antecedentes globales
A finales de los años 70, exactamente en 1977, en la Universidad de Michigan, los
investigadores Piszczalski y Galler, desarrollaron el primer sistema de
transcripción musical monofónica, cuyo objetivo consistía en procesar una señal
de audio y generar una partitura. El proceso consistía en obtener la
representación de la señal en el dominio de la frecuencia y a través de un análisis
realizado a los componentes espectrales de la misma, determinar la frecuencia
fundamental. El sistema presentaba inconvenientes en el cálculo de la duración
de las notas y los silencios; además su efectividad se limitaba a instrumentos con
menos energía en sus armónicos. Aún así se consideró un éxito.
Ese mismo año, en la Universidad de Stanford, James A Moorer, desarrolló
exitosamente un sistema con el cual logró transcribir dúos de guitarra y violín,
procesando la señal en el dominio del tiempo a través de una serie de filtrados con
los que encontraba las notas que eran posteriormente agrupadas para escribir la
partitura.
Posteriormente, en el año 1979, se generó otro modelo de detección de pitch, el
modelo Terhardt, que analizaba los submúltiplos de los componentes espectrales
de la señal de audio, para determinar la frecuencia fundamental.
Universidad de San Buenaventura Bogotá
16
En la década siguiente varios investigadores del departamento de música de la
universidad de Stanford, discutieron y trabajaron en el desarrollo de sistemas de
transcripción musical, algunos de los líderes en dicho periodo son Schloss (1985),
Foster (1982), Mont-Reynaud (1985), y Chafe (1985, 1986).
La mayoría de los sistemas desarrollados en la época mencionada eran efectivos
sólo para determinado rango de instrumentos, y presentaban inconvenientes
como la extrema sensibilidad al ruido, y la ineficacia para la transcripción musical
de un instrumento polifónico, limitación que existe aún en la actualidad.
En 1998, Johan Forsberg desarrolló lo que él denominó como un “sistema
experimental para representar en formato MIDI una señal de audio”1. Dicho
sistema operaba en el dominio de la frecuencia, realizando un análisis del
espectro mediante el cual determinaba los armónicos y el comportamiento en
frecuencia de la señal a través del tiempo para realizar el cálculo del tono y
escribir los eventos MIDI de inicio y final de nota, en un archivo MIDI de salida,
que podía visualizarse en un pianoroll.
Más recientemente, en el año 2006, en la Universidad Politécnica de Cataluña,
Albert Molina Reverte realizó un “Conversor wave a MIDI en tiempo real para
guitarras eléctricas”. El proceso inicia con la lectura del archivo wave, continua con
la detección de las notas mediante un algoritmo de detección de pitch de dominio
frecuencial que calcula la transformada de rápida de Fourier; y finaliza con la
escritura del fichero MIDI.
Adicionalmente, empresas como Yamaha y Roland han desarrollado interfaces de
conversión de nota musical a nota MIDI, como: ROLAND GI-10, GR33, VG-88,
AIX-101,GK3 y YAMAHA EZ-GA.
1 FORSBERG, Johan “Automatic conversion of sound to the MIDI-format” 1998.
Universidad de San Buenaventura Bogotá
17
Existen también conversores wav a MIDI, que se comercializan en internet como
Solo Explorer, AmazingMIDI , Intelliscore Polyphonic, AKoff Music, y Composer.
Por su parte programas de audio como Logic y Melodyne, permiten a partir de un
archivo .wav, visualizar la partitura y exportar un archivo MIDI.
Antecedentes nacionales
Los estudiantes de música y artes de la Universidad Distrital Antonio Nariño,
llevaron a cabo la construcción de dispositivos de conversión analógica a nota
MIDI.2
Antecedentes Universidad de San Buenaventura
En el año 2008, Andrés Ripe Rodriguez , desarrolló como proyecto de grado un
“Dispositivo conversor de nota musical a nota MIDI para bajo eléctrico”. En dicho
proyecto, la detección de la frecuencia se realiza mediante un algoritmo basado en
autocorrelación. El proyecto tuvo como alcances su efectividad para otros
instrumentos como la guitarra eléctrica o teclados.
2 RIPE RODRIGUEZ, Andrés. Tesis de grado “Dispositivo conversor de nota musical a nota MIDI
para bajo eléctrico”, Universidad de San Buenaventura Bogotá, 2008.
Universidad de San Buenaventura Bogotá
18
1.2. DESCRIPCIÓN Y FORMULACIÓN DEL PROBLEMA.
Los músicos en general hacen uso de la transcripción musical, que consiste en el
empleo de signos para representar los sonidos en una partitura. Corresponde a
una herramienta útil, el desarrollo de una aplicación que permita de forma rápida y
eficiente convertir un archivo que contenga la grabación de un instrumento
melódico en formato wav, a un archivo MIDI, que genere la visualización de una
partitura cuando se importe en un software editor de partitura. De esta forma, no
se altera en ningún sentido el proceso creativo musical en el caso de
compositores, y se agiliza la transcripción en general, proporcionando incluso a
aquellos neófitos en la materia una guía en su proceso de estudio musical.
¿Cómo diseñar una aplicación que realice la conversión de un archivo de audio
que contenga la grabación de un clarinete a un archivo MIDI?
1.3. JUSTIFICACIÓN
La implementación del protocolo MIDI en el campo de la producción musical, ha
permitido desde sus inicios agilizar y ejecutar diferentes procesos. El desarrollo
de una herramienta que facilite el estudio y la composición de piezas musicales se
hace necesaria en distintos campos de la actividad musical, por lo cual se requiere
del diseño y creación de una aplicación capaz de convertir un archivo de audio en
formato wav, a un archivo MIDI, cuyo desempeño satisfaga las necesidades de los
usuarios y deje un precedente para el implemento de nuevas funciones en el
sistema.
Se ha seleccionado el clarinete como el instrumento en el cual deben ser
ejecutadas las piezas musicales a convertir, debido a que en la ejecución de cada
nota a lo largo del rango en frecuencia del instrumento, la frecuencia fundamental
Universidad de San Buenaventura Bogotá
19
presenta más energía que los armónicos, característica que facilita la detección de
las notas, en todos los algoritmos de detección de pitch.
Debido a que la detección de múltiples frecuencias simultáneas corresponde a un
problema no resuelto aún en la actualidad, se ha decidió limitar la conversión a
instrumentos monofónicos, siendo esta otra de las razones por las cuales se ha
seleccionado el clarinete como el instrumento más adecuado para los propósitos
del presente proyecto.
Como formato de audio de los archivos de origen, se ha seleccionado el formato
wav, por ser el más empleado en grabación y producción musical.
Universidad de San Buenaventura Bogotá
20
1.4. OBJETIVOS DE LA INVESTIGACIÓN
Objetivo General
Desarrollar un software prototipo conversor WAV a MIDI para transcripción
musical de Clarinete.
Objetivos Específicos
Realizar un estudio de los diferentes métodos de detección de pitch y
seleccionar entre ellos el más adecuado de acuerdo a los propósitos del
proyecto.
Establecer un algoritmo base, que permita la detección de las frecuencias
haciendo uso de la plataforma de programación MATLAB.
Establecer un algoritmo base para la creación del fichero MIDI
correspondiente al archivo con extensión .mid, haciendo uso de la
herramienta MIDI Tool box de MATLAB.
Establecer un algoritmo que sirva para la detección del velocity.
Establecer un algoritmo que sirva para la detección del tempo.
Programar en MATLAB la aplicación que realice la lectura del archivo de
audio .wave, lleve a cabo la correspondiente detección de notas musicales,
realice la detección del velocity, detecte el tempo y finalmente genere el
archivo MIDI.
Universidad de San Buenaventura Bogotá
21
1.5. ALCANCES Y LIMITACIONES DEL PROYECTO
1.5.1. Alcances
Realizar la detección de la tonalidad
La posibilidad de realizar la conversión de instrumentos polifónicos, es decir un
archivo de audio que contenga dos ó más notas simultáneas (instrumentos
armónicos).
1.5.2. Limitaciones
La función “writemidi” del MIDI Tollbox, empleada para la escritura del archivo
.mid, hace uso de archivos .mex, que sólo son compatible con las versiones
de Matlab que van desde la 5.3 hasta la 7.4; causando que la conversión
completa y la obtención del archivo MIDI, sólo sea posible en las versiones
mencionadas de Matlab.
Las conversiones sólo se realizan sobre señales monofónicas de
instrumentos, es decir sólo una línea melódica.
Para notas de la misma frecuencia ejecutadas de forma consecutiva, se
sumará el valor de las duraciones, y se escribirá en el fichero MIDI, como una
sola nota. Esto es producto de que el algoritmo de segmentación sólo está
basado en pitch.
Universidad de San Buenaventura Bogotá
22
2. MARCO DE REFERENCIA
2.1. MARCO CONCEPTUAL
2.1.1. Audio
Audio analógico es la representación eléctrica de una señal sonora, generalmente
de sonidos audibles por el hombre. El audio digital es la representación de una
señal de audio analógica, realizada a una frecuencia de muestreo (muestras por
segundo), y a una resolución en bits definida.
2.1.2. Características de las señales de Audio
2.1.2.1 Amplitud
La amplitud es el valor máximo positivo o negativo que puede alcanzar una onda.
La amplitud se puede medir determinando la cantidad de fluctuación en la presión
del aire en un sonido, el valor de voltaje en una señal eléctrica o los datos
numéricos en una señal digital.
En el presente proyecto, el audio habiendo sido grabado mediante un micrófono o
línea, digitalizado mediante un conversor análogo-digital, y almacenado en un
formato .wav, es cargado en la plataforma Matlab mediante la función “wavread”,
que lee el archivo .wav y lo almacena en un vector “y”, representando sus valores
de amplitud muestra a muestra en valores de 1 a-1 y representando la frecuencia
mediante la distribución de los valores de amplitud que indica el vector “y”. En “fs”
se almacena la frecuencia de muestreo (puntos de muestra por segundo), y en
“nbits”, la resolución en bits.
[y, fs, nbits]=wavread(waveFile);
Universidad de San Buenaventura Bogotá
23
2.1.2.2 Frecuencia
La frecuencia corresponde al número de ciclos por segundo realizados por una
onda (Hz); a mayor frecuencia un sonido se percibe más agudo, y a menor
frecuencia se percibe más grave.
2.1.2.3 Armónico
Un armónico es una frecuencia que es múltiplo de una fundamental. Para una
frecuencia de 440 Hz, sus dos primeros armónicos 880Hz y 1320Hz.
2.1.2.4 Espectro en frecuencia
El espectro en frecuencia es una representación de la distribución de las
amplitudes de cada componente en frecuencia de un sonido determinado.
2.1.2.5 Octava
La octava es un intervalo entre dos sonidos que corresponde a una relación de 2
a 1. En el ámbito musical, es la distancia que hay entre dos notas de un mismo
nombre correspondientes a dos series consecutivas, siendo una serie una
secuencia de notas como se expresa a continuación:
Do1-Re1- Mi1- Fa1-Sol1-La1-Si1
Y dos series consecutivas:
Do1-Re1- Mi1- Fa1-Sol1-La1-Si1-Do2-Re2-Mi2-Fa 2-Sol2-La2-Si2
2.1.2.6 Pitch
Pitch es la medida de la percepción subjetiva de la frecuencia, en otras palabras
que tan agudo o grave es un sonido. En el presente proyecto, el término pitch es
empleado para referirse a la nota MIDI (número de semitonos) correspondiente a
Universidad de San Buenaventura Bogotá
24
la frecuencia detectada en cada segmento del audio analizado. El valor de pitch
MIDI, se calcula mediante la siguiente fórmula:
3 (1)
En la que 69 representa el LA central equivalente a 440Hz.
2.1.2.7 Detección de pitch mediante la función de autocorrelación
En el presente proyecto, la función de autocorrelación se emplea para detectar el
período fundamental del segmento de señal analizada, y así calcular la frecuencia,
que corresponde al inverso del período.
En la función de autocorrelación, la señal original es comparada con una versión
de sí misma retrasada en el tiempo para estimar la similitud entre ellas. Cuando el
grado de similitud es máximo, se ha encontrado el período fundamental.
2.1.2.8 Frecuencia de muestreo
La frecuencia de muestreo (Sample rate) es el número de muestras tomadas por
segundo de una señal continua para su representación digital en una señal
discreta.
3 JYH-SHING, Roger Jang; YANG GAO, Ming. “ A Query-by-Singing System based on Dynamic
Programming”, Computer Science Department, National Tsing Hua University, Hsinchu, Taiwan,
2000.
Universidad de San Buenaventura Bogotá
25
2.1.2.9 Resolución en bits
Resolución en bits es el número de bits de datos utilizados para codificar cada
punto de muestra en un proceso de conversión analógica-digital. La resolución en
bits determina la precisión de un sampler, conversor u otros dispositivos digitales
en la representación de los cambios de amplitud de un sonido. A mayor resolución
más precisa es la representación digital de la señal original.
2.1.3. Formatos de almacenamiento de archivos de audio
Los formatos de audio digital, son las múltiples formas en la que se almacena el
audio en computadores y medios de almacenamiento digital. Los más conocidos
son wav, mp3, AIFF y wma.
2.1.3.1 Formato wav
Formato wav (Waveform Audio File Format/ Formato de archivo de forma de onda
de audio), es el formato de almacenamiento de audio digital desarrollado por
Microsoft e IBM para Windows, se pueden almacenar archivos mono y stereo, con
diferentes frecuencias de muestreo y resolución en bits. Es el formato estándar
empleado para la grabación y producción musical.
En el presente software se emplea el formato de audio wav y no otros como mp3,
AIFF, wma debido a que es el formato más usado en grabación y producción
musical.
Universidad de San Buenaventura Bogotá
26
2.1.4. MIDI
El protocolo MIDI (Musical Instrument Digital Interface/Interfaz Digital para
instrumentos musicales), es un lenguaje, que permite a diversos dispositivos,
como computadores, secuenciadores, sintetizadores, y controladores, entre otros;
interpretar e intercambiar mensajes para la generación de sonidos.
2.1.4.1 Mensajes MIDI
Los mensajes MIDI están compuestos generalmente por un byte de estado y dos
bytes de datos. Los mensajes MIDI pueden ser mensajes de canal o mensajes de
sistema.
Los mensajes de canal son usados para controlar cada canal MIDI por
separado, dichos mensajes pueden ser de voz o de modo.
Los mensajes de voz indican al dispositivo las acciones realizadas por el usuario,
estos mensajes son:
Activación de nota (Note On), Desactivación de nota (Note Off), Postpulsación
polifónica (Polyphonic Key Pressure), Postpulsación monofónica de canal (Overall
pressure) Cambio de control (Control change), Cambio de programa (Program
Change), Pitch (Pitch bend).
Los mensajes de modo, afectan el modo de operación del canal MIDI, como
ajustar sus parámetros para recibir los mensajes de canal.
Los mensajes de sistema afectan al sistema en general, y no son asignados
a un canal en específico.
Universidad de San Buenaventura Bogotá
27
Tabla 1. Mensajes MIDI 4 .
2.1.4.2 Canales MIDI
Son los canales empleados para la transmisión de datos, dichos datos pueden
transmitirse por todos los canales a la vez ó sólo por determinado número de ellos,
sin afectar la información transmitida en los demás. Existen 16 canales o voces
MIDI, cada uno de ellos independiente y asignable a un dispositivo.
4 MERINO DE LA FUENTE, Jesús Mariano. Las vibraciones de la música. Editorial Club
Universitario. 2006. p. 404.
Mensajes MIDI
Byte estado Descripción
1000cccc Desactivación de nota
1001cccc Activación de nota
1010cccc Postpulsación polifónica
1011cccc Cambio de control
1100cccc Cambio de programa
1101cccc Postpulsación monofónica de canal
1110cccc Pitch
11110000 Mensaje exclusivo del fabricante
11110001 Mensaje de trama temporal
11110010 Puntero posición de canción
11110011 Selección de canción
11110100 Indefinido
11110101 Indefinido
11110110 Requerimiento de entonación
11110111 Fin de mensaje exclusivo
11111000 Reloj de temporización
11111001 Indefinido
11111010 Inicio
11111011 Continuación
11111100 Parada
11111101 Indefinido
11111110 Espera activa
11111111 Reinico del sistema
Universidad de San Buenaventura Bogotá
28
2.1.4.3 Parámetros MIDI
Velocity: Indica la intensidad de pulsación o ejecución, es decir que tan
fuerte se ha ejecutado una nota. A este parámetro se le asigna un valor de
0 a 127, siendo 0 la mínima intensidad y 127, la máxima. En el presente
proyecto, el velocity se halla a partir del cálculo de un vector de intensidad.
Tempo: Velocidad a la que se ejecuta una pieza musical, ésta se indica en
las partituras por una marca de bpm (beats per minute/golpes por minuto), o
por etiquetas asignadas a distintos valores como se muestra a
continuación.
Tempo bpm
Largo 40-60
Larghetto 60-66
Adagio 66-76
Andante 76-108
Moderato 108-120
Allegro 120-168
Presto 168-200
Prestissimo 200-208
Tabla 2. Expresiones usadas para indicar el tempo
Los golpes por minuto expresan la cantidad de negras que se ejecutan en
un minuto, 60bpm, indica que se ejecutan 60 negras en un minuto por lo
cual cada negra dura un segundo. El valor de la duración de cada negra se
puede hallar dividiendo 60 entre el tempo, como se expresa en la ecuación:
(2)
Universidad de San Buenaventura Bogotá
29
2.1.4.4 Ficheros MIDI
Los datos MIDI pueden ser almacenados en ficheros, para ser reproducidos e
intercambiados en diferentes equipos.
Un archivo MIDI consta de los siguientes parámetros: inicio de nota, nota,
velocidad, duración y final de nota, y se acompaña de una cabecera para indicar el
formato MIDI y su estructura.
Las notas, el velocity y la duración son descritas en el fichero mediante un valor
dentro de una escala que va de 0 a 127.
En el caso de las notas 60 representa el Do central.
El velocity es el valor que indica que tan fuerte se ha ejecutado la nota, siendo 127
el más fuerte.
En el caso de la duración 0 equivale a la mínima y 127 a la máxima
El fichero está conformado por datos en formato binario de 8 bits que se
convierten a formato hexadecimal ASCII.5
Cada fichero está formado por secuencias y estas a su vez por paquetes. Cada
paquete contiene 4 caracteres que indican el tipo de paquete, 4 bytes que forman
un mensaje de 32 bits.
Se dispone de dos tipos de paquetes, como explica Albert Molina:
Header chunk
Track chunk
5 MOLINA REVERTE, Albert. Proyecto final de Carrera “Conversor wave a MIDI en tiempo real
para guitarras eléctricas”, Escuela Universitaria de Ingeniería Técnica Industrial de Terrassa, Universidad Politécnica de Cataluña 2006, p. 17
Universidad de San Buenaventura Bogotá
30
El paquete Header chunk contiene los datos de la cabecera del
fichero MIDI y el Track chunk una cadena secuencial de datos MIDI
sobre alguno de los 16 canales MIDI disponibles. Un fichero MIDI
siempre empieza con un paquete de cabecera y uno o varios
paquetes de pista, organizándose de la siguiente forma:
MThd <length of header data>
<header data>
MTrk <length of track data>
<track data>
MTrk <length of track data>
<track data>
Header chunk
Los caracteres 'M' 'T' h' 'd' son escritos en su valor hexadecimal y la
longitud de los datos en esta cabecera, un ejemplo de cabecera es el
siguiente:
Formato de los datos:
struct MTHD_CHUNK
{
/* Cabecera de 8 bytes*/
char ID[4]; /* Espacio para 'M','T','h','d' */
/* Será de 6 bytes, contados desde este punto*/
/* 6 bytes */
};
Valor de los datos:
4D 54 68 64 MThd ID
00 00 00 06 Longitud de MThd es siempre 6.
00 01 Tipo de formato 1.
00 02 Hay 2 Mtrks.
Universidad de San Buenaventura Bogotá
31
E7 28 Cada incremento de delta-time es un milisegundo.
Nótese que los primeros 4 bytes corresponden con los caracteres
ASCII „M‟ ‟T‟ ‟h‟ ‟d‟, y luego se indica una longitud de 6 bytes,
después de los cuales se puede buscar la siguiente cabecera.
Track chunk
El track chunk es donde se almacenan los datos de las melodías,
se trata de una cadena de eventos MIDI precedida por unos
valores denominados delta-time. La estructura de un Mtrk es la
siguiente:
struct MTRK_CHUNK
{
/* Aquí están los 8 bytes de cabecera que todo chunk debe tener */
char ID[4]; /*Este será 'M','T','r','k' */
/* Aquí van los bytes de datos */
};
<track data> = <MTrk event>+...
<MTrk event> = <delta-time> <event>
El delta time representa la cantidad de tiempo que transcurre antes
de otro evento, por ejemplo, si suceden simultáneamente, el valor
de delta time es cero. Un evento está compuesto por los siguientes
mensajes:
<event> = <MIDI event> | <sysex event> | <meta-event>
Donde MIDI event representa un evento MIDI, como la pulsación
de una nota. Sysex event envía mensajes exclusivos del sistema
MIDI, como un cambio de programa. Meta event especifica
Universidad de San Buenaventura Bogotá
32
información no MIDI utilizada por los secuenciadores, como puede
ser el nombre de la pista6.
Escritura de las notas y finalización del fichero MIDI
La escritura de las notas en el archivo y el cierre del mismo se realiza como
explica Albert Molina:
Para escribir un evento MIDI que represente una pulsación de nota
se escribe lo siguiente:
<delta-time> <0x90> <pitch> <velocidad>
Siendo 0x90 el identificador de ACTIVACIÓN NOTA MIDI.
Para un mensaje de fin de nota se procede como sigue:
<delta-time> <0x80> <pitch> <velocidad>
Siendo 0x80 el identificador de DESACTIVACIÓN NOTA MIDI.
Para finalizar el fichero MIDI se indica que se ha terminado la
información de pista y esta información se transmite con el
parámetro meta-event de tipo final de pista:
FF 2F 00
Una vez introducidos todos estos datos se crea un fichero MIDI,
usualmente caracterizado con la extensión *.mid, que es posible
reproducir en cualquier aplicación musical que soporte formato
MIDI. Luego se puede asignar a las notas introducidas cualquier
tipo de sonido existente en un sintetizador.
A continuación se muestra un ejemplo de un fichero MIDI completo:
4D 54 68 64 MThd
00 00 00 06 la longitude del chunk MThd es siempre 6.
6 Ibid, p. 21,22.
Universidad de San Buenaventura Bogotá
33
00 01 Formato 1.
00 02 2 MTrk chunks
E7 28 Cada incremento del delta-time, representa 1 milisegundo
4D 54 72 6B MTrk
00 00 00 14 longitud chunk (20)
00 delta time
FF 58 04 04 02 18 08 tonalidad
00 delta time
FF 51 03 07 A1 20 tempo
00 delta time
FF 2F 00 final de la psita
4D 54 72 6B MTrk
00 00 00 XX longitud chunk (XX) se calcula al final
00 delta time
90 24 40 inicio nota MIDI C2
86 7F delta time
80 24 30 fin nota MIDI C2
00 delta time
FF 2F 00 final de la pista
Se trata de un fichero MIDI que contiene 2 Mtrk. El primero de ellos
configura el tempo y la tonalidad en el secuenciador MIDI. El
segundo Mtrk escribe una nota MIDI de valor C2. La duración de la
nota viene especificada por la diferencia entre los delta-time
(escrito en formato variable-length). Los delta time que se escriben
posteriormente vendrán referenciados al Ultimo delta-time, es decir,
el delta time del End of Track (de valor 00) sucede a distancia 00
del delta time de fin de nota (de valor 86 7F)7.
7 Ibid p. 23, 24
Universidad de San Buenaventura Bogotá
34
2.1.5. MIDI Tool box
La caja de herramientas MIDI es una recopilación de las funciones de análisis y
visualización de archivos MIDI en el entorno informático Matlab. Además de la
manipulación sencilla y funciones de filtrado, la caja de herramientas contiene
técnicas analíticas que son adecuadas para el análisis del contexto musical8.
Fue desarrollada por Petri Toiviainen y Tuomas Eerola, empleados del
departamento de música de la Universidad de Jyväskylä, en Finlandia.
La caja de herramientas está disponible de forma gratuita bajo la licencia GNU
General Public License, se ejecuta con Matlab 6 y 7.4 (para Windows y Mac OS X
incluso en los procesadores de Intel), también funciona en Matlab 5,3 a 7,4 para
Windows. La versión actual es la 1.0.1, publicada el 24 de enero de 20069.
2.1.6. Conceptos musicales básicos
2.1.6.1 Pentagrama
El pentagrama es una pauta trazada por 5 líneas, horizontales, paralelas,
equidistantes y de igual longitud, en donde se escribe la música. Este consta de 5
líneas y 4 espacios, que se enumeran de abajo hacia arriba.
2.1.6.2 Las notas musicales
Las notas son los signos que representan los sonidos y las duraciones en la
escritura musical. Según el lugar que ocupan en el pentagrama, se dan los
diferentes sonidos, y según las figuras de las notas las duraciones.
8EEROLA, Tuomas; TOIVIAINEN, Petri. MIDI Toolbox: MATLAB Tools for Music Research.
Department of Music, University of Jyväskylä. Finlandia. 2004 [Internet]: www.jyu.fi/hum/laitokset/musiikki/en/research/coe/materials/miditoolbox 9 Ibid
Universidad de San Buenaventura Bogotá
35
Las figuras de las notas son 7:
Figura Valor
Redonda 1
Blanca 1/2
Negra 1/4
Corchea 1/8
Semicorchea 1/16
Fusa 1/32
Semifusa 1/64
Tabla 3. Figuras y duración de las notas musicales.
La unidad de duración es la redonda, en la tabla de figuras, cada figura de nota
dura la mitad de su anterior y el doble que la siguiente.
2.1.6.3 Los silencios
Los silencios son signos que representan la ausencia del sonido. Estos tienen el
mismo valor de duración de la figura de nota que representa su nombre, es decir,
un silencio de negra corresponde a la duración de una figura de negra.
Figura 1. Figuras de las notas musicales y sus respectivos silencios10
10
CORDANTONOPULOS, Vanessa. Curso completo de Teoría de la Música. 2002. p. 13.
Universidad de San Buenaventura Bogotá
36
2.1.6.4 Las claves musicales
Las claves son signos que determinan el nombre de las notas que ocupan cada
línea y cada espacio en el pentagrama. Existen 3 claves básicas en la escritura
musical:
La clave de Sol (registro agudo)
La clave de Do (registro medio)
La clave de Fa (registro grave)
2.1.6.5 El compás
Los compases son cada una de los segmentos de pentagrama, estos son
delimitados por las barras, en donde se escriben las notas. El compás es
representado mediante una fracción, cuyo numerador expresa el número de
cuentas o golpes que hay en el compás y el denominador, el valor en duración de
cada de dichos golpes. Teniendo en cuenta la redonda como unidad.
Figura 2. El compás 11
En la fórmula del compás el dígito superior expresa el número de tiempos o
cuentas y el dígito inferior el valor de cada tiempo o cuenta expresada en el
número superior.
11
CORDANTONOPULOS, Vanessa. Curso completo de Teoría de la Música. 2002. p. 12.
Universidad de San Buenaventura Bogotá
37
Para un compás de 4/4, el numerador expresa que hay cuatro tiempos, y el
denominador que cada uno de estos tiene una duración correspondiente a 1/4 de
la redonda, es decir una negra.
Un compás pude ser simple o compuesto.
Los compases simples: llamados también de división binaria, son aquellos
en los que cada tiempo equivale a un signo de valor simple (redonda,
blanca, negra o corchea), y por lo tanto sus tiempos son divisibles por
dos12.
Compases simples: 2/4 - 3/ 4 - 4/4
Los compases compuestos: llamados también de división ternaria, son
aquellos en los que cada tiempo equivale siempre a un signo de valor con
puntillo (redonda con puntillo, blanca con puntillo, negra con puntillo o
corchea con puntillo), y por lo tanto sus tiempos son divisibles por tres13.
Compases compuestos: 6/8 - 9/8 - 12/8
2.1.7. Instrumentos musicales de viento
Los instrumentos musicales de viento, también llamados aerófonos producen el
sonido a través de la vibración de la columna de aire contenida en su interior. Esta
familia de instrumentos se caracteriza por su gran diversidad tímbrica
La frecuencia producida por el instrumento depende de la longitud del tubo, a
menor longitud más agudo es el sonido. Para variar la longitud del tubo se
emplean pistones o llaves
12
DANHAUSER, A. Teoría de la música. Editorial Ricordi; 2005. p. 80 13
Ibid. p. 82
Universidad de San Buenaventura Bogotá
38
2.1.7.1 Instrumentos de Viento-Metal
Son instrumentos construidos en bronce y otras aleaciones metálicas. Su boquilla
tiene forma de embudo. La longitud del tubo se controla mediante pistones y
válvulas. Algunos de los instrumentos más conocidos son la trompeta, trompa,
trombón y tuba.
Figura 3. Instrumentos de Viento-Metal14
2.1.7.2 Instrumentos de Viento-Madera
Denominados así por estar construidos en madera, sin embargo en la actualidad
algunos de ellos están hechos de metal.
Constan de varios agujeros a lo largo el tubo, que son tapados con los dedos o
mediante llaves.
Como explica Alicia Rodríguez, la boquilla puede ser:
14
RODRIGUEZ BLANCO, Alicia. Música. Editorial Editex. 2007. p. 76.
Universidad de San Buenaventura Bogotá
39
Bisel: El aire vibra al romper en el corte del bisel produciendo
así el sonido. A este tipo pertenece la flauta dulce y traversa.
Lengüeta simple: es una caña fina y flexible que vibra por la
acción del soplo. A este tipo pertenecen el clarinete y el
saxofón.
Lengüeta doble: el sonido se produce por la vibración de dos
lengüetas o cañas. A este tipo pertenecen el oboe, el corno
inglés y el fagot15.
Figura 4. Instrumentos de Viento-Madera16
2.1.7.3 El clarinete
Esta construido a base de madera, consta de cinco partes de madera conectadas
por anillos metálicos: boquilla cabeza, cuerpo superior, cuerpo inferior y pabellón.
15
Ibid. p 75. 16
Ibid. p 75.
Universidad de San Buenaventura Bogotá
40
Su registro intermedio es débil, sin embargo el alto es bastante claro. El más
empleado es el afinado en Si bemol.
Figura 5. Clarinete17
Extensión de los clarinetes:
Los clarinetes son de varios tamaños, pero el Sib y el La son los más usados en la
actualidad. Como todos los clarinetes tienen la misma digitación, diferentes
tamaños producen diferentes notas. Así, por ejemplo, el Do central en un clarinete
en Do sonará como está escrito, pero en un clarinete en Sib un Do central escrito
suena Sib. Esto es, porque es un instrumento transpositor 18.
Figura 6. Extensión de los clarinetes19
17
SEISDEDOS, Marcela. Apreciación Musical I. Argentina. Disponible en: http://apreciacionmusical1emba.blogspot.com/2010/10/el-clarinete.html 18
Ibid 19
Ibid
Universidad de San Buenaventura Bogotá
41
2.1.7.4 Rango de frecuencias de los Instrumentos de Viento
A continuación se presenta una tabla en la que se detalla en rango de frecuencias
de los distintos instrumentos musicales de viento.
Instrumento Rango en Frecuencia (Hz) Rango en notas musicales
MADERA Saxo Soprano 261,63 - 2099 C4 - C7
Saxo Alto 138,59 - 1318,5 C#3 - E6
Saxo Tenor 103,89 - 622,25 G#2 - D#5
Clarinete Soprano 146,63 - 1568 D3 - G6
Clarinete Alto 97,94 - 830,61 G2 - G#5
Clarinete Bajo 73,416 - 622,25 D2 - D#
Oboe 233,08 - 1396,9 A#3 - F6
Corno Ingles 164,81 - 932,33 E3 - A#5
Fagot 58,270 - 622,25 A#1 - D#5
Flauta 261,63 - 2099 C4 - C7
METAL Corneta-Trompeta 164,81 - 932,33 E3 - A#5
Trombón y Bombardino 55 - 415,30 A1 - G#4
Tuba 49 - 578 G1 - D5
Tabla 4. Rango de frecuencias de los instrumentos musicales de Viento
Universidad de San Buenaventura Bogotá
42
2.2. MARCO TEÓRICO
2.2.1. Detección de Pitch
La detección de pitch consiste en hallar la frecuencia fundamental de una señal de
audio analizando un segmento o segmentos de la señal completa.
La detección de pitch es usada para diferentes aplicaciones, como lo expresa
Roger Jang:
Reconocimiento melódico
Ubicación de una canción entre una base de datos de canciones, a partir
de cantar una melodía.
Transcripción musical automática
Reconocimiento de tono para lenguaje, mediante la identificación de cada
silaba en una expresión hablada.
Análisis prosódico para aplicaciones de texto escrito a hablado.
Pronunciación asistida para entrenamiento de la pronunciación de un
idioma.
Reconocimiento del habla20.
La forma general de realizar el análisis del audio para la detección de pitch
consiste en aplicar la técnica de “frame blocking”, como se describe a
continuación:
Se separa la señal en segmentos (frames) de 20ms o de valores cercanos
este valor.
Se halla el pitch de cada segmento.
Se elimina el pitch de los segmentos que correspondan a silencios.
20
JYH-SHING, Roger Jang. Audio Signal Processing and Recognition. 2005. p. 90
Universidad de San Buenaventura Bogotá
43
Se suaviza la curva de pitch mediante filtros u otros métodos.
Para realizar el proceso de forma correcta es necesario determinar el tamaño de
cada segmento (frame size), teniendo en cuenta que éste debe ser tan largo como
para cubrir al menos dos períodos de la frecuencia buscada y que su tamaño debe
ser tal, que puedan captarse suficientes cambios de la señal en el tiempo. En el
proceso se permite el uso de sobreposición de muestras (overlap) entre cada
segmento y su adyacente, con el objetivo de reducir la discontinuidad entre cada
uno de ellos. Si se considera el rango de frecuencias manejadas por un clarinete
soprano, que va desde una frecuencia inferior, Finf=146.84 Hz, hasta una
frecuencia superior, Fsup=1568 Hz; y un audio del instrumento con una frecuencia
de muestreo, Fs=44100, el período fundamental adecuado en muestras para cada
frecuencia debe ser al menos: T=Fs/F, donde T es el período y F la frecuencia
buscada. Por lo tanto, Tinf= 332.326*2 muestras (valor redondeado), y
Tsup=28.125*2(valor redondeado). Para identificar cualquier frecuencia en el
rango en cuestión, se debe escoger un tamaño de segmento que tenga al menos
2 veces el período de la frecuencia inferior, pues este periodo contiene la cantidad
de muestras necesarias para identificar todas las frecuencias hasta la frecuencia
superior21.
Existen en la literatura muchos métodos usados para hallar la frecuencia
fundamental de un segmento de audio, los más conocidos pueden clasificarse
como algoritmos de dominio temporal y algoritmos de dominio espectral.
21 KOSTEK, Bo˙zena. Perception-Based Data Processing in Acoustics. Editorial In-chief. 2005.
p.53,54.
Universidad de San Buenaventura Bogotá
44
2.2.2. ALGORITMOS DE DETECCIÓN DE PITCH DE DOMINIO TEMPORAL
Se han realizado diferentes estudios sobre este tipo de métodos a lo largo de los
años, tal como lo describe Kostek:
Los diferentes algoritmos de dominio temporal como AMDF, desarrollados por:
(Wize y otros 1976),(Quian y Kimaresan 1966; Talkin 1995; Ying y otros 1996) y
métodos modificados de AMDF (Chang y Su 2002; Dziubinski y Kostek 2004;
Kostek 2004a, 2004b; Medan y otros 1988; Meiet al 2001; Szczerba y Czyzewski
2005,Zhang y otros 2002); hallan el período mediante un análisis de cruces por
cero, ó de los picos y valles de la señal. Los algoritmos basados en
autocorrelación (Rabiner y Schafer 1978) funcionan de manera similar, operando
sin embargo, en la autocorrelación de la señal. Este enfoque se basa en el
supuesto de que la señal procesada es de tipo cuasi-periódica, y sus períodos
consecutivos son similares entre sí22.
2.2.2.1 ACF ( Autocorrelation Function / Función de Autocorrelación)
Este es un método en el dominio del tiempo, que estima la similitud entre la señal,
y su versión retrasada, a través de la función de autocorrelación:
(3)
Donde es el intervalo de tiempo en términos de puntos de muestreo. El valor de
que maximiza , en un intervalo especificado, es seleccionado como el
periodo en puntos de muestreo. La siguiente figura muestra su funcionamiento:
22
Ibid p. 52.
Universidad de San Buenaventura Bogotá
45
Figura 7. ACF- Función de autocorrelación23
En otras palabras se mueve la versión retrasada n veces y se calcula el producto
interno de las partes superpuestas para obtener n valores de acf.
El máximo acf ocurre en el primer punto, lo que claramente no es lo buscado, por
esta razón se fijan en cero los valores alrededor del primer máximo, así es posible
identificar el segundo máximo, y con esto localizar el periodo en muestras24.
2.2.2.2 AMDF (Average Magnitude Difference Function/ Magnitud promedio
de la Función Diferencia)
El concepto de AMDF, es muy cercano al de ACF, excepto porque se calcula la
distancia, en lugar de la similitud entre la señal y su versión retrasada, como se
muestra en la siguiente fórmula:
(4)
23
JYH-SHING, Roger Jang. Audio Signal Processing and Recognition. 2005. p. 92. 24
Ibid. p. 92
Universidad de San Buenaventura Bogotá
46
Donde es el intervalo de tiempo en términos de puntos de muestreo. El valor de
que minimiza en un intervalo especificado, es seleccionado como el
periodo en puntos de muestreo. La siguiente figura muestra su funcionamiento:
Figura 8. AMDF- Magnitud promedio de la Función Diferencia25
En otras palabras se mueve la versión retrasada n veces y se calcula la suma
absoluta de la diferencia de las partes superpuestas para obtener n valores de
amdf 26.
2.2.2.3 SIFT (Simplified inverse filtering technique/ Técnica de filtrado
inverso simplificado)
Es una versión simplificada de la técnica de filtrado inverso que reune las ventajas
de los métodos de la autocorrelación y cepstrum .Fue propuesto por J.D Markel en
1972. El SIFT busca la periodicidad de una señal estimada por filtrado inverso, y
25
Ibid. p. 102 26
Ibid. p. 102
Universidad de San Buenaventura Bogotá
47
es uno de los métodos más comúnmente usados en equipos comerciales. Es
usualmente empleado en sistemas de reconocimiento de voz27.
2.2.3. ALGORITMOS DE DETECCIÓN DE PITCH DE DOMINIO ESPECTRAL
Los algoritmos de dominio espectral dependen de una transformación de dominio
temporal a espectral, demandando unos altos costes de computación. La FFT
(Fast Fourier Transform), sin embargo, puede ser aplicada efectivamente en los
procesadores actuales. En este tipo de algoritmos se puede diezmar la señal sin
perder fiabilidad de detección. Con ellos se tiene mayor control sobre la situación
de la energía de los armónicos, así como la relación entre ellos.
El problema principal de estos algoritmos es que un análisis simple del espectro
resultante no es suficiente para determinar el periodo fundamental, por lo que es
necesario un análisis posterior como la transformación a Cepstrum o el análisis de
los armónicos más destacados.
Los algoritmos de dominio espectral operan sobre el espectro de la señal, a
continuación se mencionan algunos de los estudios realizados sobre estos
métodos, y sus conclusiones generales:
(McAulay y Quatieri 1990, d'Alessandro, 1995; Ahn y Holmes 1997).
(Noll, 1967),(Kunieday otros 1996) – Basados en el supuesto de que la frecuencia
fundamental de la de la señal y sus armónicos están representados por algunos
de los picos del espectro28.
27
Ibid. p. 109 28
Opcit. KOSTEK. p. 53.
Universidad de San Buenaventura Bogotá
48
2.2.3.1 HPS (Harmonic Product Spectrum/ Producto del espectro armónico)
El espectro de la señal de entrada debe constar de una serie de picos, lo que
corresponde a la frecuencia fundamental y sus componentes armónicos que son
múltiplos enteros de la frecuencia fundamental.
Al comprimir el espectro determinado número de veces (disminución de la
resolución), y compararlo con el espectro original, se pueden ver los picos de los
armónicos más fuertes. El primer pico en el espectro original coincide con el
segundo pico en el espectro comprimido por un factor de dos, que coincide con el
tercer pico en el espectro comprimido por un factor de tres. Por lo tanto, cuando
los espectros de varios se multiplican entre sí, el resultado es la frecuencia
fundamental.
En el método, primero se divide la señal de entrada en segmentos mediante la
aplicación de una ventana de Hanning, donde se les da el tamaño de la ventana
como argumento de entrada. Para cada ventana, se utiliza la transformada de
Fourier de corto tiempo, para convertir la señal de entrada desde el dominio del
tiempo al dominio de frecuencia. Una vez que la señal de entrada está en el
dominio de la frecuencia, se aplica la técnica de producto del espectro armónico
de cada ventana. El HPS implica dos pasos: reducción de la resolución y la
multiplicación. Para disminuir la resolución, se comprime el espectro dos veces en
cada ventana de muestreo: la primera vez, se comprime el espectro original por
dos y la segunda vez, por tres. Una vez hecho esto, se multiplica el espectro de
los tres juntos y se encuentra la frecuencia, que corresponde al pico (valor
máximo). Esta frecuencia representa la frecuencia fundamental de esa ventana en
particular29.
29 MIDDLETON, Gareth. “Pitch Detection Algorithms”. 2003. p. 4,5
Universidad de San Buenaventura Bogotá
49
2.2.3.2. CEPSTRUM
El nombre cepstrum deriva de invertir las cuatro primeras letras de spectrum.
La señal original se transforma mediante una transformada rápida de Fourier
(FFT) y el espectro resultante se convierte en una escala logarítmica.
Este espectro en escala logarítmica se transforma utilizando el mismo algoritmo de
la FFT para obtener la potencia cepstrum. La potencia cepstrum revierte al
dominio del tiempo y muestra los picos correspondientes al período de la
frecuencia.
(5)
La frecuencia fundamental es estimada de la misma forma que en el método de
autocorrelación30.
30 GERHARD, David. “Pitch Extraction and Fundamental Frequency: History and Current
Techniques”. University of Regina. 2003. p.12
Universidad de San Buenaventura Bogotá
50
3. METODOLOGÍA
3.1. ENFOQUE DE LA INVESTIGACIÓN
El presente proyecto sigue un enfoque Empírico-analítico, debido a que se ha
realizado una investigación científica mediante la implementación y análisis de
algoritmos para la detección de frecuencia, y la realización de pruebas para
verificar su eficiencia en los resultados obtenidos. Logrando desarrollar un
algoritmo que permite la transcripción musical del clarinete.
3.2 LÍNEA DE INVESTIGACIÓN DE USB / SUB-LÍNEA DE FACULTAD / CAMPO
TEMÁTICO DEL PROGRAMA
La línea de investigación en que se desarrolla el presente proyecto de
investigación es: Tecnologías actuales y sociedad, ya que con su desarrollo
se espera brindar soluciones efectivas a los problemas con que se
enfrentan quienes están vinculados con la producción musical,
especialmente durante el estudio o la composición de piezas musicales.
La sub-línea de la facultad es: Procesamiento de señales digitales y/o
analógicas; ya que ya que se pretenden realizar diferentes procesos sobre
una señal de audio como filtrado, cuantización, entre otros, para convertirlo
en un archivo MIDI.
El presente proyecto de investigación se realiza dentro del campo de
Análisis y procesamiento de señales.
Universidad de San Buenaventura Bogotá
51
3.3. TÉCNICAS DE RECOLECCIÓN DE INFORMACIÓN
En este proyecto, con el fin de cumplir con los diferentes, objetivos general y
específicos, se dispone la recolección de información de la siguiente forma:
Por medio del software MATLAB, son analizados diferentes métodos de detección
de pitch, estableciendo un algoritmo base que permita su respectiva aplicación y
posterior evaluación, para poder seleccionar entre ellos el más adecuado para el
clarinete.
Se establece un algoritmo que permite la detección del velocity. Son realizadas las
pruebas pertinentes sobre segmentos de audio, para así evaluar el algoritmo
propuesto.
Es evaluado el método propuesto de detección de tempo, realizando pruebas
teniendo en cuenta la información musical plasmada en los audios, el compás, la
acentuación y las figuras ejecutadas en cada grabación.
HIPÓTESIS
Llevando a cabo un análisis de los diferentes algoritmos de detección de pitch,
velocity y de cálculo de tempo, proponiendo un algoritmo base para cada función,
realizando las pruebas y comparaciones del desempeño de cada uno teniendo en
cuenta las características musicales del instrumento al que está destinada la
aplicación, estableciendo la creación del fichero MIDI a partir de la herramienta
MIDI Tool Box, y finalmente realizando la programación respectiva en MATLAB,
es posible desarrollar una aplicación que permite convertir un archivo de audio en
formato wav, de un instrumento melódico, en este caso el clarinete, a un archivo
con extensión .mid .
Universidad de San Buenaventura Bogotá
52
3.4. VARIABLES
3.4.1. Variables Independientes
La calidad de la grabación, teniendo en cuenta la captura y los demás
procesos realizados en la generación del archivo de audio a convertir.
La calidad, limpieza y métrica de las ejecuciones musicales grabadas
para su posterior conversión.
La correcta configuración de los parámetros de conversión ingresados
por el usuario, necesarios para llevar a cabo el proceso de conversión.
3.4.2. Variables Dependientes
Grabaciones con un una baja relación señal a ruido, pueden causar que
el conversor identifique como notas musicales segmentos que
correspondan a silencio.
Para una correcta identificación de la frecuencia, se requiere que las
notas sean claras, que no estén acompañadas de sonidos generados
por los mecanismos del instrumento, ni por fallas en la ejecución por
parte del instrumentista (ruidos, golpes, entre otros). Pues esto puede
ocasionar que se identificaran como notas sonidos que no hacen parte
de la verdadera ejecución del instrumento.
Una inadecuada configuración de los parámetros de conversión, puede
ocasionar errores en la detección del pitch, la conversión y por tanto en
los resultados obtenidos para la escritura del archivo MIDI.
Universidad de San Buenaventura Bogotá
53
4. DESARROLLO INGENIERIL
4.1. SELECCIÓN DEL MÉTODO DE DETECCIÓN DE PITCH
Para la selección del método de detección de pitch, son preseleccionados y
analizados, los métodos más conocidos, citados en la gran mayoría de
publicaciones acerca del tema, según la investigación realizada para el presente
proyecto. Teniendo en cuenta las características de los métodos descritas en el
marco teórico, que son el resultado de un gran número de estudios realizados y
documentados por diferentes autores a lo largo de las últimas décadas, los
métodos seleccionados son:
ACF (Autocorrelation Function/ Función de Autocorrelación)
AMDF (Average Magnitude Difference Function/ Magnitud Promedio de la
Función de Diferencia)
SIFT (Simplified inverse filtering technique/ Técnica de Filtrado Inverso
Simplificado)
HPS (Harmonic Product Spectrum/Producto del Espectro Armónico)
CEPSTRUM
Para el presente proyecto se realiza un estudio comparativo entre los 5 métodos
de pitch seleccionados. El análisis se realiza sobre una grabación de un clarinete
ejecutando la escala de Si bemol (Bb) mayor desde un Re3 (D3) hasta un Mi
bemol 6 (Eb6). Por medio del software MATLAB, se evalúa el desempeño de cada
uno de los métodos, mediante la aplicación de los algoritmos base propuestos en
Universidad de San Buenaventura Bogotá
54
el libro “Audio Signal Processing and Recognition31”. Según sus resultados, se
selecciona el más adecuado y eficiente para los propósitos del proyecto.
La evaluación del desempeño de los métodos se realiza de la siguiente forma:
Teniendo en cuenta que en el presente proyecto, posterior al proceso de
detección de pitch, se necesita desarrollar un algoritmo de segmentación, que
corresponde a establecer el inicio y final de las notas, es decir, el momento en el
que estas ocurren y sus duraciones, es necesario tener en cuenta la mínima
duración de una nota. Sabiendo que las señales en general son más o menos
estables en períodos cortos de tiempo, por ejemplo entre 20 y 30 ms32, y que la
figura de nota o la duración de la ejecución musical más rápida está en el orden
de los 10 milisegundos, correspondiente a una semifusa en tresillo a un tempo de
250 bpm; se escoge un tiempo de análisis de 20 ms, pues este valor se encuentra
en el intervalo mencionado, y corresponde a una duración de nota de dos veces la
ejecución más rápida, permitiendo identificar la mayoría de duraciones musicales
posibles.
Se analizan con cada método 20 ms de cada una de las notas de la escala
ejecutada por el clarinete, para un total de 23 notas. La frecuencia obtenida con
cada método, se compara con la obtenida mediante un análisis en frecuencia
realizado en el software Adobe Audition. De acuerdo al número de aciertos y
errores de cada uno de los métodos en la detección de la frecuencia, se determina
su eficiencia.
En la siguiente tabla se detallan los resultados obtenidos para cada método.
En la primera columna se encuentran las notas musicales ejecutadas, en la
segunda la frecuencia ideal de cada nota y en la tercera, la frecuencia real
31
JYH-SHING, Roger Jang. Audio Signal Processing and Recognition. 32
Ibid p.12
Universidad de San Buenaventura Bogotá
55
producida por el instrumento. En las siguientes columnas se encuentran las
frecuencias halladas con cada uno de los métodos. Las casillas resaltadas en
amarillo corresponden a errores en el cálculo de las frecuencias, las casillas sin
resaltar, a los aciertos.
Nota Frecuencia ideal
(Hz) FFT Adobe Audition
(Hz) AMDF (Hz) ACF (Hz) SIFT (Hz) CEPSTRUM
(Hz) HPS (Hz)
D3 146,83 145,94 72,89 146,02 145,06 145,54 100
Eb3 155,56 154,2 77,232 154,73 154,73 155,28 100
F3 174,61 174,7 87,32 175 175 50 50
G3 196 198,64 66,21 199,54 200,45 50,05 200
A3 220 223,5 74,61 225 223,85 50 100
Bb3 233,08 235,39 78,46 235,82 234,57 235,82 100
C4 261,63 264,25 66,11 265,66 268,9 267,27 100
D4 293,66 294,05 73,5 295,97 288,23 290,13 300
Eb4 311,13 311,95 62,37 312,76 312,76 312,76 300
F4 349,23 352,75 70,56 355,64 355,64 355,64 350
G4 392 395,25 65,91 397,29 397,29 397,29 400
A4 440 441,21 63 441 445,45 445,45 450
Bb4 466,16 467,07 66,71 469,14 469,14 469,14 400
C5 523,25 522,95 65,43 525 518,82 525 150
D5 587,33 589,86 73,74 588 588 588 600
Eb5 622,25 625,15 69,44 630 621,12 621,12 150
F5 698,46 708,39 64,37 711,29 711,29 711,29 700
G5 783,99 793,92 61,08 787,5 397,29 397,29 400
A5 880 890,2 81,06 900 445,45 900 450
Bb5 932,33 940,31 85,46 938,29 469,14 469,14 950
C6 1046,5 1044,2 61,42 1050 1050 525 1050
D6 1174,66 1180,3 62,11 1191,89 393,75 393,75 600
Eb6 1244,51 1269,9 66,81 1260 424,03 50 650
Tabla 5. Resultados obtenidos en la detección de frecuencia, con los diferentes métodos de
detección de pitch.
Método AMDF
Los resultados obtenidos, reflejan una eficiencia del método del 0%, al no
obtener ningún acierto en la detección de la frecuencia. Por lo tanto no es
adecuado para la identificación de las notas.
Universidad de San Buenaventura Bogotá
56
Método ACF
El método muestra una eficiencia del 100%, acertando en la identificación
de todas las notas de la escala, lo que lo convierte en un candidato para el
algoritmo de conversión.
Método SIFT
Los resultados obtenidos, reflejan una eficiencia del 78.26%, acertando en
18 de las 23 notas analizadas, y arrojando errores en las frecuencias por
encima F5 (698,46 Hz).
Método CEPSTRUM
El método presenta una eficiencia del 65,22%, acertando 15 de las 23
notas, y reflejando mejores resultados en el cálculo de las frecuencias
pertenecientes al registro medio del clarinete.
Método HPS
Presenta una eficiencia del 43,48%, acertando solamente 10 de las 23
notas analizadas a lo largo del registro del instrumento, lo que lleva a su
eliminación entre las opciones para la detección de pitch del algoritmo de
conversión.
En general los métodos de detección de pitch son susceptibles al tamaño del
segmento analizado (frame size), los métodos de dominio temporal suelen
funcionar mejor en segmentos cortos; por el contrario, los de dominio espectral
tienen un mejor rendimiento en segmentos largos33. Es por esto que en el análisis
la mayoría de los métodos muestran resultados muy pobres en la detección, pues
33 KOSTEK, Bo˙zena. Perception-Based Data Processing in Acoustics. Editorial In-chief. 2005. p.
53,54
Universidad de San Buenaventura Bogotá
57
todos han sido implementados usando un segmento de 20ms, hecho que favorece
el análisis solo para algunos de ellos.
Es realizada una prueba adicional analizando dos notas Re3 (D3) y La3 (A3),
usando todos los métodos y variando el tamaño del segmento desde 5ms hasta
100ms. El audio es analizado comenzando un punto x ubicado en
aproximadamente la mitad de la duración de la nota, hasta el tamaño del
segmento que se indique en cada caso. Es decir, para un tamaño de segmento
(frame size) de 5 ms, se analiza la nota, desde el punto x hasta 5 ms después;
para un frame size de 20ms, se analiza desde el punto x hasta 20 ms después.
Este proceso se realiza con todos los métodos, detectando la frecuencia con
tamaños de segmento que van desde 5 ms hasta 20 ms, por lo cual cada nota
tiene 96 valores por método (Ver Anexo 1). A continuación se resumen los
resultados obtenidos.
AMDF identifica correctamente el Re3 para segmentos de audio
cuyo tamaño se encuentre en el intervalo de 6 ms hasta 13ms, para
todos los demás valores falla.
La nota La3 es identificada correctamente utilizando valores de
frame size que van de 5 ms hasta 8 ms y desde 35 ms hasta 100 ms.
Los resultados muestran que AMDF es un algoritmo muy susceptible
al tamaño del segmento analizado, descartándolo totalmente de la
selección.
ACF identifica correctamente Re3, para tamaños de segmento desde
9 ms hasta 100 ms. La nota La3 es identificada correctamente desde
6 ms hasta 100 ms.
La prueba reafirma que ACF es un algoritmo apropiado para las
necesidades del proyecto, debido la estabilidad y eficiencia
Universidad de San Buenaventura Bogotá
58
mostrada en la identificación de las frecuencias de las notas, en
segmentos pequeños y grandes.
SIFT muestra ser tan estable como ACF en este rango de
frecuencias, su problema aparece en la identificación de las notas
más altas, como se evidencia en la prueba anterior.
CEPSTRUM identifica correctamente Re3 en segmentos desde 20
ms hasta 79 ms, con un acierto en 7 ms, para todos los demás
valores falla. Identificando La3, CEPSTRUM acierta en valores de
13, 15, 17 y 18 ms, y desde 21ms hasta 100ms. Por la inestabilidad y
poca eficiencia del método, se descarta de la selección.
HPS tiene varios aciertos identificando Re3, en segmentos
pequeños, correspondientes a 8, 27 y 28 ms. Los valores se
estabilizan desde 40 ms en adelante, pero para distintos valores de
frame size, no identifica correctamente la frecuencia. Identificando
La3 muestra un comportamiento semejante, pero con mas aciertos
desde 26 ms en adelante.
Todas las pruebas realizadas muestran que de los métodos analizados, ACF es el
algoritmo más eficiente en la identificación de pitch, más estable por ser menos
susceptible al tamaño de los segmentos y por lo tanto el algoritmo más adecuado
para la realización del proyecto.
Universidad de San Buenaventura Bogotá
59
4.2. DESARROLLO DEL SOFTWARE CONVERSOR WAV A MIDI PARA
CLARINETE
El software comprende cuatro fases generales, a través de las cuales de
desarrolla el proceso de conversión:
Figura 9. Fases generales conversor Wav a MIDI
4.2.1. Fase de inicialización
En la apertura del programa las variables adquieren sus valores predeterminados
y se hacen globales, de esta forma pueden ser invocadas en todas las subpartes
que constituyen la interfaz gráfica y el programa.
Así mismo, en cada una de las secciones del programa principal, y de los
subprogramas, se inicia el código haciendo globales las variables que son
empleadas en dicha sección.
Universidad de San Buenaventura Bogotá
60
Para iniciar el proceso, el usuario puede elegir abrir un archivo de audio o grabar
uno, el cual es almacenado y graficado para su posterior procesamiento y
reproducción.
Figura 10. Fase de Inicialización
4.2.1.1 Abrir un archivo de Audio
Al abrir un archivo de audio, se despliega una ventana que permite al usuario
acceder a la ubicación del archivo de audio que desea importar, mediante la
función “uigetfile”, que permite cargar archivos desde cualquier ubicación del disco
duro o de medios de almacenamiento externos. Este proceso se ejecuta en el
programa como se ve a continuación.
[FileName Path]=uigetfile({'.wav'},'Cargar audio');
Una vez se obtiene el nombre y la dirección del archivo, se procede a
almacenarlos en la variable “dir”, mediante la función “strcat”, función que se
encarga de enlazar horizontalmente los elementos de los vectores con caracteres,
en este caso “FileName” que almacena el nombre del archivo, y “Path” que
almacena la dirección.
Universidad de San Buenaventura Bogotá
61
dir=strcat(Path,FileName);
Posteriormente, mediante la función “wavread”, el archivo de audio es leído,
almacenando sus características en tres vectores distintos. En el vector columna
“y”, en un rango de -1 a 1, se almacenan los valores de amplitud a lo largo del
audio. En el vector “fs”, se almacena la frecuencia de muestreo, y en el vector
“nbits”, la resolución en bits.
[y,fs,nbits]=wavread(dir);
Inmediatamente después se grafica la forma de onda del audio cargado en el
campo axes(formadeonda) de la interfaz gráfica, de la siguiente manera:
L=length(y);
t=(0:L-1)*(1/fs);
axes(handles.formadeonda)
plot(t,y)
title('Señal de entrada en tiempo (Seg)');
4.2.1.2 Grabar un archivo de Audio
Al seleccionar esta opción, el programa inicializa otro GUI de nombre “Rec”, en el
que se ejecuta el proceso de grabación, y que es llamado desde el GUI principal,
de la siguiente forma:
Rec()
El usuario debe ingresar el valor en segundos de la duración que considera tendrá
el audio a grabar, dicha duración se obtiene y almacena, mediante la siguiente
línea de código:
Universidad de San Buenaventura Bogotá
62
duracion=str2double(get(handles.duracion_grabacion,'String'))
;
Siendo, “duracion_grabacion” el campo de texto asignado para la digitación del
valor por parte del usuario, y “duración”, la variable en la que se almacena el
mismo.
Se verifica entonces, que el valor obtenido sea numérico, de no ser así, se
generará un aviso de error y se asignara como duración el valor mínimo permitido,
que corresponde a 3 seg. Este es almacenado en la variable que posee el valor
final “duracion_audio_grabado”, de la siguiente manera.
if isnan(duracion)
errordlg('El valor debe ser numérico, se establece el valor
mínimo, si desea puede cambiarlo','ERROR')
set(handles.duracion_grabacion,'String',3);
duracion=3;
duracion_audio_grabado=duración;
end
Para que el valor sea permitido debe ser mayor a 3 seg e inferior a 240 seg, si el
valor no cumple con dichos requisitos, el programa alertara que existe un error, y
reiniciará la captura de los datos, como se detalla a continuación.
if (duracion<3)
errordlg('La duración debe tener un valor mínimo de 3
seg','ERROR')
set(handles.duracion_grabacion,'String',0);
end
if (duracion>240)
Universidad de San Buenaventura Bogotá
63
errordlg('La duración debe tener un valor máximo de 240
seg','ERROR')
set(handles.duracion_grabacion,'String',0);
end
Si los datos son válidos, el programa almacenará el valor en la variable final
“duracion_audio_grabado”:
if ((duracion>2)&&(duracion<241))
duracion_audio_grabado=duracion;
end
Al presionar el botón “Rec” , se determina la frecuencia de muestreo en la variable
“Fs”.
Fs=44100;
Mediante la función “wavrecord”, se almacena el archivo de audio en el vector
“audiograbado”, con una duración equivalente al valor almacenado en la variable
“duracion_audio_grabado”, una frecuencia de muestreo correspondiente al valor
almacenado en “Fs”n y en un solo canal para monofónico (1=mono, 2=stereo).
wavrecord(Número de muestras,Frecuencia de muestreo,# de canales);
audiograbado=wavrecord(duracion_audio_grabado*Fs,Fs,1);
Posteriormente el archivo es escrito con extensión “.wav”, mediante la función
“wavwrite”, con las características con que fue grabado. Es almacenado en la
carpeta de origen con el nombre “Grabación”.
wavwrite(audiograbado,Fs,'Grabación.wav');
Universidad de San Buenaventura Bogotá
64
El archivo grabado es ahora leído mediante la función “wavread”, y almacenado en
el vector “y”, para su visualización, reproducción y posterior análisis y conversión.
El proceso de visualización de la forma de onda se realiza de la misma manera
que en la sección “Abrir archivo de audio”.
[y, fs]=wavread('Grabación.wav');
Al finalizar el proceso de cargar o grabar un archivo de audio, se hace la variable
“audiocargado” igual a 1, esta variable es usada posteriormente en el programa
para validar que el archivo de audio haya sido cargado o grabado
4.2.1.3 Reproducción de un archivo de audio
Para reproducir un archivo de audio, el programa verifica que ya haya sido
cargado o grabado, de ser así, es reproducido mediante la función “sound”. En
caso contrario aparece un aviso que indicará que existe un error y solicitará sea
cargado el archivo de audio.
if audiocargado==1
sound(y,fs);
else
errordlg('Debe cargar el archivo de audio','ERROR')
end
Universidad de San Buenaventura Bogotá
65
4.2.2. Fase de Configuración de parámetros de conversión
Figura 11. Fase de Configuración parámetros de conversión
Al seleccionar esta opción, el programa inicializa otro GUI de nombre
“Configuracion_Datos_Conversion”, en el que se ejecuta el proceso de adquisición
de datos requeridos en la conversión, y que es llamado desde el GUI principal, de
la siguiente forma:
Configuracion_Datos_Conversion()
Al inicializar el subprograma las variables implicadas en el mismo adquieren sus
valores predeterminados.
Universidad de San Buenaventura Bogotá
66
4.2.2.1 Frecuencia Mínima
El usuario debe ingresar la frecuencia mínima de la tesitura del instrumento
ejecutado en el archivo de audio, en el campo de texto asignado para esto.
frecminima=str2double(get(handles.frecmin,'String'));
Este valor es obtenido del campo de texto “frecmin” mediante la función “get”, y
almacenado en la variable “frecminima”.
Se verifica inicialmente que el valor sea numérico, de lo contrario se informará de
la existencia de un error, y se reiniciará la captura de datos.
if isnan(frecminima)
errordlg('El valor debe ser numérico','ERROR')
end
El valor debe ser superior a 26 e inferior a 4301, debido a que este es el rango de
frecuencia de los instrumentos musicales. Adicionalmente debe ser inferior y
diferente a la frecuencia mayor, y se sugiere que este separado de la frecuencia
mayor, mínimo una octava. Si el valor ingresado por el usuario, cumple con los
requisitos, es almacenado en la variable final “fmin”, como se muestra a
continuación.
if isnan(frecminima)
errordlg('El valor debe ser numérico','ERROR')
end
if ((frecminima>26)&&(frecminima<4301))
frecuenciamin=frecminima;
else
errordlg('El valor debe estar entre 27 y 4301','ERROR')
set(handles.frecmin,'String',0);
Universidad de San Buenaventura Bogotá
67
frecuenciamin=0;
aviso1=1
end
if ((fmax~=0)&&(frecuenciamin<fmax))
fmin=frecuenciamin;
end
if ((fmax==0))
fmin=frecuenciamin;
end
if((fmax~=0)&&(frecuenciamin>fmax)&&(aviso1==0))
errordlg('La frecuencia mínima debe ser menor que la
máxima','ERROR')
set(handles.frecmin,'String',0);
frecuenciamin=0;
aviso=1
else
fmin=frecuenciamin;
end
if((frecuenciamin==fmax)&&(aviso1==0)&&(aviso==0))
errordlg('La frecuencia mínima y la máxima no pueden ser
iguales','ERROR')
set(handles.frecmin,'String',0);
frecuenciamin=0;
aviso4=1
else
fmin=frecuenciamin;
end
if (fmin<fmax)
if ((fmin>fmax/2)&&(aviso==0)&&(aviso1==0)&&(aviso4==0))
Universidad de San Buenaventura Bogotá
68
warndlg('La frecuencia mínima y la máxima están separadas
menos de una octava, lo que puede ocasionar errores en la
conversión','AVISO');
end
end
4.2.2.2 Frecuencia Máxima
El usuario debe ingresar la frecuencia máxima de la tesitura del instrumento
ejecutado en el archivo de audio, en el campo de texto asignado para esto.
frecmaxima=str2double(get(handles.frecmax,'String'));
Este valor es obtenido del campo de texto “frecmax” mediante la función “get”, y
almacenado en la variable “frecmaxima”.
Se verifica que el valor sea numérico, que sea mayor a la frecuencia mínima y se
sugiere que este separado de esta mínimo una octava.
El código es equivalente al de la frecuencia mínima.
4.2.2.3 Tempo
El usuario debe ingresar el valor del tempo de la pieza musical del archivo de
audio en el campo de texto “tempoingresado“. El valor se obtiene mediante la
función “get”, y es almacenado en la variable “tempoingresado” como se expresa
en la siguiente línea de código:
tempoingresado=str2double(get(handles.tempoingresado,'String'
));
Se verifica que el valor sea numérico, y que este entre 40 y 250, si el valor cumple
con los requisitos se almacena en la variable final “tempofin”.
Universidad de San Buenaventura Bogotá
69
if isnan(tempoingresado)
errordlg('El valor debe ser numérico','ERROR')
end
if ((tempoingresado>39)&&(tempoingresado<251))
tempo=tempoingresado;
else
errordlg('El valor debe estar entre 40 y 250','ERROR')
set(handles.tempoingresado,'String',0);
tempo=0;
% return;
end
global tempofin
tempofin=tempo;
4.2.2.4 Compás
El compás, factor que controla el ritmo, es introducido en los campos “numerador“
y “denominador“ por el fraccionario que expresa el mismo . Los valores se
obtienen mediante la función “get”, y son almacenados en las variables “num” y
“den”. Como se expresa en las siguientes líneas de código:
num=str2double(get(handles.numerador,'String'));
den=str2double(get(handles.denominador,'String'));
Se verifica que los argumentos de entrada sean numéricos y que los valores estén
entre 2 y 126 para el numerador, ya que es el rango permitido en los editores de
partitura; y para el denominador que sea alguno de los siguientes valores 2, 4, 8,
16, 32 ó 64 (valores correspondientes a todos los compases existentes en la
escritura musical usados por softwares editores de partituras como Sibelius y
Universidad de San Buenaventura Bogotá
70
Finale). Si los valores son válidos se almacenan en las variables finales
“numeradorcompas”, “denominadorcompas”.
Para el numerador:
if isnan(num)
errordlg('El valor debe ser numérico','ERROR')
end
if ((num>1)&&(num<126))
numcompas=num;
else
errordlg('El valor debe estar entre 2 y 126','ERROR')
set(handles.numerador,'String',0);
numcompas=0;
end
global numeradorcompas
numeradorcompas=numcompas;
Para el denominador:
if isnan(den)
errordlg('El valor debe ser numérico','ERROR')
end
if((den==2)||(den==4))||(den==8)||(den==16)||(den==32)
||(den==64))
dencompas=den;
else
errordlg('El valor debe ser par y estar entre 2 y
64','ERROR')
set(handles.denominador,'String',0);
Universidad de San Buenaventura Bogotá
71
dencompas=0;
end
global denominadorcompas
denominadorcompas=dencompas;
4.2.2.5 Cuantización
El usuario debe elegir cuantizar o no el audio grabado para su conversión a MIDI.
Si desea hacerlo, debe seleccionar la opción “Cuantizar”, dando click sobre el
Radio Button. De lo contrario no debe presionar nada.
if (get(hObject,'Value') == get(hObject,'Max'))
cuantizacion=1;
else
cuantizacion=0;
end
global cuantizar
cuantizar=cuantizacion;
Al seleccionar la opción “cuantizar”, el usuario debe elegir en el menú desplegable
“Cuantización en” el valor de la figura según la cual desea cuantizar. De no
hacerlo se cuantizará por defecto en 1/16.
El valor seleccionado es almacenado en la variable “mindur”, y es usado
posteriormente en el proceso de conversión.
global mindur
valorminimafigura=get(handles.menuminimafigura,'value');
switch valorminimafigura
case 1
mindur=16;
Universidad de San Buenaventura Bogotá
72
case 2
mindur=1;
case 3
mindur=2;
case 4
mindur=3;
case 5
mindur=4;
case 6
mindur=6;
case 7
mindur=8;
case 8
mindur=12;
case 9
mindur=16;
case 10
mindur=24;
case 11
mindur=32;
case 12
mindur=48;
case 13
mindur=64;
case 14
mindur=96; end
Universidad de San Buenaventura Bogotá
73
4.2.3. Fase de Conversión
Figura 12. Fase de conversión
Al iniciar el proceso de conversión se llaman todas las variables globales
empleadas en otras secciones del programa y en la presente sección; y se verifica
que los parámetros de conversión requeridos hayan sido ingresados
correctamente., y el archivo de audio haya sido cargado. De ser así, iniciará la
conversión, de lo contrario se avisara que existe un error y se solicitará sean
cumplidos los requisitos:
if
((tempofin~=0)&&(fmin~=0)&&(fmax~=0)&&(vm~=1)&&(numeradorcomp
as~=0)&&(denominadorcompas~=0)&& (audiocargado~=0))
Proceso de conversión
Universidad de San Buenaventura Bogotá
74
else
errordlg('Por favor ingrese los valores y verifique que su
archivo de audio este cargado','ERROR')
return;
end
A continuación se explican cada una de las partes que conforman el proceso de
conversión de Wav a MIDI:
4.2.3.1 Algoritmo para la detección de la frecuencia
Tal como se establece en los objetivos del presente proyecto, se ha desarrollado
un algoritmo que permite la detección de las frecuencias:
Al iniciar el proceso de conversión, es realizada una corrección de desplazamiento
DC, para eliminar componentes DC que puedan producir errores en el proceso de
conversión al estar alterados los niveles reales de amplitud de la señal. Este
proceso consiste en restar la media de la amplitud de la señal a cada muestra, si
la media es cero no hay componente DC en la señal, por lo tanto la señal se
mantiene intacta; de lo contrario la señal es alterada eliminándose el componente
DC existente. Esto significa que no se presentará ningún problema si es aplicado a
señales que no tengan componentes DC.
Este proceso es ejecutado en el programa mediante la función “mean” que calcula
la media del vector “y” (donde está almacenado el audio) como muestra la
siguiente línea de código:
y=y-mean(y);
Universidad de San Buenaventura Bogotá
75
El algoritmo de conversión es realizado usando una técnica llamada
“frameblocking”, que consiste en analizar el audio en pequeños
segmentos(frames) del mismo, extrayendo la información requerida teniendo en
cuenta las variaciones en el comportamiento de la señal. Para llevar a cabo la
conversión son requeridas las frecuencias máxima y mínima del rango en
frecuencia que maneja el instrumento interpretado, luego las frecuencias son
convertidas a pitch mediante la fórmula:
pitch =round(69+12*log2(frequency/440))
Luego es sumada y restada una unidad a los valores de pitch resultantes y
convertidos de nuevo en frecuencia mediante:
frequency= 440*2.^((pitch-69)/12)
Esto con el fin de agregar un semitono hacia arriba a la frecuencia máxima y uno
hacia abajo de la frecuencia mínima, para evitar que ante una pequeña
desafinación por debajo o por encima del rango de análisis, alguna ejecución
musical no sea procesada como una nota.
frequency=fmax;
maxpitch =round(69+12*log2(frequency/440))+1
fmax= 440*2.^((maxpitch-69)/12)
frequency=fmin;
minpitch =round(69+12*log2(frequency/440))-1
fmin= 440*2.^((minpitch-69)/12)
maxFreq=fmax;
minFreq=fmin;
Teniendo las frecuencias de trabajo, son creadas dos variables marcadores, “n1” y
“n2”, que determinan las partes de la función de autocorrelación que son usadas.
Universidad de San Buenaventura Bogotá
76
La función de autocorrelación busca hallar el período de la señal en cada frame,
para así hallar la frecuencia.
n1=round(fs/maxFreq); % Segmento de acf(1:n1) que no es usado
n2=round(fs/minFreq); % Segmento de acf(n2:end)que no es
usado
Antes de aplicar la técnica de “frameblocking”, son establecidos los parámetros de
análisis del proceso de conversión que son descritos a continuación:
El frameDuration es el valor en milisegundos de los segmentos de señal
analizados.
El frameSize es el número de muestras tomadas para formar la ventana de
análisis, es decir el frame.
Overlap es el número de muestras que se solapan entre el final de un frame
y en el inicio de otro. En general mas solapamiento da más puntos de
análisis, y por consiguiente resultados más suaves a través del tiempo pero
con un mayor costo computacional.
Teniendo en cuenta que las señales en general son más o menos estables en
períodos cortos de tiempo (20 - 30 ms), que la figura de nota o la duración de la
ejecución musical más rápida está en el orden de los 20 milisegundos y que la
función de autocorrelación necesita un “frameSize” que contenga tantos puntos de
ACF como muestras tiene 2 veces el período de la frecuencia buscada, se ha
escogido un “frameDuration” de 20ms para conversiones de audios de
instrumentos con una frecuencia mínima mayor o igual a 100 Hz, valor que
permite obtener suficientes puntos ACF para la correcta identificación de todas las
frecuencias en este rango Para instrumentos con frecuencias menores el
“frameSize” es descrito mediante la siguientes expresiones:
(Muestras) (6)
Universidad de San Buenaventura Bogotá
77
ó
(Segundos) (7)
Las ecuaciones anteriores permiten hallar el valor de dos veces el período de la
frecuencia buscada, determinando el tamaño adecuado de cada frame para
frecuencias por debajo de 100 Hz. El “frameSize” resultante de la expresión se
puede hacer más grande que 30 ms para frecuencias por debajo de 66.66 Hz,
pero como la nota más baja ejecutada por un clarinete, instrumento para el que se
crea el algoritmo primordialmente, corresponde a 73.416 Hz (D2-Re2), el
“frameSize” calculado se ajusta perfectamente a los requerimientos del proyecto.
Para frecuencias mayores e iguales que 100 Hz el “frameSize” escogido es de 20
ms. En este caso el “FrameSize” no se halla igual que para frecuencias menores
que 100 Hz, ya que si se hace de la misma manera para estas frecuencias, el
tamaño del frame se hace menor a 20ms, saliendo del intervalo de tiempo en el
que las señales son estables, ocasionándose errores en la posterior identificación
de las notas por la existencia de pequeños cambios de frecuencia entre un
segmento de audio y otro adyacente.
Por otra parte se establece el “overlap” en cero para reducir el tiempo de
procesamiento, y así agilizar la ejecución total del algoritmo. Esto es expresado en
las siguientes líneas de código:
if minFreq<100
frameDuration=(((fs/minFreq)*2)/fs)*1000; % Duración en ms de
cada frame
else
frameDuration=20;
end
frameSize=round(frameDuration*fs/1000);%Duración en muestras
de cada frame
Universidad de San Buenaventura Bogotá
78
overlap=0;
Con el propósito de aplicar frameblocking, se organizan los valores del vector
columna “y” (Audio) de acuerdo al “frameSize” y al overlap, mediante la función
“buffer”, en la matriz “frameMat”. Así “frameMat” se compone de tantas filas como
el “frameSize” indique y tantas columnas como la extensión del audio necesite
para almacenar sus valores (longitud de y/frameSize).
frameMat=buffer(y, frameSize, overlap);
Usando la función “size”, se almacenan en “frameNum” el número de columnas de
“frameMat”(número de frames).
frameNum=size(frameMat, 2);
Se realiza un cálculo del nivel de intensidad en cada frame, para el posterior
cálculo del “velocity” y para establecer un umbral que permita determinar que
partes del audio corresponden a las notas y que partes a silencio. Para esto, se
crea un for que va desde 1 hasta “frameNum” (número de columnas en frameMat),
la variable “frame” se va haciendo igual a cada columna de “frameMat”, luego se
suman los valores absolutos de cada frame para calcular el valor de intensidad en
cada uno de ellos. Cada valor es almacenado en un vector columna “volumen” que
tiene tantas filas como frames tiene el audio y que tiene en cada posición y en
orden el valor de intensidad.
for i=1:frameNum
frame=frameMat(:,i);
volume(i)=sum(abs(frame));
end
Se establece un umbral de intensidad:
volumeTh=max(volume)/8;
Universidad de San Buenaventura Bogotá
79
Se procede ahora a usar la función de autocorrelación para crear un vector de
pitch que indique en cada posición la nota musical de cada frame. Para esto se
crea un for que va desde 1 hasta “frameNum” (número de frames), la variable
“frame” se va haciendo igual a cada columna de “frameMat” (donde está
reorganizado el audio):
for i=1:frameNum
% fprintf('%d/%d\n', i, frameNum);
frame=frameMat(:, i);
for a=1:frameSize
acf(a)=dot(frame(1:frameSize-a+1), frame(a:frameSize));
end
progressbar(0.0223+i*(pg));
acf(1:n1)=-inf;
acf(n2:end)=-inf;
[maxValue, maxIndex]=max(acf);
freq=fs/(maxIndex-1);
freqgrafic(i)=freq;
pitch(i)=round(freq2pitch(freq));
end
Dentro del ciclo es creado otro for que va desde 1 hasta “frameSize” (número de
filas de frameMat) donde es calculada la ACF. Esto se logra moviendo la versión
retrasada de la señal con respecto a la señal original n veces y calculando el
producto interno de las partes superpuestas, obteniendo así n valores de ACF,
como se expresa en las siguientes líneas de código:
for a=1:frameSize
acf(a)=dot(frame(1:frameSize-a+1), frame(a:frameSize));
end
Universidad de San Buenaventura Bogotá
80
La expresión frame(1:frameSize-a+1) corresponde a la versión retrasada de la
señal que se mueve n veces, esta se va desplazando de izquierda a derecha; este
movimiento es logrado disminuyendo el límite superior del ventaneo, restándole
“a” a la variable “frameSize”. Al tiempo frame(a:frameSize), que corresponde a la
señal original, se mantiene inmóvil respecto a la otra, reduciendo el límite inferior
del ventaneo de análisis.
La operación antes descrita, es realizada un frame por ciclo, obteniéndose tantos
valores de ACF como muestras tiene cada frame. Para hallar la frecuencia de
cada frame, es necesario hallar el período en los valores de ACF, hallando el pico
más alto. El pico más alto de los valores ACF se encuentra evidentemente en el
principio, pues es donde la multiplicación da su valor más alto, porque en la
primera superposición de ventanas el grado de similitud es máximo; pero este
valor no corresponde al punto de ACF donde se encuentra el periodo de la
frecuencia buscada. Por esta razón se establecen en cero los valores alrededor
del primer máximo, usando el marcador “n1”:
acf(1:n1)=-inf;
El marcador “n2” es el límite superior del segmento de puntos de ACF que
contienen el pico máximo, por eso se hacen cero todas las muestras que se
encuentren después de este punto.
acf(n2:end)=-inf;
Ahora usando la función “max” se puede localizar el segundo máximo, que
corresponde al pico máximo que hay entre los marcadores ya mencionados:
[maxValue, maxIndex]=max(acf);
En la variable “maxValue” se almacena el valor máximo de ACF, y en “maxIndex”
la posición del vector ACF donde se encuentra este máximo. Para saber el periodo
Universidad de San Buenaventura Bogotá
81
solo se debe saber el tiempo al que corresponde el punto de muestra de ACF
(hay tantos puntos de muestra de ACF como muestras tiene cada frame). Si la
frecuencia se muestreo es de fs= 44100 muestras/segundo, significa que cada
segundo se toman 44100 muestras de audio; si el pico es encontrado en una
posición x de ACF, solo basta calcular el período mediante:
(8)
Donde T es el período, x es la posición máxima de ACF, y fs la frecuencia de
muestreo. Para hallar el período de divide la posición de ACF entre la frecuencia
de muestreo.
Al ser la frecuencia el inverso del período, para hallar la misma se reemplaza la
fórmula del período como se muestra a continuación:
Donde F es la frecuencia hallada.
Debido a que la posición x del pico en ACF corresponde a un índice basado en 1,
la fórmula para el cálculo exacto de la frecuencia es:
F= fs / x-1;
frequency=fs/(maxIndex-1);
Universidad de San Buenaventura Bogotá
82
Luego de calcular la frecuencia en Hz, se calcula la nota MIDI correspondiente a
dicha frecuencia mediante:
Pitch(i)=round(69+12*log2(frequency/440));
Luego para poder discriminar de forma eficiente la ejecución de las notas de los
segmentos del audio que contienen silencios, todas aquellos pitch cuya intensidad
calculada este por debajo de “umbral=nivelmaximo/8”, son llevadas a cero,
asegurándose de que la segmentación de las notas se lleve a cabo de forma
correcta como se muestra a continuación:
if(volume(i)<volumeTh)
freqgrafic(i)=0;
pitch(i)=0;
end
El ciclo se realiza frame por frame hasta culminar el vector “y”, de manera que
cada frame tenga su correspondiente pitch.
En la siguiente sección del código, es analizado el pitch y la amplitud de cada
frame, almacenada en los vectores “pitch” y “volume” respectivamente, para
poder crear un vector de notas que contenga la información de los instantes en
que comienzan y terminan las notas(duraciones) y de los silencios, en la extensión
de todo el audio. Para lograr esto es necesario un algoritmo de segmentación, que
es descrito a continuación:
Se establece una duración mínima teniendo en cuenta la mínima duración de nota
posible a ejecutar y el “frameSize” como se muestra:
minNoteDuration=0.0201;
Universidad de San Buenaventura Bogotá
83
Son creadas tres variables, “notes” para las notas MIDI segmentadas,
“contiguales” para la cuenta de notas consecutivas iguales y “noteDur” para el
cálculo de la duración de las mismas:
notes=[]; % pre localización
contiguales=1; % valores iniciales para conteo de notas
noteDur=0; % valores iniciales para conteo de notas
Se inicia un for que va desde 2 hasta la longitud del vector de pitch, se calcula la
duración de la nota usando:
“duración de la nota= num de notas iguales * (duración de cada frame en seg)”,
Ó como se expresa, noteDur=contiguales*(frameDuration/1000).
Luego se verifica si la nota es diferente a la anterior y si la duración es mayor a la
duración mínima, si cumple la condición se almacena la nota anterior con su
duración en
notes=[notes,pitch(i-1),noteDur]
Y las variables “contiguales” y “noteDur” vuelven a sus valores iniciales. Si la
condición no se cumple, “contiguales” continua sumando notas iguales y el ciclo se
repite. Se necesitará que varias notas consecutivas sean iguales y así sumen la
suficiente duración en “noteDuration” para que cuando haya una nota nueva se
almacene la anterior en note con su respectiva duración y así sucesivamente
hasta la penúltima nota. Al final se escribe la última nota con su duración. Este
proceso se desarrolla en las siguientes líneas de código:
for i=2:length(pitch)
noteDur=contiguales*(frameDuration/1000); % cálculo de
duración de la nota
Universidad de San Buenaventura Bogotá
84
if (pitch(i)~=pitch(i-1))&& noteDur>minNoteDuration % si la
nota es diferente a su anterior y mayor a la duración mínima
notes=[notes,pitch(i-1),noteDur]; % Creación de una nueva
nota
noteDur=0; se reinician las variables para iniciar cuenta de
nuevo
contiguales=1;
else
contiguales= contiguales+1; % se sigue sumando notas iguales
end
end
notes=[notes, pitch(i), noteDur]; % se crea la última nota
Ya teniendo el vector notes, que contiene en orden las notas con sus respectivas
duraciones, se empieza a crear la matriz “nmat”, que corresponde a la matriz
donde se representan las notas MIDI para la posterior escritura de archivo MIDI,
mediante la función “writemidi” que ofrece la librería MIDI Toolbox.
La “nmat” en su forma general es una matriz de 7 x “número de notas”, que
almacena la información MIDI de la siguiente forma:
ONSET DURATION MIDI MIDI VELOCITY ONSET DURATION
(BEATS) (BEATS) channel PITCH (SEC) (SEC)
La primera columna indica el comienzo de las notas en beats, la segunda columna
la duración de las notas que comienzan en los valores en beats de la columna 1.
La tercera columna denota el canal (1-16), y la cuarta el pitch MIDI, donde el Do
central (C4) es 60. La quinta columna es el velocity que describe que tan fuerte es
tocada la nota (0-127). Las últimas dos columnas corresponden a las primeras dos
(onset en beats, duration en beats) solo que expresado en segundos.
Universidad de San Buenaventura Bogotá
85
Para crear las columnas 4, 6 y 7 de la “nmat”, se almacenan las posiciones
impares de notes en “MidiPitch”, las pares en “Durseg” (vector de duraciones de
cada nota en segundos) Y “Onseg”(vector de comienzos de nota en segundos) es
usada la función cumsum que permite sumar al valor de cada posición la suma de
los valores de las posiciones anteriores, almacenándose en cada posición el
momento en el que comienza cada nota.
MidiPitch=notes(1:2:end); % Se toman los valores impares=
notas MIDI
DurSeg=notes(2:2:end); % Se toman los valores pares=
duraciones
OnSeg=[0, cumsum(DurSeg)]; % Se suma en cada posición las
duraciones anteriores mas la posición
Teniendo ya los vectores correspondientes a las columnas 4, 6 y 7 de la “nmat”,
se prosigue a crear los vectores de las columnas 1 y 2, que corresponden a los
mismos valores que las columnas 6 y 7, pero expresados en beats, para
finalmente crear la matriz “nmat”. Para obtener los valores de los vectores
“OnBeats” y “DurBeats”, son usados los valores de “DurSeg” y de “OnSeg”, se
crea un for de 1 hasta la longitud del vector pitch final, dividiendo cada posición de
los vectores entre la duración en segundos de una negra de acuerdo al tempo de
la pieza musical. Para la columna 5, que corresponde al velocity, se toma un valor
provisional de 110. Se verifica posición por posición el vector de las notas, si el
pitch es diferente de cero, la nota se vincula a la “nmat” con sus respectivos
valores en las demás columnas. Para vincular los vectores a las columnas de la
“nmat” es usada la herramienta de concatenación vertical, por medio de
“nmat=[nmat;]”, lográndose así crear la matriz de notas MIDI del audio analizado.
for i=1:length(MidiPitch)
OnBeats = OnSeg(i)/(60/tempofin); % Comienzos en Beats
Universidad de San Buenaventura Bogotá
86
DurBeats = DurSeg(i)/(60/tempofin); % Duraciones en Beats
channel = 1; % canal MIDI
vel = 110; % velocity provisional
if MidiPitch(i)~= 0
nmat=[nmat;OnBeats DurBeats channel round(MidiPitch(i)) vel
OnSeg(i) DurSeg(i)];% Concatenacion horizontal
end
end
4.2.3.2 Algoritmo para el cálculo del velocity
Tal como se ha establecido en los objetivos del presente proyecto, se ha
desarrollado un algoritmo para el cálculo del velocity, que se detalla a
continuación:
Con el fin de lograr una conversión más fiel al audio, es desarrollado un algoritmo
para el cálculo del velocity basado en el cálculo de la intensidad de cada frame
explicado anteriormente.
Se crea un for de 1 hasta el número de notas o filas de “nmat”, se crean las
variables principio (i) y final (i), que determinan que posiciones del vector
“volumen” corresponden a cada nota, para luego hallar el máximo entre sus
posiciones y darle un valor de 0 a 127; logrando así asignarle un valor de velocity
que corresponda mas a la expresión del instrumentista nota a nota.
% Cálculo de Velocity
for i=1:size(nmat, 1)
principio(i)=round((nmat(i,6)*fs)/frameSize);
final(i)=round(((nmat(i,6)+(nmat(i,7)))*fs)/frameSize);
maximoglobal=max(volume);
Universidad de San Buenaventura Bogotá
87
if principio(i)==final(i)& principio(i)~=1
principio(i)= principio(i)-1;
end
volmaxnote(i)=max(volume(principio(i)+1:final(i)));
velcalc(i)=round((volmaxnote(i)*128)/maximoglobal);
nmat(i,5)=velcalc(i);
end
4.2.3.3 Algoritmo para la cuantización
Para poder llevar a cabo la visualización del archivo MIDI en un software editor de
partituras, previo a la escritura del mismo, se decide implementar un algoritmo que
permita cuantizar las duraciones de las notas plasmadas en la “nmat”. Para esto
se establece una duración mínima (“mindur”) de cuantización, de acuerdo a las
figuras de las notas como se explica en el apartado de parámetros de conversión.
El algoritmo busca acercar el valor de las duraciones al valor de nota más
cercano, múltiplo de la mínima duración. En la variable “minfiguronote” se
establece la duración mínima con base en la duración con que se lleva a cabo la
cuantización; se crea una nueva matriz para cuantización. Cada posición de la
columna 7 de la “nmat”(“duración de las notas”) es comparada con
“minfiguronote”, si es menor que esta, “minfiguronote” es dividida entre la
duración de la nota, el resultado es redondeado, y “minfigurenote” es dividido
ahora entre este valor, almacenándose en “quantizetime”, y luego haciendo esta
posición igual a “quantizetime”. Si la duración es menor, es dividida entre
“minfiguronote”, luego redondeado este valor, y multiplicado por “figurenote”,
almacenándose en “quantizetime” y luego haciéndose la posición igual a este
valor.
nmatnueva=nmat;
Universidad de San Buenaventura Bogotá
88
minfiguronote=(4*((60/tempofin)/mindur));
for i=1:size(nmat, 1)
if nmatnueva (i,7)<=minfiguronote
quantizatime= minfiguronote/round(minfiguronote/ nmatnueva
(i,7));
nmatnueva (i,7)= quantizatime;
else
quantizatime= minfiguronote*(round(nmatnueva (i,7)/
minfiguronote) );
nmatnueva (i,7)= quantizatime;
end
end
Es creada una nueva matriz de cuantización con el fin de controlar paso a paso
cada proceso. Esta nueva matriz conserva la cuantización de la columna 7 y se
prosigue a cuantizar en ella la columna 6.La primera fila de la columna 6 se
cuantiza igual que todas las filas de la columna 7. Los valores cuantizados de las
demás filas de la columna 6 se obtienen a partir de sumar a la primera fila ya
cuantizada el valor de duración de la columna 7 de la misma fila, y así
sucesivamente hasta llegar a la última nota.
%cuantización vect on
nmatcuantizada=nmatnueva;
if nmatcuantizada (1,6)<=minfiguronote
quantizatimevecton=minfiguronote/round(minfiguronote/chalomat
(i,6));
nmatcuantizada (1,6)= quantizatimevecton;
else
quantizatimevecton=minfiguronote*(round(nmatcuantizada
(1,6)/minfiguronote));
Universidad de San Buenaventura Bogotá
89
nmatnueva(1,6)= quantizatimevecton;
end
for i=2:size(nmat, 1)
if nmat(i,6)==nmat(i-1,6)+nmat(i-1,7)
nmatcuantizada (i,6)= nmatcuantizada (i-1,6)+
nmatcuantizada (i-1,7);
else
quantizatimevecton1= minfiguronote*(round(nmatcuantizada
(i,6)/minfiguronote) );
nmatcuantizada i,6)= quantizatimevecton1;
end
end
Las columnas 1 y 2 se obtienen a partir de la columna 6 y 7, dividiendo sus valores
entre la duración en segundos de una negra en el tempo de la pieza musical.
%cuantización columna 1 nmat
for i=1:size(nmatcuantizada, 1)
nmatcuantizada (i,1)= nmatcuantizada (i,6)/(60/tempofin);
end
%cuantización columna 2 nmat
for i=1:size(nmatcuantizada, 1)
nmatcuantizada i,2)= nmatcuantizada (i,7)/(60/tempofin);
end
nmatcuantizada (i,2)= nmatcuantizada (i,7)/(60/tempofin);
end
Finalmente se escribe el archivo MIDI mediante cuantizado o sin cuantizar según
la elección del usuario, mediante la función “writemidi” de MIDI Tool box:
Universidad de San Buenaventura Bogotá
90
writemidi(nmat, 'nombredelarchivo.mid', 120, tempofin,4,4)
writemidi(nmatcuantizada,'nombredelarchivo.mid',120,tempofin,
4,4)
4.2.3.4 Algoritmo para el cálculo del tempo: “calculador de tempo”
Atendiendo a lo establecido en los objetivos del presente proyecto, se ha
desarrollado un algoritmo para el cálculo del tempo, como se describe a
continuación:
Existe la posibilidad de calcular el tempo de una canción mediante la herramienta
de “Calculador de tempo”, que se puede llamar desde la sección de configuración
de parámetros de conversión, pulsando el botón “calculador de tempo”, o
seleccionándola en el menú herramientas.
Este subprograma se inicia desde el GUI principal, de la siguiente manera
Calculador_Tempo()
Al presionar el botón “tap“ en el calculador de tiempo la variable “c “,mediante la
función clock, se convierte en un vector de seis posiciones correspondientes a:
c = [año mes dia hora minute segundos]
c = clock;
La variable “t” se hace igual a la posición 6 del vector, correspondiente a la
columna de segundos :
t=c(1,6);
Se crea una variable contador que se encarga almacenar en ella las veces que el
botón “tap“ es pulsado:
Universidad de San Buenaventura Bogotá
91
contador=contador + 1
Cada vez que se presiona el botón “tap“ , el vector “matrizsegs“ toma el valor de
t(segundos) en cada una de sus posiciones según vaya indicando el contador,
creándose de esta manera un vector que registra en orden cronológico, el tiempo
en segundos en que sucede cada pulsación :
matrizsegs(contador)=t;
El algoritmo empieza a calcular el tempo cuando el contador marca más de una
pulsación. Se calcula la diferencia de tiempo entre cada pulsación y su anterior(a
partir de la segunda)y se almacena en el vector “dift”. Si la diferencia entre una
pulsación es mayor que 1.5 segundos o menor que 0.24, tiempos que
corresponden al máximo y mínimo de duración de una negra a 40 BPM y a 250
BPM, las variables se hacen cero y se comienza el proceso de nuevo. Esto evita
errores en el cálculo del tempo ya sea por una pulsación insuficientemente regular,
demasiado rápida o lenta, o porque alguna pulsación se realiza al finalizar un
minuto y la siguiente al comenzar el siguiente, produciéndose así una diferencia
negativa.
Con el fin de controlar el tamaño del vector “matrizsegs“, y evitar así un aumento
paulatino en el tiempo de ejecución del algoritmo, cada1 5 pulsaciones las variable
contador ,el vector “matrizseg” y el vector “dift” se hacen cero y el proceso
comienza de nuevo.
if contador>1
for i=2:contador
difT(i-1)=matrizsegs(i)-matrizsegs(i-1)
if difT(i-1)>1.5||difT(i-1)<0.24 ||contador>15
contador=0
matrizsegs=[];
difT=[];
return;
Universidad de San Buenaventura Bogotá
92
end
end
tempocalculado=round(60/mean(difT))
end
Finalmente si el contador es mayor que dos y el proceso logra pasar los
condicionales sin retornar al principio el tempo calculado se imprime en el campo
“tempocalculado”.
if contador>2
set(handles.tempo_calculado,'String',tempocalculado);
end
Universidad de San Buenaventura Bogotá
93
4.2.4. Fase de Finalización
Esta fase comprende el proceso de escribir el archivo MIDI, Guardarlo, y
Reproducirlo. Antes de realizar la escritura del archivo MIDI, debe seleccionarse el
nombre y dirección con la que se desea guardar.
Figura 13. Fase de finalización
4.2.4.1 Guardar archivo MIDI
Antes de finalizar la conversión, aparece una ventana en la cual el usuario debe
elegir el nombre y ubicación con la cual desea guardar el archivo MIDI. Esta
ventana se crea a partir de la función “uiputfile” , que permite exportar archivos a
cualquier ubicación del disco duro o de medios de almacenamiento externos. El
nombre del archivo es almacenado en el vector “archivo”, y la dirección, en el
vector “ruta”
Como se muestra:
Universidad de San Buenaventura Bogotá
94
[archivo,ruta]=uiputfile('*.mid','archivo .mid');
Posteriormente se determina la extensión del archivo, y se almacena en la variable
“extension”:
extension=archivo((length(archivo)-3):end);
Se determina que si el usuario escribe el nombre del archivo con otra extensión,
esta sea reemplazada por “.mid”
if (extension~='.mid')
archivo=[archivo '.mid'];
end
Finalmente se hace la variable “nombrearchivosalida” igual a 1, para que en el
proceso de escritura se pueda iniciar, al existir ya un nombre y ruta de ubicación
para el archivo MIDI.
nombrearchivosalida=1;
También es posible exportar el archivo MIDI, con otro nombre y dirección después
de culminada la conversión, mediante la opción “Guardar Archivo MIDI”, ubicada
en el menú archivo. El código es equivalente al que se ha presentado.
Universidad de San Buenaventura Bogotá
95
4.2.4.2 Algoritmo para la creación del fichero MIDI a partir de la librería “MIDI
Tool box”
Siguiendo los objetivos establecidos en el presente proyecto, se ha desarrollado
un algoritmo para la creación del fichero MIDI, a partir de la librería “MIDI Tool
box”. Determinado proceso se detalla en el actual apartado.
Configuración de la librería “MIDI Tool box”
Para poder realizar el proceso de escritura, graficación y reproducción del archivo
MIDI, es necesario instalar en Matlab la librería “MIDI Tool box” de la siguiente
manera:
Seleccionar la opción “Set Path” del menú “File”, en la ventana que se abre
seleccionar la opción “Add Folder”, ubicar la librería y seleccionar “save”.
Escritura del Archivo MIDI.
Existe una matriz con valores cuantizados (nmatcuantizada), y una con los
valores originales del archivo de audio (nmat). El programa escribirá el archivo
MIDI con la matriz correspondiente, a lo decidido por el usuario en la configuración
de los parámetros de conversión.
Inicialmente se verifica la existencia de un nombre y dirección para guardar el
archivo.
Se escribirá el archivo MIDI, mediante la función “writemidi”, de la librería “MIDI
Tool box”, según la siguiente estructura.
writemidi(matriz,nombre,tpq,tempo,numerador
compas,denominador compas);
En el campo “matriz”, se especifica el nombre de la matriz cuyos valores formaran
el archivo MIDI.
Universidad de San Buenaventura Bogotá
96
En el campo “nombre”, se especifica el nombre y/o dirección en la cual es
guardado el archivo MIDI.
El campo “tpq”, corresponde a las pulsaciones por cuarto de nota, el presente
software determina 120 como valor por defecto.
El campo “tempo”, corresponde al valor de tempo, con el cual desea escribirse el
archivo MIDI.
En el campo “numerador compas”, se especifica el valor del numerador del
compás con el cual desea escribir el archivo MIDI, para su posterior uso en un
software editor de partitura.
En el campo “denominador compas”, se especifica el valor del denominador en el
compás con el cual se desea escribir el archivo MIDI.
Por otra parte, se grafica el archivo MIDI, mediante la función “pianoroll”, que
posee la siguiente estructura:
pianoroll(matriz,'name','sec')
Matriz cuantizada
Si el usuario ha decidido cuantizar, la matriz con la cual se escribe el archivo MIDI,
es “nmatcuantizada”. Los demás campos de escritura
(nombre,120,tempo,numerador compás, denominador compás), se reemplazan
por las variables que contienen los valores establecidos por el usuario
previamente, en la configuración de datos para la conversión, tal como se muestra
a continuación.
if ((cuantizar==1)&& (nombrearchivosalida==1))
writemidi(nmatcuantizada, [ruta archivo], 120,
tempofin,numeradorcompas,denominadorcompas);
pm=1; %guardo la variable para saber cuál de las 2 matrices
reproduzco en el play MIDI
Universidad de San Buenaventura Bogotá
97
pmidi=pm;
figure(3)
pianoroll(nmatcuantizada,'name','sec')
end
También se establece una variable “pmidi”, que adquiere un valor de 1 si se ha
cuantizado y cero si se han conservado los valores del archivo de audio original;
para la posterior reproducción del archivo MIDI.
Matriz no- cuantizada
Si el usuario ha decidido cuantizar, la matriz con la cual se escribe el archivo MIDI,
es “nmat”.
if ((cuantizar==0)&& (nombrearchivosalida==1))
writemidi(nmat, [ruta archivo], 120,
tempofin,numeradorcompas,denominadorcompas);
nmat
pm=0;
pmidi=pm;
figure(3)
pianoroll(nmat,'name','sec')
end
Al finalizar la escritura se hace la variable “procesoculminado” igual a 1, para su
uso en la sección “Reproducirmidi”
procesoculminado=1;
Universidad de San Buenaventura Bogotá
98
4.2.4.3 Reproducción del Archivo MIDI
Al iniciar esta función se hacen globales todas las variables empleadas en la
misma.
global pmidi nmat nmatcuantizada procesoculminado
Se verifica que el proceso de conversión haya concluido, mediante la variable
“procesoculminado”, que adquiere el valor de 1, si ya se ha realizado la
conversión. De no ser así, aparece una ventana que informa que existe un error y
solicita sea realizada la conversión.
if (procesoculminado==0)
errordlg('Debe realizar primero la conversión','ERROR')
end
Si se cumplen los requisitos para la conversión, el programa procede a evaluar el
valor de la variable “pmidi”, para establecer si se emplea para la reproducción la
matriz con valores cuantizados o la matriz con valores originales.
Si “pmidi” equivale a 1, se emplea la matriz cuantizada; si equivale a cero, se
emplea la matriz no cuantizada.
Para la reproducción se emplea la función “playsound”, de la librería “MIDI Tool
box”, según la siguiente estructura;
playsound(matriz);
El código empleado se presenta a continuación:
if ((pmidi==1)&&(procesoculminado==1))
playsound(nmatcuantizada);end
if ((pmidi==0)&&(procesoculminado==1))
playsound(nmat);
end
Universidad de San Buenaventura Bogotá
99
4.3. DESARROLLO DE LA INTERFAZ GRÁFICA
Para la realización de la interfaz gráfica del programa, se ha empleado el editor
GUI de Matlab. Se desarrolló una interfaz gráfica principal, y cuatro interfaces
secundarias que interactúan con la primera. La función de 3 de las interfaces
secundarias, es primordialmente la adquisición de datos, cuyos valores se
establecen en variables globales, lo cual permite que sean empleadas en todas las
secciones del programa.
4.3.1. INTERFAZ GRÁFICA PRINCIPAL
Nombre : “Wav2MIDI_Converter”,
Esta Interfaz posee una barra de herramientas, creada a partir del componente
“Menú Editor”. Dicha barra de herramientas consta de 4 Menús desplegables, que
poseen cada uno diferentes opciones para realizar distintas funciones. A
continuación se detallan cada uno de los menús y sus opciones.
Figura 14. Interfaz gráfica principal
Universidad de San Buenaventura Bogotá
100
4.3.1.1 Barra de herramientas
Menú Archivo
Consta de dos funciones explicadas en la sección donde se detalla el algoritmo.
Figura 15. Menú Archivo
Abrir archivo de audio: Permite seleccionar un archivo que se encuentre
en cualquier ubicación del disco duro, o en dispositivos de almacenamiento
externos, para importarlo al programa.
Figura 16. Abrir Archivo de Audio
Universidad de San Buenaventura Bogotá
101
Guardar archivo MIDI: Permite guardar el archivo MIDI, generado por el
programa después de finalizada la conversión, con el nombre y ubicación
deseados.
Figura 17. Guardar Archivo MIDI
Menú Herramientas
Al igual que el menú anterior, está constituido por dos funciones, explicadas
detalladamente, en la sección de descripción del algoritmo.
Figura 18. Menú Herramientas
Grabar Archivo de audio: Al seleccionar esta opción se abre la interfaz
gráfica secundaria “Rec”, dentro de la cual se lleva a cabo el proceso de
grabación de un archivo de audio.
Universidad de San Buenaventura Bogotá
102
Calcular Tempo: Con esta opción se abre la interfaz gráfica secundaria
“Calculador_Tempo”, en la cual se calcula el tempo de una melodía,
haciendo uso de una serie de pulsaciones ejecutadas por el usuario.
Menú Configuración.
Figura 19. Menú Configuración
Parámetros de conversión: Esta opción abre la interfaz gráfica
secundaria “Configuracion_Parametros_Conversion”, en la cual el usuario
ingresa el valor de los parámetros requeridos para realizar la conversión.
Esta función se explica detalladamente en la sección de descripción del
algoritmo.
Menú Ayuda
En este menú, se encuentran las opciones que le brindan al usuario información
acerca del uso del software.
Figura 20. Menú Ayuda
Universidad de San Buenaventura Bogotá
103
Manual: Se abrirá el manual del presente software en formato pdf. Esto se
hace mediante la función “winopen”, como se muestra en la siguiente línea
de código:
winopen('manual.pdf');
Tabla del rango de frecuencias de los instrumentos musicales: Se
abrirá un archivo pdf, con una gráfica en la que se describe el rango en
frecuencia de diferentes instrumentos musicales.
winopen('Rango_de_frecuencias_de_instrumentos.pdf');
Acerca de Wav2MIDI Converter: Al seleccionar esta opción aparece la
interfaz gráfica secundaria “About_us”, que contiene información de los
autores del presente software.
4.3.1.2. Botones
La interfaz gráfica principal consta de 3 botones, del tipo “Push Button” del editor
GUI de Matlab, empleados para realizar diferentes funciones, mencionadas a
continuación y descritas detalladamente en la sección de descripción del
algoritmo.
Figura 21. Botones
Universidad de San Buenaventura Bogotá
104
Botón reproducir audio.
Al oprimir este botón, se reproducirá el archivo cargado en el software, si no
se ha cargado ningún archivo, el programa le solicitará que lo haga.
Botón Introducir parámetros de conversión.
Al oprimir este botón se abre la interfaz gráfica secundaria
“Configuracion_Parametros_Conversion”, en la cual el usuario ingresa el
valor de los parámetros requeridos para realizar la conversión.
Botón convertir.
Al oprimir este botón, el programa realizará la conversión de Wav a MIDI del
archivo de audio cargado, el programa verifica que hayan sido ingresados
todos los datos requeridos, de no ser así se generará una alerta. Al finalizar
la conversión, se abrirá una figura que contiene la grafica del archivo MIDI.
Durante el proceso de conversión, aparece una barra de progreso que
indica el porcentaje del proceso, y el tiempo restante para su finalización.
Figura 22. Barra de progreso proceso de conversión
Universidad de San Buenaventura Bogotá
105
Botón reproducir MIDI.
Al oprimir este botón, se reproducirá el archivo MIDI generado por el
software, si no se ha realizado la conversión, el programa solicitará que se
haga.
4.3.1.3 Gráfica de forma de onda
La interfaz gráfica posee un componente axes del editor GUI de Matlab, en el que
se gráfica en el dominio del tiempo, la forma de onda importada o grabada.
Figura 23. Gráfica forma de onda
4.3.1.4 Gráfica archivo MIDI
Al finalizar el proceso de conversión, aparece una gráfica del archivo MIDI.
Figura 24. Gráfica Archivo MIDI
Universidad de San Buenaventura Bogotá
106
4.3.2. INTERFACES GRÁFICAS SECUNDARIAS
La descripción detallada de los procesos ejecutados en cada interfaz secundaria,
se encuentra en la sección en la que se explica el algoritmo.
4.3.2.1 Grabar archivo de audio
Nombre: “Rec”
El programa abrirá una interfaz de usuario, en la que se podrá realizar la
grabación de una ejecución musical. Para iniciar el proceso de grabación, debe
ser ingresado el valor en segundos de la duración de la grabación a realizar, dicho
valor debe encontrarse entre 3 seg y 240 seg. Posteriormente se pulsa el botón
“REC”, y se ejecuta la pieza musical. Se pulsa el botón “ACEPTAR” para finalizar.
Figura 25. Interfaz gráfica secundaria “Rec”
Universidad de San Buenaventura Bogotá
107
Elementos empleados
Esta interfaz cuenta con dos elementos “Static Text”, del editor GUI de Matlab, uno
de ellos empleado para indicarle al usuario que se encuentra en la aplicación
“Grabar un archivo de audio”, y el otro para indicar que se debe ingresar el valor
de “Duración de la grabación (Seg)”
Por otra parte cuenta con un elemento “Edit Text”, en el cual el usuario debe
ingresar el valor de la duración en segundos que considera tendrá la grabación.
Finalmente se cuenta con dos componentes “Push Button”, que corresponden a 2
botones. El primero de ellos es el botón “Rec”, que al ser pulsado da inicio a la
grabación; y el segundo “Aceptar”, que cierra la interfaz gráfica.
4.3.2.2 Calcular tempo
Nombre: “Calculador_Tempo”
Esta interfaz permite calcular el tempo de la melodía deseada; para esto, se debe
pulsar el botón “TAP” al ritmo de la ejecución musical, el valor calculado de tempo
aparece en el espacio de texto que se encuentra en la parte inferior de ventana.
El valor calculado no es asignado a los datos de conversión, si se desea asignarlo,
debe ser ingresado en la ventana de la función “Parámetros De Conversión”, del
menú Configuración.
Universidad de San Buenaventura Bogotá
108
Figura 26. Interfaz gráfica secundaria “Calculador_Tempo”
Elementos empleados
Está constituida por 2 elementos “Static Text”, uno empleado para informarle al
usuario que debe pulsar el botón al ritmo de la melodía, y otro para señalar el
campo de texto en donde aparece el valor calculado para el tempo.
Cuenta también con 3 elementos “Push Button”, que corresponden a los
siguientes botones:
Botón TAP: Al ser pulsado consecutivamente, envía información al
software, que permite calcular el valor del tempo.
Botón Reproducir: Permite reproducir el archivo de audio a convertir, para
facilitar que el usuario detecte el beat.
Botón Cerrar: Cierra la aplicación para calcular el tempo.
4.3.2.3 Parámetros de conversión.
Nombre: “Configuracion_Parametros_Conversion”
Universidad de San Buenaventura Bogotá
109
En esta interfaz se deben ingresar los valores requeridos para realizar la
conversión. A continuación se describe detalladamente la forma y el rango de
valor de cada dato a ingresar.
Figura 27. Interfaz Gráfica secundaria “Configuracion_Parametros_Conversion”
FRECUENCIA
Frecuencia Mínima
Corresponde al valor de la frecuencia mínima emitida por el instrumento grabado
en el archivo de audio a convertir. Dicha frecuencia debe oscilar entre 27 Hz y
4301Hz. La frecuencia mínima debe ser menor que la frecuencia máxima, e
inferior por lo menos 1 octava a la frecuencia máxima, es decir que debe ser
equivalente por lo menos a la mitad de la frecuencia máxima.
Universidad de San Buenaventura Bogotá
110
Frecuencia Máxima.
Corresponde al valor de la frecuencia máxima emitida por el instrumento grabado
en el archivo de audio a convertir. Dicha frecuencia debe oscilar entre 54 Hz y
4301Hz. La frecuencia máxima debe ser mayor que la frecuencia mínima, y que
superior por lo menos 1 octava a la frecuencia mínima, es decir que debe ser
equivalente por lo menos al doble de la frecuencia mínima.
Tempo.
Corresponde al valor de tempo al que se encuentra ejecutada la melodía que se
desea convertir. Dicho valor debe oscilar entre 40bpm y 250bpm.
Compás.
Corresponde al valor del compás con el cual se desea escribir el archivo MIDI.
CUANTIZACIÓN.
Opción Cuantizar
Si se desea que el archivo MIDI sea cuantizado, se debe seleccionar la casilla
cuantizar.
Menú “cuantización en”.
Se debe seleccionar del menú “cuantización en”, el valor de la figura según la cual
se desea cuantizar. De no hacerlo se cuantizará por defecto en 1/16.
Elementos empleados
La interfaz cuenta con 5 elementos del tipo “Static Text”, empleados para indicar el
lugar en el cual deben ser ingresados los valores de frecuencia mínima, frecuencia
Universidad de San Buenaventura Bogotá
111
máxima, tempo, compas y cuantización. Igualmente se hace uso de 5 elementos
del tipo “Edit Text”, en los cuales el usuario debe ingresar los valores ya
mencionados: frecuencia mínima, frecuencia máxima, tempo, numerador compas
y denominador compas.
Consta también de:
Un elemento “Radio Button”, que el usuario debe activar si desea que el
archivo sea cuantizado.
Un elemento “pop-up menu”, que permite al usuario seleccionar el valor
según el cual desea cuantizar.
Dos elementos “Push Button”, que corresponden al botón “calcular tempo”
que accede a esa sección del programa; y al botón “Aceptar”, que cierra la
interfaz.
4.3.2.4 Acerca de WAV2MIDI CONVERTER
Nombre: “About_us”
Es una interfaz que proporciona información sobre los autores del software.
Figura 28. Interfaz gráfica secundaria “About_us”
Universidad de San Buenaventura Bogotá
112
Elementos empleados
Consta básicamente de elementos “Static_Text”, en los cuales se indica el nombre
del programa y los nombres de los autores.
Universidad de San Buenaventura Bogotá
113
5. ANÁLISIS DE RESULTADOS
Son analizados seis audios de un clarinete, interpretando seis melodías:
Canción infantil “Los pollitos”
Escala en Bb
“Zelda´s Lullaby”
Fragmento Chirimía
Mario Bros
Cumpleaños
5.1. EVALUACIÓN ALGORITMO DE SEGMENTACIÓN
Se realiza el proceso de conversión de wav a MIDI de cada uno de los audios del
clarinete, mediante el conversor desarrollado en el proyecto, obteniéndose el
respectivo .mid de cada uno de los archivos .wav.
Son tabulados los valores de la matrices de eventos MIDI (nmat) de cada archivo
.mid resultante de la conversión. Es también realizado un análisis de cada audio,
a través del software Adobe Audition, usando la ventana de edición, las
herramientas de edición, transporte y análisis en frecuencia, para llevar a cabo la
identificación de los comienzos y finales de la cada una de las notas, sus
duraciones y su frecuencia, calculando luego su respectiva nota MIDI (MIDI
PITCH). Los valores obtenidos son tabulados en una nueva matriz de eventos
MIDI, para su comparación con la matriz producida por el software conversor de
wav a MIDI.
La eficiencia del algoritmo de segmentación se evalúa de acuerdo al número de
notas existentes en el audio y al número de notas identificadas correctamente,
teniendo en cuenta su nombre, inicio y duración. La matriz tabulada de acuerdo al
Universidad de San Buenaventura Bogotá
114
análisis con Adobe Audition, contiene valores obtenidos mediante la aplicación
manual de un algoritmo de segmentación basado en energía y en frecuencia. De
acuerdo a la forma de onda se van identificando visualmente los cambios de nivel
que sugieran el inicio y final de las notas. Paralelamente se aplica un algoritmo
basado en frecuencia, pues se usa la herramienta análisis en frecuencia segmento
a segmento, para identificar cambios en frecuencia que determinen el comienzo y
el final de las notas. Combinando ambos métodos se obtienen los valores
correspondientes a una descripción musical detallada del audio de la pieza, en
otras palabras, una transcripción musical, en valores reales, reflejando de forma
fiel, la ejecución original del instrumentista. Adicionalmente es tabulada una matriz
con las notas ideales, pitch MIDI y duraciones ideales. De esta forma se crea una
referencia para la comparación y evaluación de los valores obtenidos en la matriz
de eventos MIDI mediante el software conversor, determinándose que tan fiel es la
conversión al audio original, comparando la matriz obtenida con el conversor con
la de Adobe, y asegurándose que los datos tabulados en estas matrices estén
correctos, teniendo en cuenta la matriz de valores ideales.
La eficiencia se calcula de la siguiente forma:
(9)
La identificación de la nota se considera correcta, si la nota MIDI, es decir su
nombre y la octava en la que se ubica corresponden a la ejecución de la nota
principal o nota central, definiéndose nota central a la nota mostrada en la matriz
de valores ideales. La notas no centrales, son notas cuya duración es menor que
la duración de la figura de nota mas pequeña al tempo de ejecución de la pieza, y
son producto de la expresión del instrumentista. Estas últimas, no son
consideradas errores, pues el conversor sigue segmento a segmento el
Universidad de San Buenaventura Bogotá
115
comportamiento del audio, determinando la frecuencia en intervalos de tiempo de
40 ms, por lo tanto estas notas reflejan lo que realmente sucede en el audio y que
no deterioran la calidad de la conversión, sino que la hacen mas fiel al audio
original, haciendo mas natural su sonoridad. Como ya se ha mencionado antes,
los propósitos del proyecto son la visualización de la partitura del archivo .mid y la
vinculación del mismo a secuenciadores, es por eso que el algoritmo de
segmentación del conversor, esta configurado para detectar suficientes notas no
centrales como para que al importar el .mid en cualquier secuenciador, o al
reproducirlo en cualquier software reproductor, suene lo mas natural posible, y
para que al ser importado en un sotfware editor de partitura, la partitura se
visualice correctamente. Un exceso o una escasez extrema de notas no centrales
deteriora la calidad del .mid , tanto para la visualización de la partitura como para
su reproducción. Pueden haber notas no centrales de duración menor a este
intervalo, que sean descartadas por el conversor, y que si aparezcan en el análisis
por inspección en Adobe Audition, caso que no es considerado un error, pues la
ausencia de estas notas, en el resultado de la conversión es producto de la
configuración del algoritmo de segmentación, y de acuerdo a esto no afectan
negativamente la conversión.
Además de cumplir con lo anteriormente mencionado, el inicio y la duración de las
notas de la matriz generada por el conversor, deben presentar una desviación
inferior a 40 ms, con respecto a la obtenida mediante el análisis en Adobe
Audition, siendo este valor, la duración más pequeña que detecta el software:
(10)
Definiendo desviación, como el valor absoluto de la diferencia entre el valor de
obtenido en la matriz generada por el conversor y la elaborada mediante
inspección en adobe Audition.
Universidad de San Buenaventura Bogotá
116
(11)
Para el cálculo de la desviación, en las matrices obtenidas por inspección se
suman los valores de duración de las notas no centrales a sus respectivas notas
centrales, dejando como inicio, el de la nota que suceda primero. También se
suman las duraciones de las notas consecutivas con el mismo pitch que no
presenten ningún silencio entre ellas, ya que se conoce que el algoritmo de
segmentación del conversor, está basado primordialmente en frecuencia, y por lo
tanto sólo identifica una nota si su pitch es diferente al anterior.
Como se explica anteriormente, el objetivo del análisis comparativo de estas
matrices (nmat –conversor y nmat-inspección manual en adobe), es evaluar la
correcta detección de las notas, inicios y duraciones de las mismas, para
determinar la eficiencia del algoritmo de segmentación y la fidelidad de la
conversión. El análisis se inicia comparando la matriz generada por el conversor
con la obtenida mediante Adobe Audition, en las tablas de las matrices, los
segmentos resaltados en amarillo corresponden a notas detectadas sólo en
alguno de los métodos. Los segmentos resaltados en rojo corresponden a errores;
y las casillas resaltadas en gris corresponden a los máximos valores de desviación
(Ver las tablas de las matrices en el Anexo 2). En este paso se calculan las
desviaciones, para evaluar la fidelidad con el audio original. Posteriormente se
compara la matriz generada por el conversor con la matriz ideal, confirmando la
correcta detección de las notas y sus duraciones, identificando las notas centrales.
Finalmente es calculada la eficiencia del algoritmo de segmentación, como se
explica anteriormente. Adicionalmente se verifica la correspondencia entre el
resultado de la conversión y el audio original. También se presentan las gráficas
que detallan la segmentación realizada por el algoritmo, la forma de onda del
audio, el vector de intensidad (volumen) calculado, frecuencia con su respectiva
pitch MIDI, y la representación del archivo MIDI resultante de la conversión para
cada melodía en un piano roll.
Universidad de San Buenaventura Bogotá
117
En el análisis, las matrices son nomencladas como se describe a continuación:
M1: Matriz ideal
M2: Matriz Adobe Audition
M3: Matriz Conversor
Canción infantil “Los pollitos”
Figura 29. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 1
Para realizar la conversión del .wav, son ingresados como parámetros de
conversión, una frecuencia mínima de 130, una frecuencia máxima de 1570, un
tempo de 80 bpm y un compás de 4/4.
Al comparar M2 y M3, se puede observar que el algoritmo del conversor suma las
duraciones de las notas que son ejecutadas de forma consecutiva y tienen el
mismo pitch, razón por la cual el número de notas de la matriz generada por el
Universidad de San Buenaventura Bogotá
118
conversor es menor al de la matriz obtenida por inspección en el análisis realizado
en adobe Audition.
Al comparar M2 y M3 se presenta una diferencia en el numero de notas de cada
una, debida a la presencia de notas consecutivas de igual pitch sin silencio entre
ellas, que como se explica anteriormente, son tomadas como una sola nota, cuya
duración es equivalente a la suma de sus duraciones individúales. Se evidencia
similitud entre los inicios de nota, y las duraciones de las mismas presentadas en
las dos matrices. Siendo la desviación máxima para la detección del inicio de nota,
de aproximadamente 0,03 segundos, y la promedio de 0,010 segundos. Para la
detección de la duración de las notas la desviación máxima es de 0,03 segundos y
la promedio de 0,012 segundos. Esto demuestra una correcta detección de inicios
y duraciones de las notas.
En las matrices obtenidas, se puede evidenciar que el software calcula
perfectamente el pitch, ya que acierta en todas las notas, teniendo en cuenta las
notas centrales de la matriz ideal (M1).
La figura 29 muestra el seguimiento que hace el algoritmo de segmentación, a lo
largo de todo el audio, identificando el pitch de cada nota, y determinando sus
inicios y duraciones. Es posible ver la coherencia de la forma de onda con la
segmentación realizada por el conversor.
Al escuchar y comparar el archivo .mid resultante de la conversión, con el archivo
de audio original, se confirma la fidelidad de la conversión.
Por lo anterior se concluye que la eficiencia de la segmentación en la conversión
de esta melodía es del 100%.
Universidad de San Buenaventura Bogotá
119
Figura 30. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 1
Escala en Si bemol Mayor (Bb)
Figura 31. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 2
Universidad de San Buenaventura Bogotá
120
Los parámetros de conversión son: frecuencia mínima de 130, frecuencia máxima
de 1570, tempo de 70 bpm y el compás de 4/4.
Se evidencia una correcta detección de los inicios de nota y las duraciones de las
mismas en M3, al coincidir con las obtenidas por inspección en M2. La diferencia
promedio en la detección de los inicios de nota es de 0,011 segundos y la máxima
de 0,03 segundos. En la detección de las duraciones la diferencia máxima es de
0,04 segundos, y la promedio de 0,011 segundos. La matriz ideal confirma los
resultados.
Al igual que la melodía anterior, todas las notas han sido detectadas
correctamente, pues las notas centrales en m3 coinciden con todas las notas en
M1. La figura 31 confirma la correcta segmentación de las notas.
Al escuchar y comparar el archivo .mid resultante de la conversión, con el archivo
de audio original, se confirma la fidelidad de la conversión.
Por lo anterior se concluye que la eficiencia de la segmentación en la conversión
de esta melodía es del 100%.
Figura 32 Representación en piano roll del archivo MIDI generado por el conversor para la melodía 2
Universidad de San Buenaventura Bogotá
121
“Zelda´s Lullaby”
Figura 33. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 3
Los parámetros de conversión son: frecuencia mínima de 130, frecuencia máxima
de 1570, tempo de 100 bpm y el compás de 3/4.
La detección de los inicios de nota y sus duraciones es correcta, al presentarse
una diferencia máxima de 0,031 segundos y una diferencia promedio de 0,012
segundos en las duraciones. En los inicios de nota la diferencia máxima es de
0,018 segundos, y la promedio de 0,01 segundos. Los resultados muestran
valores menores a 0.04 segundos, por lo cual, se puede concluir que la
segmentación es fiel al audio original.
Las notas centrales de M3, son iguales a las de M1, demostrando que todas las
notas son detectadas correctamente.
Universidad de San Buenaventura Bogotá
122
A diferencia de los audios anteriores, que son grabaciones de un clarinete real,
este audio es el audio generado a partir de un archivo .mid de la melodía, es por
eso que la forma de onda en la figura 33, muestra contornos diferentes a las
formas de onda de las melodías anteriores, sus trazos son muy definidos, y poco
naturales. En los demás parámetros los trazos de las graficas describen el mismo
comportamiento. En la figura también se confirma una correcta segmentación.
Al escuchar y comparar el archivo .mid resultante de la conversión, con el archivo
de audio original se refleja total fidelidad.
Los resultados de la segmentación, reflejan una eficiencia del 100%.
Figura 34. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 3
Universidad de San Buenaventura Bogotá
123
Fragmento Chirimía
Figura 35. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 4
Al comparar M2 y M3, es posible observar una diferencia entre el número de notas
detectadas, siendo mayor el número de notas detectadas en M2. Sin embargo,
todas las notas centrales son correctamente detectadas, dicha diferencia se debe
a la existencia de notas de expresión cuya duración es inferior a 40 ms, intervalo
mínimo de detección del algoritmo, por lo cual esto no representa un error. Hay un
caso especial en que la nota detectada en M2, es diferente de M3, ambas
atacando en el mismo instante, en el segundo 22.64, la diferencia es causada por
la diferencia de métodos de detección de pitch, Adobe Audition usa un algoritmo
de dominio espectral, mientras que el conversor un algoritmo de dominio temporal.
La detección de los inicios de nota y duraciones, es correcta, al presentarse una
desviación máxima en los inicios de nota de 0,028 segundos, y una promedio de
Universidad de San Buenaventura Bogotá
124
0,009. Para las duraciones de las notas, la desviación máxima corresponde a
0,038 segundos y la promedio de 0,013 segundos.
Al comparar M3 con M1, se evidencia que todas las notas centrales iguales, por lo
cual, la detección de las notas es correcta.
El algoritmo de segmentación presenta una eficiencia del 100%.
Figura 36. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 4
Universidad de San Buenaventura Bogotá
125
Mario Bros
Figura 37. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 5
Los parámetros de conversión empleados son: frecuencia mínima de 130,
frecuencia máxima de 1570, tempo de 110 bpm y el compás de 4/4.
En la comparación de M2 y M3, se evidencia una diferencia entre el número de
notas detectadas. Esto no representa un error, ya que se debe a que el algoritmo
de segmentación toma como una sola nota aquellas notas sucesivas de igual pitch
que no tengan silencios entre ellas.
El algoritmo de segmentación descarta la nota del segundo 8.4, correspondiente a
un pitch de 67, por tener una duración menor a 0.04 segundos, que es la duración
mínima tomada como nota. La configuración del algoritmo hace que esta duración
sea sumada a la siguiente nota, que ataca aproximadamente 0.02 segundos
después, y por ser esta una nota central, se convierte en un error.
Universidad de San Buenaventura Bogotá
126
La detección de pitch presenta una eficiencia de 95,65%, al acertar 22 de 23
notas. Adicionalmente, la desviación máxima en la detección de los inicios de nota
corresponde a 0,02 segundos, y la promedio a 0,005 segundos. Por su parte, la
detección de la duración de nota presenta una desviación promedio de 0,022
segundos y una máxima de 0,101 segundos. Esta última no cumple el requisito de
ser inferior a 0,04 segundos, pero no se considera un error, debido a que se
presenta en una nota que se encuentra antes de un silencio, y que se extiende
aumentando su duración, la cual no es percibida por el conversor, debido a que su
nivel de intensidad es inferior al nivel establecido como umbral para la detección
de una nota.
Figura 38. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 5
Universidad de San Buenaventura Bogotá
127
Cumpleaños
Figura 39. Segmentación basada en frecuencia y volumen, realizada por el algoritmo para la melodía 6
Los parámetros de conversión son: frecuencia mínima de 130, frecuencia máxima
de 1570, tempo de 90 bpm y el compás de 4/4.
Al comparar M2 y M3, es posible observar una diferencia entre el número de notas
detectadas, siendo mayor el número de notas detectadas en M2. La diferencia
existente se debe a la presencia de una nota de expresión que tiene una duración
inferior a 40 ms, intervalo de duración mínimo para la detección de una nota, se
entiende entonces que esto no corresponde a un error.
La detección de los inicios de nota presenta una desviación máxima de 0,04
segundos y una promedio de 0,258 segundos. En la detección de las duraciones
de nota, la desviación máxima es de 0,04 segundos, y la promedio de 0,014
segundos.
Universidad de San Buenaventura Bogotá
128
La comparación de las matrices M3 yM1, refleja igualdad en todas las notas
centrales, por lo cual se concluye que en este caso el algoritmo de segmentación
presenta una eficiencia del 100%.
Figura 40. Representación en piano roll del archivo MIDI generado por el conversor para la melodía 6
Para la evaluación del algoritmo también son realizadas pruebas con archivos de
audio que contienen ejecuciones musicales interpretadas en otros instrumentos,
como bajo, saxofón, congas y palmas. Para todas ellas la conversión se realiza
eficientemente.
Universidad de San Buenaventura Bogotá
129
5.2. EVALUACIÓN ALGORITMO PARA LA DETECCIÓN DEL VELOCITY
El termino velocity corresponde a la fuerza con que son ejecutadas las notas, en el
presente proyecto esta es calculada con base en un vector de volumen, que a su
vez es calculado de acuerdo al vector donde se almacenan los diferentes valores
que representan las amplitudes de cada muestra. A continuación se presentan las
figuras que muestran la forma de onda del audio de cada una de las melodías, el
volumen calculado, y el velocity para cada nota.
El cálculo del velocity es evaluado de acuerdo a la coherencia de la curva de
velocity con los niveles de volumen, y de amplitud que muestra cada figura para
cada melodía. En este caso no se calcula un porcentaje de eficiencia, por no tener
un patrón de referencia directo con el cual comparar, solo los valores de donde
proviene el cálculo del mismo velocity. Además de la evaluación de acuerdo a la
grafica, el velocity es examinado auditivamente, para verificar la correspondencia
entre el audio original y el archivo .mid resultante de la conversión. Las tablas de
las notas con su respectivo velocity generadas por el conversor, son presentadas
en el Anexo 4.
Universidad de San Buenaventura Bogotá
130
Canción infantil “Los pollitos”
Figura 41. Detección de velocity, realizada por el algoritmo para la melodía 1
Escala en Bb
Figura 42. Detección de velocity, realizada por el algoritmo para la melodía 2
Universidad de San Buenaventura Bogotá
131
“Zelda´s Lullaby”
Figura 43. Detección de velocity, realizada por el algoritmo para la melodía 3
Fragmento Chirimía
Figura 44. Detección de velocity, realizada por el algoritmo para la melodía 4
Universidad de San Buenaventura Bogotá
132
Mario Bros
Figura 45. Detección de velocity, realizada por el algoritmo para la melodía 5
Cumpleaños
Figura 46. Detección de velocity, realizada por el algoritmo para la melodía 6
Universidad de San Buenaventura Bogotá
133
La curva de velocity de cada melodía, sigue cada una de las variaciones de
volumen y de amplitud, mostradas respectivamente en la curva de volumen y en la
forma de onda del audio representada en cada figura. Se puede ver que cualquier
aumento y/o disminución, de alguna de las otras dos curvas se ve reflejado en la
curva de velocity, hecho que demuestra que el cálculo del velocity es acertado.
Adicionalmente todos los archivos de audio y los archivos MIDI corresponden
auditivamente en la intensidad con que son percibidas las notas.
5.3. EVALUACIÓN ALGORITMO PARA EL CÁLCULO DE TEMPO
El calculador de tempo es evaluado calculando el tempo de cada una de las
melodías analizadas anteriormente. Cada melodía es cargada en el software
conversor, para reproducirla y posteriormente calcular el tempo correspondiente.
Para determinar la eficiencia del calculador de tempo, el cálculo del tempo es
realizado 10 veces para cada melodía, los tempos son comparados luego con el
tempo conocido, al que fue grabada cada pieza musical, para determinar un
porcentaje de eficiencia.
Canción infantil “Los pollitos”
Tempo: 80bpm
El calculador acierta en todos los intentos, por lo cual su eficiencia en este
caso es del 100%.
Escala en Si bemol Mayor (Bb)
Tempo: 70bpm
El calculador acierta en todos los intentos, por lo cual su eficiencia en este
caso es del 100%.
Universidad de San Buenaventura Bogotá
134
“Zelda´s Lullaby”
Tempo: 100bpm
El calculador acierta en todos los intentos, por lo cual su eficiencia en este
caso es del 100%.
Fragmento Chirimía
Tempo: 90bpm
El calculador acierta 8 de 10, calculando un tempo errado en el tercer
intento con un tempo de 91 y en el séptimo con 89, ambos con una
diferencia de solo una unidad.
Por lo tanto la eficiencia en este caso corresponde al 80%.
Mario Bros
Tempo: 110bpm
EL calculador acierta 7 de 10, presentando errores en el 1 3 y 5 intento, con
tempos de 109, 111, 113 respectivamente
Por lo tanto la eficiencia en este caso corresponde al 70%.
Cumpleaños
El calculador de tempo acierta 9 de 10, teniendo un error de una unidad en
el intento 8, con un tempo de 91.
Por lo tanto la eficiencia en este caso corresponde al 90%.
A continuación se muestra una tabla, con los datos de la eficiencia obtenida en el
cálculo del tempo para todas las melodías.
Universidad de San Buenaventura Bogotá
135
Melodía Eficiencia (%)
Canción Infantil "Los Pollitos" 100
Escala en Si bemol Mayor 100
Zelda´s Lullaby 100
Fragmento Chirimía 80
Mario Bros 70
Cumpleaños 90
Tabla 6. Eficiencia del calculador de tempo
La eficiencia promedio del calculador de tempo es del 90%. Los valores de tempo
incorrectos, no distan más de 3 unidades del tempo correcto, por lo cual se cumple
el objetivo planteado en el presente proyecto.
El cálculo del tempo en la herramienta desarrollada en el presente proyecto,
depende tanto de la calidad de la ejecución del instrumentista en la grabación,
como de la métrica o la estabilidad rítmica de quien lo calcule.
5.4. EVALUACIÓN ALGORITMO DE CUANTIZACIÓN
Se realiza la conversión de tres melodías, como se explica en el apartado anterior,
ésta vez cuantizando la duración de las notas de acuerdo a la figura de nota de
menor duración en cada melodía:
Canción infantil “Los pollitos” Cuantizada a 1/16
Escala en Si bemol Mayor (Bb) Cuantizada a 1/4
Zelda´s Lullaby” Cuantizada a 1/8
Universidad de San Buenaventura Bogotá
136
La matriz de eventos MIDI (nmat) generada por el algoritmo, es comparada con
una matriz tabulada a partir de las duraciones ideales de las notas ejecutadas en
la grabación original, a partir de la transcripción de la pieza musical. (Ver las tablas
en el Anexo 4). Los resultados obtenidos se resumen a continuación:
Teniendo en cuenta que las duraciones de las notas que son ejecutadas de forma
consecutiva y tienen el mismo pitch son sumadas, se evidencia una similitud del
100% en los valores de las duraciones e inicios de nota expresados en las dos
matrices analizadas, cuando no existen notas de igual pitch consecutivas, para las
tres melodías analizadas.
5.5. EVALUACIÓN DE LA ESCRITURA DEL FICHERO MIDI
Cada uno de los archivos MIDI generados por las conversiones de sus archivos de
audio de origen, es verificado en Matlab, mediante la función “readmidi” de la
librería Midi Toolbox, que permite obtener la matriz de eventos MIDI a partir de un
archivo .mid, y verificar que esta sea igual a la calculada antes de crear el archivo
.mid. Luego es visualizado en el piano roll mediante la función “pianoroll”, y
reproducido mediante la función “playmidi”, ambas de la librería Midi Toolbox.
Adicionalmente cada archivo .mid es probado reproduciéndolo en “Windows Media
Player”, con el objetivo verificar su correcto funcionamiento. También se importa
en el secuenciador “Reason” y se reproduce haciendo uso de sus herramientas y
con diferentes bancos de instrumentos.
Todos los archivos generados por el conversor funcionan de forma perfecta en
todos los programas usados, por lo que se concluye que la creación de los
archivos .mid es ejecutada correctamente.
Universidad de San Buenaventura Bogotá
137
CONCLUSIONES
El software desarrollado cuenta con un algoritmo de detección de pitch de dominio
temporal, específicamente un algoritmo basado en autocorrelación, que presenta
una eficiencia del 100%, superando la eficiencia de los métodos AMDF, SIFT,
HPS y Cepstrum.
La escritura del fichero MIDI, es realizada por la librería Midi Toolbox, generando
un archivo .mid que funciona en todos los medios compatibles, la librería funciona
únicamente en las versiones de matlab que van desde la 5.3 hasta las 7.3.
El software conversor de wav a MIDI, posee una herramienta para calcular el
tempo, cuya eficiencia calculada es del 90%. Dicha eficiencia varía de acuerdo la
estabilidad rítmica del instrumentista y de quien realiza el cálculo.
El cálculo del velocity logrado hace que el archivo MIDI resultante de la conversión
sea más fiel al audio original, por lo cual al reproducirlos la intensidad de las notas
corresponde a la intensidad en el archivo de audio original.
El software conversor de wav a MIDI, contiene entre sus herramientas la opción de
cuantizar la duración de las notas obtenidas en el análisis del archivo de audio de
origen, para la correcta visualización de la partitura.
El software conversor de wav a MIDI, posee una interfaz gráfica con diferentes
herramientas que permiten al usuario realizar la conversión de forma rápida,
sencilla y eficiente.
El software desarrollado no funciona únicamente para el clarinete, sino también
para otros instrumentos de viento, pues la configuración de los parámetros de
Universidad de San Buenaventura Bogotá
138
conversión, y el algoritmo de detección de pitch empleado en el desarrollo del
proyecto hacen posible la detección de las notas en la mayoría de los
instrumentos, incluso puede ser usado en instrumentos percusivos para plasmar
una idea rítmica.
El software desarrollado funciona de forma correcta únicamente para audios
mono, que contengan ejecuciones de una sola línea melódica, en general para
instrumentos melódicos, o para instrumentos armónicos que ejecuten una
melodía. No funciona para un audio que contenga varios instrumentos melódicos
cuya ejecución conforme acordes, es decir más de una nota a la vez.
Al realizar una conversión sobre un archivo de audio que contenga en toda su
extensión, o en partes de ella, mas de una nota a la vez, el archivo .mid resultante
de la conversión presenta errores, mostrando que el conversor identifica en la
mayoría de los casos en que se presenta armonía, la nota cuya frecuencia sea
más alta, o la más baja del acorde pero una octava por debajo de su frecuencia
real.
Universidad de San Buenaventura Bogotá
139
BIBLIOGRAFÍA
ANDERTON, Craig. The MIDI Protocol. Berkeley, California.
CORDANTONOPULOS, Vanessa. Curso completo de Teoría de la Música. 2002.
DANHAUSER, A. Teoría de la música. Editorial Ricordi; 2005.
EEROLA, Tuomas; TOIVIAINEN, Petri. MIDI Toolbox: MATLAB Tools for Music
Research. Department of Music, University of Jyväskylä. Finlandia. 2004
[Internet]: www.jyu.fi/hum/laitokset/musiikki/en/research/coe/materials/miditoolbox
[consulta: Septiembre 2011]
FORSBERG, Johan. “Automatic conversion of sound to the MIDI-format” 1998.
GERHARD, David. “Pitch Extraction and Fundamental Frequency: History and
Current Techniques”. University of Regina. 2003
JYH-SHING, Roger Jang; YANG GAO, Ming. “ A Query-by-Singing System based
on Dynamic Programming”, Computer Science Department, National Tsing Hua
University, Hsinchu, Taiwan, 2000.
JYH-SHING, Roger Jang. Audio Signal Processing and Recognition.
KAWAHARA, Hidek; DE CHEVEIGNE, Alain. “YIN, a fundamental frequency
estimator for speech and music”, 2002.
KOSTEK, Bo˙zena. Perception-Based Data Processing in Acoustics. Editorial In-
chief. 2005
MERINO DE LA FUENTE, Jesús Mariano. Las vibraciones de la música. Editorial
Club Universitario. 2006.
Universidad de San Buenaventura Bogotá
140
MIDDLETON, Gareth. “Pitch Detection Algorithms”. 2003
MOLINA REVERTE, Albert. Proyecto final de Carrera “Conversor wave a MIDI en
tiempo real para guitarras eléctricas”, Escuela Universitaria de Ingeniería Técnica
Industrial de Terrassa, Universidad Politécnica de Cataluña 2006.
RIPE RODRIGUEZ, Andrés. Tesis de grado “Dispositivo conversor de nota
musical a nota MIDI para bajo eléctrico”, Universidad de San Buenaventura
Bogotá, 2008.
RODRIGUEZ BLANCO, Alicia. Música. Editorial Editex. 2007.
SEISDEDOS, Marcela. Apreciación Musical I. Argentina. Disponible en:
http://apreciacionmusical1emba.blogspot.com/2010/10/el-clarinete.html
Universidad de San Buenaventura Bogotá
141
Anexo 1
FrameSize AMDF ACF SIFT CEPSTRUM HPS
Duración (ms) D3 A3 D3 A3 D3 A3 D3 A4 D3 A4
5 441 223,858 219,403 237,097 250,568 689,063 50 50 0 0
6 197,758 223,858 208,019 227,32 250,568 689,063 317,266 294 0 166,415
7 146,026 223,858 156,94 230,89 149,492 223,858 143,182 142,718 142,718 142,718
8 146,026 223,858 150 226,154 149,492 223,858 124,929 331,579 124,929 124,929
9 146,026 111,929 148,485 227,32 149,492 223,858 111,083 110,804 111,083 111,083
10 146,026 111,929 149,492 225 149,492 223,858 100 100 100 100
11 145,545 111,929 146,512 226,154 144,118 223,858 218,317 90,9278 90,9278 90,9278
12 145,545 111,929 147,492 225 144,118 223,858 83,5227 294 83,3648 83,3648
13 145,545 111,929 146,512 225 144,118 223,858 218,317 223,858 76,9634 153,927
14 72,8926 74,6193 147 225 145,066 223,858 71,3592 71,5909 71,4749 142,95
15 72,8926 74,6193 146,512 225 145,066 223,858 66,6163 223,858 66,6163 133,233
16 72,8926 74,6193 146,512 226,154 145,066 223,858 62,4646 62,4646 62,4646 124,929
17 72,8926 74,6193 146,512 225 145,066 223,858 58,8 223,858 58,8 235,2
18 72,8926 74,6193 146,026 225 145,066 223,858 218,317 223,858 55,5416 222,166
19 72,8926 74,6193 146,512 225 145,066 223,858 52,5626 52,6253 52,6253 105,251
20 72,8926 74,6193 146,026 225 145,066 223,858 145,545 50 100 100
21 72,8926 74,6193 146,026 223,858 145,066 223,858 145,545 222,727 95,2484 47,6242
22 72,8926 74,6193 146,026 225 145,066 223,858 146,026 222,727 90,9278 227,32
23 72,8926 74,6193 146,026 225 145,066 223,858 145,545 222,727 86,9822 217,456
24 72,8926 74,6193 146,512 223,858 145,545 223,858 145,545 222,727 83,3648 83,3648
25 72,8926 74,6193 146,026 225 145,545 223,858 145,545 222,727 79,9637 119,946
26 72,8926 74,6193 146,026 223,858 145,545 223,858 145,545 222,727 153,793 230,689
27 72,8926 74,6193 146,026 225 145,545 223,858 146,026 223,858 148,111 222,166
28 72,8926 74,6193 146,026 223,858 145,545 223,858 145,545 222,727 142,834 214,251
29 72,8926 74,6193 146,026 225 145,545 223,858 145,545 223,858 137,92 68,9601
30 72,8926 74,6193 146,026 223,858 145,545 223,858 145,545 223,858 66,6667 233,333
31 72,8926 74,6193 146,512 223,858 145,545 223,858 146,026 223,858 64,5208 225,823
32 72,8926 74,6193 146,026 223,858 145,545 223,858 145,545 223,858 437,562 218,781
33 72,8926 74,6193 146,026 223,858 145,545 223,858 145,545 223,858 151,546 90,9278
34 72,8926 74,6193 146,026 225 145,545 223,858 145,545 223,858 147,098 235,357
35 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 142,811 228,497
36 72,8926 223,858 146,026 225 145,545 223,858 145,545 223,858 138,854 222,166
37 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 432,353 216,176
38 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 52,6253 131,563
39 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 435,872 230,756
40 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 150 225
Universidad de San Buenaventura Bogotá
142
FrameSize AMDF ACF SIFT CEPSTRUM HPS
Duración (ms) D3 A3 D3 A3 D3 A3 D3 A4 D3 A4
41 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 146,35 219,524
42 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 142,873 214,309
43 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 139,557 116,297
44 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 136,392 227,32
45 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 288,816 222,166
46 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 434,697 217,348
47 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 148,915 212,735
48 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 145,82 229,145
49 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 142,851 224,479
50 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 140 220
51 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 137,261 215,696
52 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 57,6973 115,395
53 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 150,963 226,444
54 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 148,173 222,26
55 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 145,425 218,137
56 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 142,834 214,251
57 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 438,544 228,043
58 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 293,081 224,12
59 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 440,661 220,331
60 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 150 216,667
61 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 147,546 229,517
62 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 145,172 225,823
63 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 142,873 222,246
64 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 437,562 218,781
65 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 292,257 215,347
66 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 439,334 227,241
67 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 149,239 223,858
68 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 147,049 220,574
69 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 144,923 217,384
70 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 142,857 228,571
71 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 436,634 225,359
72 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 291,685 222,236
73 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 438,397 219,199
74 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 223,858 148,667 229,758
75 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 146,644 226,632
76 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 144,72 223,658
77 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 142,845 220,76
78 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 435,872 217,936
Universidad de San Buenaventura Bogotá
143
FrameSize AMDF ACF SIFT CEPSTRUM HPS
Duración
(ms) D3 A3 D3 A3 D3 A3 D3 A4 D3 A4
79 72,8926 223,858 146,026 223,858 145,545 223,858 145,545 225 291,131 227,842
80 72,8926 223,858 146,026 223,858 145,545 223,858 72,7723 225 437,5 225
81 72,8926 223,858 146,026 223,858 145,545 223,858 72,7723 225 148,152 222,228
82 72,8926 223,858 146,026 223,858 145,545 223,858 72,7723 225 146,35 219,524
83 72,8926 223,858 146,026 223,858 145,545 223,858 72,7723 223,858 144,59 228,934
84 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 142,873 226,215
85 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 435,236 223,5
86 72,8926 223,858 146,026 223,858 145,545 223,858 72,7723 223,858 290,667 220,907
87 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 436,747 448,241
88 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 147,72 227,261
89 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 146,064 224,713
90 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 144,444 222,222
91 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 142,861 219,786
92 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 434,804 228,272
93 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 290,344 225,823
94 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 436,212 223,426
95 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 147,351 221,026
96 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 145,82 447,874
97 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 222,727 144,32 226,788
98 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 223,858 142,851 224,479
99 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 222,727 292,923 222,217
100 72,8926 223,858 146,026 223,858 145,545 223,858 72,8926 222,727 290 220
Universidad de San Buenaventura Bogotá
144
Anexo 2
Canción Infantil “Los pollitos”
Valores Ideales Análisis en Adobe Audition Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
70 6,00 0,38 70 6 0,354 70 6 0,34 0 0,014
72 6,38 0,38 72 6,354 0,38 72 6,34 0,38 0,014 0
74 6,75 0,38 74 6,734 0,347 74 6,72 0,36 0,014 0,013
75 7,13 0,38 75 7,081 0,388 75 7,08 0,38 0,001 0,008
77 7,50 0,75 77 7,469 0,744 77 7,46 1,48 0,009 0,024
77 8,25 0,75 77 8,213 0,76
79 9,00 0,38 79 8,96 0,382 79 8,94 0,38 0,02 0,002
82 9,38 0,38 82 9,341 0,358 82 9,32 0,38 0,021 0,022
79 9,75 0,38 79 9,7 0,39 79 9,7 0,36 0 0,03
82 10,13 0,38 82 10,09 0,396 82 10,06 0,42 0,03 0,024
77 10,50 0,75 77 10,486 0,778 77 10,48 1,5 0,006 0,013
77 11,25 0,75 77 11,264 0,735
75 12,00 0,38 75 11,999 0,398 75 11,98 1,54 0,019 0,009
75 12,38 0,38 75 12,392 0,393
75 12,75 0,38 75 12,785 0,36
75 13,13 0,38 75 13,145 0,38
74 13,50 1,13 74 13,525 0,92 74 13,52 0,92 0,005 0
72 15,00 0,38 72 15,03 0,344 72 15,02 0,34 0,01 0,004
74 15,38 0,38 74 15,373 0,38 74 15,36 0,38 0,013 0
72 15,75 0,38 72 15,75 0,337 72 15,74 0,34 0,01 0,003
74 16,13 0,38 74 16,083 0,412 74 16,08 0,42 0,003 0,008
70 16,50 1,13 70 16,495 0,95 70 16,5 0,98 0,005 0,03
Universidad de San Buenaventura Bogotá
145
Escala en Si bemol Mayor (Bb)
Valores Ideales Análisis en Adobe Audition Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
70 0,00 1,71 70 0,02 1,54 70 0 1,54 0,02 0
72 1,71 1,71 72 1,74 1,623 72 1,74 1,62 0 0,003
74 3,43 1,71 74 3,44 1,62 74 3,46 1,58 0,02 0,04
75 5,14 1,71 75 5,146 1,62 75 5,16 1,62 0,014 0
77 6,86 1,71 77 6,87 1,45 77 6,88 1,44 0,01 0,01
79 8,57 1,71 79 8,58 1,516 79 8,58 1,52 0 0,004
81 10,29 1,71 81 10,33 1,6 81 10,3 1,58 0,03 0,02
82 12,00 1,71 82 12,06 1,517 82 12,06 1,5 0 0,017
“Zelda´s lullaby”
Valores Ideales Análisis en Adobe Audition
Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
59 0 1,2 59 0,018 1,209 59 0 1,24 0,018 0,031
62 1,2 0,6 62 1,227 0,604 62 1,24 0,6 0,013 0,004
57 1,8 1,2 57 1,829 1,23 57 1,84 1,2 0,011 0,03
55 3 0,3 55 3,054 0,274 55 3,04 0,3 0,014 0,026
57 3,3 0,3 57 3,326 0,299 57 3,34 0,3 0,014 0,001
59 3,6 1,2 59 3,625 1,203 59 3,64 1,2 0,015 0,003
62 4,8 0,6 62 4,828 0,602 62 4,84 0,6 0,012 0,002
57 5,4 1,8 57 5,432 1,797 57 5,44 1,78 0,008 0,017
59 7,2 1,2 59 7,23 1,202 59 7,22 1,22 0,01 0,018
62 8,4 0,6 62 8,432 0,59 62 8,44 0,58 0,008 0,01
69 9 1,2 69 9,022 1,197 69 9,02 1,2 0,002 0,003
67 10,2 0,6 67 10,222 0,597 67 10,22 0,6 0,002 0,003
62 10,8 1,2 62 10,82 1,209 62 10,82 1,22 0 0,011
60 12 0,3 60 12,029 0,306 60 12,04 0,3 0,011 0,006
59 12,3 0,3 59 12,334 0,31 59 12,34 0,32 0,006 0,01
57 12,6 1,8 57 12,644 1,726 57 12,66 1,7 0,016 0,026
Universidad de San Buenaventura Bogotá
146
Fragmento Chirimía
Valores Ideales Análisis en Adobe Audition
Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
74 6,00 0,33 74 5,962 0,38 74 5,96 0,38 0,002 0
75 6,33 0,33 75 6,343 0,325 75 6,34 0,32 0,003 0,005
77 6,67 0,33 77 6,669 0,327 77 6,66 0,34 0,009 0,013
74 7,00 0,33 74 6,996 0,361 74 7 0,36 0,004 0,001
75 7,33 0,33 75 7,358 0,311 75 7,36 0,3 0,002 0,011
77 7,67 0,33 77 7,67 0,294 77 7,66 0,3 0,01 0,006
80 7,964 0,064 80 7,96 0,04 0,004 0,024
81 8,00 1,17 81 8,028 1,144 81 8 1,16 0,028 0,016
80 9,17 0,17 80 9,173 0,175 80 9,16 0,18 0,013 0,005
79 9,33 1,00 79 9,348 0,952 79 9,34 0,92 0,008 0,032
72 11,33 0,33 72 11,288 0,341 72 11,3 0,32 0,012 0,021
74 11,67 0,33 74 11,63 0,331 74 11,62 0,34 0,01 0,009
75 12,00 0,33 75 11,961 0,329 75 11,96 0,32 0,001 0,009
73 12,291 0,023 73 12,28 0,04 0,011 0,017
72 12,33 0,33 72 12,314 0,321 72 12,32 0,3 0,006 0,021
74 12,67 0,33 74 12,635 0,343 74 12,62 0,36 0,015 0,017
75 13,00 0,33 75 12,979 0,321 75 12,98 0,3 0,001 0,021
79 13,33 1,17 79 13,3 1,123 78 13,28 0,04 0,02 0,037
79 13,32 1,12
78 14,50 0,17 78 14,423 0,222 78 14,44 0,22 0,017 0,002
77 14,67 1,00 77 14,646 0,983 77 14,66 0,96 0,014 0,023
70 16,67 0,33 70 16,676 0,311 70 16,68 0,3 0,004 0,011
72 17,00 0,33 72 16,998 0,328 72 16,98 0,32 0,018 0,008
74 17,33 0,33 74 17,316 0,34 74 17,3 0,34 0,016 0
70 17,67 0,33 70 17,656 0,317 70 17,64 0,32 0,016 0,003
72 18,00 0,33 72 17,973 0,339 72 17,96 0,34 0,013 0,001
74 18,33 0,33 74 18,313 0,306 74 18,3 0,3 0,013 0,006
77 18,67 1,17 77 18,619 1,117 77 18,6 1,14 0,019 0,023
76 19,83 0,17 76 19,736 0,214 76 19,74 0,22 0,004 0,006
75 20,00 1,00 75 19,951 0,878 75 19,96 0,84 0,009 0,038
77 21,67 0,33 77 21,676 0,294 77 21,68 0,26 0,004 0,034
77 22,00 0,33 77 22,027 0,28 77 22,04 0,26 0,013 0,02
79 22,33 0,33 79 22,308 0,324 79 22,3 0,32 0,008 0,004
81 22,67 0,33 81 22,632 0,329 81 22,62 0,34 0,012 0,011
82 23,00 0,33 82 22,961 0,322 82 22,96 0,3 0,001 0,022
77 23,33 0,33 77 23,327 0,318 77 23,32 0,32 0,007 0,002
75 23,67 0,33 75 23,646 0,34 75 23,64 0,34 0,006 0
74 24,00 0,33 74 23,986 0,274 74 23,98 0,26 0,006 0,014
77 25,00 0,33 77 24,990 0,344 77 25 0,32 0,01 0,024
79 25,334 0,006 80 25,32 0,04 0,014 0,008
80 25,341 0,028
81 25,369 0,014
82 25,33 0,33 82 25,383 0,272 82 25,36 0,26 0,023 0,012
77 25,67 0,33 77 25,720 0,264 77 25,72 0,26 0 0,004
74 26,00 0,33 74 25,984 0,325 74 25,98 0,32 0,004 0,005
76 26,309 0,002 77 26,3 0,3 0,009 0,002
77 26,33 0,33 77 26,311 0,300
78 26,611 0,005 78 26,6 0,04 0,011 0,007
79 26,616 0,014
78 26,630 0,014
79 26,642 0,012 81 26,64 0,04 0,002 0,008
80 26,649 0,020
82 26,67 0,17 82 26,669 0,196 82 26,68 0,16 0,011 0,036
Universidad de San Buenaventura Bogotá
147
Mario Bros
ZValores Ideales Análisis en Adobe Audition Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
74 4,36 0,14 74 4,323 0,168 74 4,32 0,32 0,003 0,017
74 4,50 0,14 74 4,491 0,169
74 4,77 0,14 74 4,761 0,149 74 4,76 0,16 0,001 0,011
70 5,05 0,14 70 5,025 0,14 70 5,02 0,14 0,005 0
74 5,18 0,14 74 5,165 0,185 74 5,16 0,18 0,005 0,005
77 5,45 0,27 77 5,466 0,218 77 5,46 0,22 0,006 0,002
65 6,00 0,14 65 6,025 0,194 65 6,02 0,18 0,005 0,014
70 6,55 0,14 70 6,549 0,23 70 6,56 0,2 0,011 0,03
65 6,95 0,14 65 6,95 0,21 65 6,96 0,14 0,01 0,07
62 7,36 0,14 62 7,34 0,2 62 7,36 0,12 0,02 0,08
67 7,77 0,14 67 7,775 0,165 67 7,78 0,14 0,005 0,025
69 8,05 0,14 69 8,03 0,21 69 8,04 0,18 0,01 0,03
68 8,32 0,14 68 8,28 0,17 68 8,28 0,14 0 0,03
67 8,45 0,14 67 8,45 0,221 68 8,42 0,04 0,03 0,101
68 8,46 0,08
65 8,73 0,14 65 8,73 0,082 65 8,74 0,06 0,01 0,022
74 8,86 0,14 74 8,842 0,167 74 8,84 0,16 0,002 0,007
77 9,14 0,14 77 9,082 0,181 77 9,08 0,18 0,002 0,001
79 9,27 0,14 79 9,263 0,181 79 9,26 0,18 0,003 0,001
75 9,55 0,14 75 9,514 0,151 75 9,52 0,14 0,006 0,011
77 9,68 0,14 77 9,665 0,155 77 9,66 0,16 0,005 0,005
74 9,95 0,14 74 9,978 0,152 74 9,98 0,14 0,002 0,012
70 10,23 0,14 70 10,2 0,146 70 10,2 0,14 0 0,006
72 10,36 0,14 72 10,346 0,114 72 10,34 0,12 0,006 0,006
69 10,50 0,14 69 10,46 0,18 69 10,46 0,16 0 0,02
Universidad de San Buenaventura Bogotá
148
Cumpleaños
Valores Ideales Análisis en Adobe Audition
Matriz generada por el conversor Desviación
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg)
Pitch MIDI
Inicio (seg)
Duración (seg) Inicio (seg)
Duración (seg)
77 2,00 0,33 77 1,955 0,304 77 1,96 0,3 0,005 0,004
77 2,33 0,33 77 2,3 0,29 77 2,3 0,28 0 0,01
79 2,67 1,33 79 2,655 1,353 79 2,66 1,34 0,005 0,013
77 4,00 0,67 77 4,008 0,58 77 4 0,58 0,008 0
82 4,67 0,67 82 4,59 0,707 82 4,58 0,72 0,01 0,013
81 5,33 1,00 81 5,298 0,981 81 5,3 0,98 0,002 0,001
77 7,33 0,33 77 7,31 0,343 77 7,32 0,32 0,01 0,023
78 7,67 0,33 78 7,653 0,296 78 7,64 0,3 0,013 0,004
79 8,00 1,33 79 7,95 1,367 79 7,94 1,38 0,01 0,013
77 9,33 0,50 77 9,317 0,58 77 9,32 0,56 0,003 0,02
84 10,00 0,67 84 9,975 0,596 84 9,98 0,58 0,005 0,016
82 10,67 1,00 82 10,65 0,95 82 10,66 0,92 0,01 0,03
65 12,67 0,33 65 12,68 0,28 65 12,68 0,24 0 0,04
65 13,00 0,33 65 12,96 0,04 65 12,92 0,04 0,04 0
65 13 0,32 65 13 0,24 0 0,04
65 13,24 0,04
77 13,33 1,33 77 13,345 1,35 77 13,34 1,34 0,005 0,01
74 14,67 0,67 74 14,696 0,638 74 14,68 0,64 0,016 0,002
70 15,33 0,67 70 15,335 0,663 70 15,32 0,68 0,015 0,017
69 16,00 1,17 69 15,998 1,25 69 16 1,24 0,002 0,01
67 17,33 0,17 67 17,31 0,047 67 17,32 0,04 0,01 0,007
68 17,358 0,08 68 17,36 0,04 0,002 0,04
75 18,00 0,33 75 17,985 0,323 75 17,98 0,32 0,005 0,003
76 18,326 0,018 76 18,3 0,04 0,026 0,022
75 18,33 0,33 75 18,328 0,303 75 18,34 0,3 0,012 0,003
74 18,67 1,33 74 18,631 1,382 74 18,64 1,38 0,009 0,002
70 20,00 0,67 70 20,013 0,66 70 20,02 0,64 0,007 0,02
72 20,67 0,67 72 20,684 0,631 72 20,66 0,66 0,024 0,029
70 21,33 1,33 70 21,316 1,344 70 21,32 1,32 0,004 0,024
Universidad de San Buenaventura Bogotá
149
Anexo 3
Canción infantil “Los pollitos”
Pitch MIDI Velocity
70 76
72 68
74 128
75 98
77 110
79 107
82 99
79 114
82 109
77 116
75 98
74 118
72 74
74 122
72 57
74 118
70 49
51 17
Escala en Bb
Pitch MIDI Velocity
70 55
72 70
74 104
75 128
77 117
79 79
81 107
82 67
Universidad de San Buenaventura Bogotá
150
“Zelda´s Lullaby”
Pitch MIDI Velocity
59 116
62 128
57 65
55 66
57 63
59 124
62 127
57 68
59 122
62 126
69 104
67 113
62 117
60 118
59 119
57 67
Fragmento Chirimía
Pitch MIDI Velocity
74 83
75 86
77 57
74 39
75 64
77 47
80 51
81 97
80 52
79 67
72 82
74 52
75 77
73 38
72 58
74 53
75 68
Universidad de San Buenaventura Bogotá
151
Pitch MIDI Velocity
78 51
79 91
78 54
77 54
70 128
72 71
74 58
70 89
72 58
74 50
77 69
76 60
75 55
77 72
77 61
79 94
81 115
82 67
77 70
75 96
74 63
77 68
80 86
82 115
77 63
74 42
77 64
78 38
81 85
82 82
Universidad de San Buenaventura Bogotá
152
Mario Bros
Pitch MIDI Velocity
74 59
74 53
70 98
74 58
77 81
65 47
70 109
65 35
62 49
67 33
69 128
68 29
68 18
68 23
65 41
74 56
77 82
79 100
75 71
77 64
74 48
70 85
72 52
69 114
Universidad de San Buenaventura Bogotá
153
Cumpleaños
Pitch MIDI Velocity
77 75
77 54
79 74
77 46
82 36
81 54
77 59
78 56
79 68
77 48
84 128
82 38
65 54
65 31
65 53
65 30
77 78
74 58
70 80
69 97
67 24
68 22
75 99
76 40
75 85
74 54
70 68
72 43
70 54
Universidad de San Buenaventura Bogotá
154
Anexo 4
Canción Infantil “Los pollitos”
Valores Ideales Matriz cuantizada
Pitch MIDI Inicio (seg) Duración
(seg) Pitch MIDI Inicio (seg) Duración (seg)
70 6 0,375 70 6 0,375
72 6,375 0,375 72 6,375 0,375
74 6,75 0,375 74 6,75 0,375
75 7,125 0,375 75 7,125 0,375
77 7,5 0,75 77 7,5 1,5
77 8,25 0,75
79 9 0,375 79 9 0,375
82 9,375 0,375 82 9,375 0,375
79 9,75 0,375 79 9,75 0,375
82 10,125 0,375 82 10,125 0,375
77 10,5 0,75 77 10,5 1,5
77 11,25 0,75
75 12 0,375 75 12 1,5
75 12,375 0,375
75 12,75 0,375
75 13,125 0,375
74 13,5 1,125 74 13,5 0,9375
72 15 0,375 72 15 0,375
74 15,375 0,375 74 15,375 0,375
72 15,75 0,375 72 15,75 0,375
74 16,125 0,375 74 16,125 0,375
70 16,5 1,125 70 16,5 0,9375
Universidad de San Buenaventura Bogotá
155
“Zelda´s Lullaby”
Valores Ideales Matriz cuantizada
Pitch MIDI Inicio (seg) Duración
(seg) Pitch MIDI Inicio (seg) Duración (seg)
59 0 1,2 59 0 1,2
62 1,2 0,6 62 1,2 0,6
57 1,8 1,2 57 1,8 1,2
55 3 0,3 55 3 0,3
57 3,3 0,3 57 3,3 0,3
59 3,6 1,2 59 3,6 1,2
62 4,8 0,6 62 4,8 0,6
57 5,4 1,8 57 5,4 1,8
59 7,2 1,2 59 7,2 1,2
62 8,4 0,6 62 8,4 0,6
69 9 1,2 69 9 1,2
67 10,2 0,6 67 10,2 0,6
62 10,8 1,2 62 10,8 1,2
60 12 0,3 60 12 0,3
59 12,3 0,3 59 12,3 0,3
57 12,6 1,8 57 12,6 1,8
Escala en Bb
Valores Ideales Matriz cuantizada
Pitch MIDI Inicio (seg) Duración
(seg) Pitch MIDI Inicio (seg) Duración (seg)
70 0,00 1,71 70 0,00 1,71
72 1,71 1,71 72 1,71 1,71
74 3,43 1,71 74 3,43 1,71
75 5,14 1,71 75 5,14 1,71
77 6,86 1,71 77 6,86 1,29
79 8,57 1,71 79 8,57 1,71
81 10,29 1,71 81 10,29 1,71
82 12,00 1,71 82 12,00 1,71
Universidad de San Buenaventura Bogotá
156
Anexo 5
clear all mindur=16; tempofin=100; fmin=130; fmax=1570; waveFile='zelda´s_lullaby_m.wav'; [y, fs, nbits]=wavread(waveFile); progressbar(0.0025); y=y-mean(y); progressbar(0.0050); frequency=fmax; maxpitch =round(69+12*log2(frequency/440))+1 fmax= 440*2.^((maxpitch-69)/12) progressbar(0.0075); frequency=fmin; minpitch =round(69+12*log2(frequency/440))-1 fmin= 440*2.^((minpitch-69)/12) progressbar(0.01); maxFreq=fmax; minFreq=fmin; progressbar(0.0125); if minFreq<100 frameDuration=(((fs/minFreq)*2)/fs)*1000; % Duracion en ms de cada frame else frameDuration=20; end frameSize=round(frameDuration*fs/1000); overlap=0; n1=round(fs/maxFreq); % Segmento de acf(1:n1) que no sera usado n2=round(fs/minFreq); % Segmento de acf(n2:end)que no sera usado frameMat=buffer(y, frameSize, overlap); frameNum=size(frameMat, 2); volume=zeros(frameNum, 1); progressbar(0.0155); for i=1:frameNum frame=frameMat(:,i); frame=frame-median(frame); % DC bias volume(i)=sum(abs(frame)); % metodo 1 end volumeTh=max(volume)/8; pitch=0*volume; acf=zeros(frameSize, 1); progressbar(0.0223); pg=0.9762/frameNum; for i=1:frameNum
Universidad de San Buenaventura Bogotá
157
frame=frameMat(:, i); for a=1:frameSize acf(a)=dot(frame(1:frameSize-a+1), frame(a:frameSize)); end progressbar(0.0223+i*(pg)); acf(1:n1)=-inf; acf(n2:end)=-inf; [maxValue, maxIndex]=max(acf); freq=fs/(maxIndex-1); freqgrafic(i)=freq; pitch(i)=round(69+12*log2(freq/440)); if(volume(i)<volumeTh)||(pitch(i)<minpitch)||(pitch(i)>maxpitch) freqgrafic(i)=0; pitch(i)=0; end end minNoteDuration=0.0201; clear notes contiguales=1; % valores iniciales para conteo de notas notes=[]; % prelocalizacion noteDur=0; % valores iniciales para conteo de notas for i=2:length(pitch) noteDur=contiguales*(frameDuration/1000); % calculo de duracion de la nota if (pitch(i)~=pitch(i-1))&& noteDur>minNoteDuration % si la nota es diferente a su anterior y mayor a la duracion minima notes=[notes,pitch(i-1),noteDur]; % Creacion de una nueva nota noteDur=0; % se resetean las variables para iniciar cuenta de nuevo contiguales=1; else contiguales= contiguales+1; % se sigue sumando notas iguales end end notes=[notes, pitch(i), noteDur]; % se crea la ultima nota MidiPitch=notes(1:2:end); % Se toman los valores impares= notas midi DurSeg=notes(2:2:end); % Se toman los valores pares= duraciones OnSeg=[0, cumsum(DurSeg)]; % Se suma en cada posicion las duraciones anteriores mas la posicion nmat=[]; % prelocalizacion de nmat for speed for i=1:length(MidiPitch) OnBeats = OnSeg(i)/(60/tempofin); % Comienzos en Beats DurBeats = DurSeg(i)/(60/tempofin); % Duraciones en Beats channel = 1; % canal MIDI vel = 110; % velocity provisional if MidiPitch(i)~= 0 nmat=[nmat;OnBeats DurBeats channel round(MidiPitch(i)) vel OnSeg(i) DurSeg(i)];% Concatenacion horizontal
Universidad de San Buenaventura Bogotá
158
end end progressbar(0.99925); % Calculo de Velocity for i=1:size(nmat, 1) principio(i)=round((nmat(i,6)*fs)/frameSize); final(i)=round(((nmat(i,6)+(nmat(i,7)))*fs)/frameSize); maximoglobal=max(volume); if principio(i)==final(i)& principio(i)~=1 principio(i)= principio(i)-1; end volmaxnote(i)=max(volume(principio(i)+1:final(i))); velcalc(i)=round((volmaxnote(i)*128)/maximoglobal); nmat(i,5)=velcalc(i); end % Cuantizacion metodo 1 nmatnueva=nmat; minfiguronote=(4*((60/tempofin)/mindur)); for i=1:size(nmat, 1) if nmatnueva (i,7)<=minfiguronote quantizatime= minfiguronote/round(minfiguronote/ nmatnueva (i,7)); nmatnueva (i,7)= quantizatime; else quantizatime= minfiguronote*(round(nmatnueva (i,7)/minfiguronote) ); nmatnueva (i,7)= quantizatime; end end %cuantizacion columnas 6 y 7 nmatcuantizada= nmatnueva; if nmatcuantizada (1,6)<=minfiguronote quantizatimeOnseg= minfiguronote/round(minfiguronote/chalomat(i,6)); nmatcuantizada (1,6)= quantizatime; else quantizatimeOnseg= minfiguronote*(round(nmatcuantizada (1,6)/minfiguronote) ); nmatnueva(1,6)= quantizatime; end for i=2:size(nmat, 1) if nmat(i,6)==nmat(i-1,6)+nmat(i-1,7) nmatcuantizada (i,6)= nmatcuantizada (i-1,6)+ nmatcuantizada (i-1,7); else quantizatimeOnseg1= minfiguronote*(round(nmatcuantizada (i,6)/minfiguronote) ); nmatcuantizada (i,6)= quantizatimeOnseg1; end
Universidad de San Buenaventura Bogotá
159
end %cuantizacion columna 1 nmat for i=1:size(nmatcuantizada, 1) nmatcuantizada (i,1)= nmatcuantizada (i,6)/(60/tempofin); end %cuantizacion columna 2 nmat for i=1:size(nmatcuantizada, 1) nmatcuantizada i,2)= nmatcuantizada (i,7)/(60/tempofin); end %guardar archivo midi fin conversion progressbar(1);