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