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