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

 
Explicación del algoritmo de Conversión

  Como se ha comentado anteriormente, se pretende extraer de un archivo de audio los parámetros suficientes para poder construir un archivo MIDI, es decir, en que instante se lanza cada nota y cuánto dura cada una de ellas.
  Para ello se captura segmento a segmento el archivo original. A continuación se calcula la frecuencia fundamental del segmento mediante un algoritmo determinado a elegir entre las distintas elecciones dando dos posibles valores:
• Segmento silencioso
• Segmento sonoro
  Una vez calculada se compara con la frecuencia fundamental del segmento anterior, para saber si, en el caso de segmento sonoro, es una nota nueva o es la misma que sigue durando, o, en caso de silencio, para saber si hay que desactivar la nota previa o, por el contrario, incrementar la duración del silencio existente.
  Se muestra el algoritmo en la siguiente figura:

  En el algoritmo presentado se ha obviado el principio del programa, el cual consiste en la generación de la cabecera del archivo MIDI (tempo, compás, etc.) en su respectiva codificación ya que no aportaría nada para ayudar a entender el algoritmo y sin embargo sí lo haría más difícil de entender, al menos a primera vista. De todas maneras, son funciones muy simples escritas con muy pocas líneas de MATLAB y se puede estudiar el código fuente sin problemas.
  Consiste principalmente, como ya se ha comentado, en ir capturando segmentos de la señal a convertir y calcular la frecuencia fundamental de cada uno de ellos, e ir comparando con la frecuencia fundamental del segmento anterior, y de esta forma ir activando nuevas notas y desactivando las viejas.

 
   

Principales variables usadas.
• La variable 'prim_even' está a '1' al principio porque es necesario indicar el canal en el momento que ocurre el primer evento, a partir de ahí se pone a '0' y ya no se ejecuta más esa parte del algoritmo.
• El valor 'ilegal' (se ha hecho ilegal = -5, pero es indiferente), es el valor de la nota que indica silencio, como los valores válidos permitidos por el sistema MIDI son 0~127 al darle un valor -5 se indica que es un segmento considerado silencio.
• La variable 'ticks' es la medida de tiempo explicada en el capítulo 'Introducción al MIDI'
• El valor 'dt' es el tamaño del avance que hay entre dos segmentos (solapamiento) medido en 'ticks'
Dejando esto aparte se han usado algunas funciones dentro del programa, como son leer.m y leer2.m que se encargan de leer el fichero de configuración config.pbg (se mantienen dos versiones debido a la naturaleza inicial del proyecto, realizado en modo texto).

Explicación detallada del algoritmo.
1. Se extraen los parámetros del fichero de configuración.
2. Se inicializan las variables prim_even a 1, vieja a -5 (valor ilegal ) y ticks a 0.
3. Se abre el archivo .wav y se van tomando segmentos
4. Si no es el último segmento (lo más normal) se hace un análisis del segmento para detectar el pitch y calcular la nota MIDI correspondiente 0 hasta 127, o -5, en el caso de que el segmento sea considerado silencio.
5. Si la nota nueva y la antigua son iguales (sean valores legales o ilegales), simplemente se actualiza la variable ticks al valor correspondiente.
6. Si la nota nueva es diferente de la antigua, pero ambos son valores legales, se apaga la nota antigua y se activa la nueva.
7. Si el segmento anterior fue considerado silencio y el nuevo se considera una nota válida, se activa la nota nueva.
8. Si es el segmento actual el considerado silencio y el anterior tenía una nota válida, en este caso se desactiva la nota anterior.
9. Se actualiza la variable ticks en los casos 6, 7 y 8.
10. Se pasa el valor de nota nueva a la antigua en caso de desigualdad entre ellas.
11. Se repite el proceso hasta que llega el último segmento, en cuyo caso se desactiva la última nota vieja en caso de ser necesario y se cierra el archivo.

 
  Siga en: Algoritmo de detección del Tempo
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.