Softonic.com otorga a LoginControl la corona Softonic del Muy Bueno.


LoginControl hace presencia en...



... y en el CD4 de...




 

Convertidor de Audio a MIDI

Volver al Índice

 
Introducción

  El proyecto consiste en realizar, mediante el lenguaje de programación MATLAB, un programa que sobre una señal de audio previamente grabada en el disco duro del ordenador o cualquier otro medio de almacenamiento, genere un archivo MIDI que contenga información musical sobre éste, es decir, la PARTITURA.

 
  Necesidad de conversión Audio -> MIDI

  La Conversión de un segmento de audio a un archivo MIDI es un viejo anhelo de una gran parte de los músicos y de los programadores de la industria de la informática musical.
  Algunas de las utilidades que se le pueden dar a una conversión fiable son las siguientes:
 

   

Para estudiantes de música, por ejemplo, el poder observar la partitura de una obra teniendo solamente el sonido.

Para músicos, la posibilidad de no necesitar escribir la música que componen, sino simplemente tocarla mientras con el ordenador se está grabando, y, a continuación, pasar este sonido grabado por la aplicación y obtener la partitura. (Aplicación similar a la de tener un teclado MIDI o cualquier otro controlador pero con la diferencia de que lo que se maneja es el instrumento real, no un controlador adaptado), obviando la diferencia de que ésta no es, ni pretende ser, una aplicación en tiempo real, con las ventajas de que no necesita un hardware muy potente y el inconveniente de tener que hacer la conversión en varios pasos.

Para diseñadores de Páginas Web: Si se desea que la página web diseñada contenga sonidos para añadirle alguna funcionalidad, o simplemente estética.
Un archivo de sonido con calidad CD tiene un bitrate de 44100 x 2 x 16 = 1411200 bps (Frec. muestreo x nº canales x resolución (bits) = bits/segundo). Si este archivo se comprime a formato mp3 se puede reducir el bitrate hasta un 10% aproximadamente manteniendo la calidad de sonido casi inalterada, con lo que el resultado es de unos 141120 bps más o menos . Pero de todas formas este bitrate es aún insuficiente para que pueda ser reproducido a través de Internet, al menos si la conexión se realiza mediante un módem analógico (las nuevas tecnologías como ADSL y fibra óptica sí tienen suficiente velocidad de conexión, pero aún no está suficientemente extendido, de todos modos sigue siendo más que recomendable el ahorro de bitrate).
  Sin embargo, un archivo MIDI como máximo consume un bitrate de 33150 bps. Este caso solamente se da en archivos con una alta densidad de eventos (desplazamiento de pitch, volumen, efectos...) por lo que es perfectamente posible la reproducción sin descarga previa de un archivo MIDI vía Internet.

 
Elección del formato de salida

  Existen varios formatos para escribir archivos musicales, la elección se hizo de la siguiente manera:
De entrada, se desecharon los formatos propietarios , porque, aunque en algunas circunstancias puedan ser mejores (más adaptables, comprimidos, etc.) no ofrecen la gran ventaja que ofrece el formato elegido, el MIDI, que es la PORTABILIDAD, ya que al ser estándar, cualquier programa realizado por cualquier empresa o particular será capaz de importar o exportar archivos al mencionado formato MIDI, con lo cual el archivo generado por la aplicación aquí comentada será utilizable en cualquier plataforma que cuente con un reproductor para este tipo de archivos como pueden ser MS-Windows, Linux, Macintosh, incluso los antiguos Amiga o Atari en el terreno de los computadores o también sintetizadores con teclado que leen archivos MIDI desde una disquetera, debido a la estandarización que existe desde hace mucho tiempo en el formato de los archivos MIDI.

 
Elección del lenguaje de programación
  Se ha elegido el lenguaje de alto nivel MATLAB en lugar de otros debido a la extensión que éste tiene dentro del mundo académico y laboral, sobre todo en el terreno del procesado digital de señales por un lado, y por otro lado debido a las facilidades que presenta para el diseño de aplicaciones de este tipo, como la posibilidad de usar vectores de longitud variable, incluso en tiempo de ejecución, sin necesidad por parte del programador de preocuparse de la asignación de memoria dinámica como en C/C++, por ejemplo.
  Otro motivo es debido a que existen versiones de MATLAB para casi todas las plataformas informáticas existentes (PC-Windows, Linux-i386, SPARC, Macintosh…).
  Otra ventaja de este lenguaje es la gran cantidad de funciones previamente escritas, tales como la transformada discreta de Fourier, la auto-correlación, etc., y a un conversor a ANSI C/C++, por lo que portar el programa a cualquier otra plataforma no conlleva ninguna dificultad ni problema al igual que java o visual-basic, pero estos son lenguajes semi-interpretados, con lo que la ejecución en principio será más lenta que en un lenguaje compilado, o al menos, ocupará más memoria, necesitando por lo tanto un ordenador más potente para realizar la misma función.
 
Limitaciones de la conversión
  Lógicamente, ningún programa es perfecto, menos incluso en el caso de procesado de señales, y el programa que se explica en las siguientes páginas no es una excepción.
  Tiene una serie de limitaciones, algunas de más importancia que otras, que se describen en los siguientes apartados:
 

Polifonía: Con este algoritmo no es posible la conversión de señales polifónicas. El programa calcula el pitch o la frecuencia fundamental de un segmento y lo compara con el pitch del segmento anterior, esto hace que no puedan registrarse dos frecuencias fundamentales de dos instrumentos ni tampoco de un solo instrumento polifónico, tal y como pueden ser la guitarra, el piano, etc., usando este método. Una posible solución es hacer la transformada discreta de Fourier (en adelante FFT), la única transformada de Fourier posible dado que el sonido se encuentra muestreado previamente en un archivo del ordenador, y donde se observen picos introducir una nota, pero, ¿que es lo que se puede hacer con los armónicos?
  Para ilustrar esta dificultad y ayudar a entender el problema se muestra la Transformada de Fourier de un segmento de sonido real, previamente grabado con un micrófono, con los comentarios pertinentes.

  Observando detenidamente la imagen, y dada la distribución de los armónicos se puede observar que la frecuencia fundamental del segmento es la que corresponde al pico A. Sin embargo, si el algoritmo aplicado da como resultado el máximo de la Transformada de Fourier resultaría ser la frecuencia que corresponda al pico de frecuencia B, con el error que esta decisión conlleva, ya que a menudo la condición de que la energía de un armónico sea superior a la de la frecuencia fundamental tan solo se da durante el transitorio inicial o final de una nota, o a la transición entre dos notas diferentes.
  Éste no es, ni mucho menos, un problema trivial, incluso en los convertidores por hardware de instrumentos polifónicos (como lo es una guitarra, por citar un ejemplo) se usan 6 pastillas (sensores o transductores) distintas para convertir el sonido de cada cuerda de forma independiente unas de otras, así como 6 canales MIDI distintos, uno para cada cuerda.
  A este problema se le pueden aportar varias posibles soluciones. Una solución de las posibles, en el caso de que se quisiera realizar un convertidor polifónico, sería darle a todos los picos que superen una cierta energía una activación o continuidad de nota, pero esto presenta ahora un nuevo problema: Si los picos observados son armónicos de una frecuencia fundamental, algo bastante común en diferentes estilos musicales, esos picos siguen existiendo aun cuando no son notas reales y por lo tanto no deberían serlo, ya que si son activadas afectarían negativamente a la calidad de la conversión, también es posible hacer que las notas que sean armónicas (es fácil saber si una nota puede corresponder a un armónico, simplemente basta con calcular si su frecuencia es un múltiplo o no de una frecuencia inferior) no sean activadas y, en este caso, despreciarlas constantemente, pero, ¿qué se podría hacer si en un determinado momento suenan a la vez DO#5 y DO#6 ,por ejemplo?. Si se elige la opción de despreciar los armónicos se está cometiendo un error mientras que si la opción es tenerlos en cuenta cuando DO#5 esté sonando pero DO#6 no, esta nota se activará, con el consiguiente error en la conversión. Una posible mejora de este método sería activar el armónico si supera una cierta cantidad de energía respecto al primer armónico o frecuencia fundamental, pero en este caso surge otro problema, y es que no todos los instrumentos tienen el mismo nivel de armónicos, así que habría que incluir unos nuevos parámetros que son la energía del segundo, tercer y cuarto armónico (en una primera aproximación no deben ser necesarios más armónicos, debido a que generalmente van reduciendo su amplitud a medida que aumenta su índice, al menos en los instrumentos 'reales', no tiene por que ser de este modo en los sonidos generados por sintetizadores) respecto al primer armónico.
  Esta solución propuesta presenta un serio problema práctico, y es que el modelo de componentes armónicas construido ha sido realizado sobre un determinado instrumento. La situación se podría complicar mucho más si en el archivo de audio original existen varios instrumentos diferentes, algo bastante común: la combinación de distintos instrumentos en una sola pieza musical para ser escuchados simultáneamente, cada uno con una relación diferente entre sus componentes armónicas.

Instrumentos de percusión: Al ser los instrumentos de percusión (principalmente bombo, platos y caja, no son así los timbales, por ejemplo) instrumentos cuya característica principal no es tener una nota definida o frecuencia fundamental, sino que más bien se caracterizan por su envolvente y otros parámetros , no es posible utilizar el método anteriormente descrito para analizar una señal sonora grabada con instrumentos de percusión, sin tener en cuenta el hecho de que, además, en la gran mayoría de los casos de señales de audio procedentes de instrumentos de percusión existe además polifonía , el programa no sirve para analizar muestras de batería, ya que los resultados serían impredecibles, aunque, por supuesto, se deja al usuario la libertad para realizar experimentos con cualquier tipo de archivo de audio.

Visualización de la partitura: Debido a que la duración de una nota en música está definida por cuantos de tiempo (redonda, blanca, negra, semi/corchea, semi/fusa) es posible que dada la elección de los ticks por negra, y del tempo , se produzcan visualizaciones extrañas aunque no afecten a la calidad de la conversión. Pues se oirá perfectamente aunque no se visualizará de forma, no incorrecta, sino entendible por un músico, ya que el ritmo y el compás estarían completamente descoordinados y no tendría nada que ver con las notas.
  Se presenta un ejemplo de una señal perfectamente convertida, y, que sin embargo es de muy difícil lectura para un músico, no así para un ordenador, por lo cual sonará perfectamente.

Elección del Tempo: Es bastante adecuado escoger para la conversión un tempo correcto, aunque no es una elección que afectará a la calidad de la conversión sino a la visualización (tal y como se expuso en el apartado anterior).
  El algoritmo no incluye detección automática de tempo en si mismo, sino que se ha incluido como un módulo aparte, ya que el hecho de calcular simultáneamente la conversión y el tempo ralentizaría demasiado la ejecución del algoritmo. Aunque se puede escoger manualmente en caso de conocerlo de antemano, para así hacer más rápida la conversión (ver Manual de usuario).

 
  Siga en: Introducción a la nota musical
Se ve mejor con resolución de 800x600 ó superior.
PandreOnline.com - Copyright © 2002-2004 José Andrés Gómez Martín. Todos los derechos reservados.