Aprende a generar la versión MIDI cuantizada de un archivo de audio con Python en Ubuntu 18.04

Cómo extraer la melodía de un archivo de audio y exportarla a MIDI (generar MIDI cuantizado) usando Python en Ubuntu 18.04

La extracción de melodías es la tarea de estimar automáticamente la frecuencia fundamental correspondiente al tono de la línea melódica predominante de una pieza de música polifónica (u homofónica). Otros nombres para esta tarea incluyen Extracción de melodía de audio, Extracción de melodía predominante, Estimación de melodía predominante y Estimación de frecuencia fundamental predominante (F0).

En este artículo, le explicaremos lo fácil que es generar una versión MIDI a partir de un archivo WAV (formato de audio sin procesar) en Ubuntu 18.04.

1. Instale el complemento Vamp de extracción de melodía Melodia

El complemento MELODIA estima automáticamente el tono de la melodía principal de una canción. Más específicamente, implementa un algoritmo que estima automáticamente la frecuencia fundamental correspondiente al tono de la línea melódica predominante de una pieza de música polifónica (u homofónica o monofónica). Dada una canción, el algoritmo estima:

  1. Cuando la melodía está presente y cuando no lo está (también conocido como detección de voz)
  2. El tono de la melodía cuando está presente.

Una introducción no científico amigable para Melody extracción, así como el algoritmo, incluyendo gráficos y ejemplos de sonido, se pueden encontrar en:  www.justinsalamon.com/melody- extracción . Como primer paso, debes descargar Melodia y ponerlo a disposición desde la terminal. En esta página encontrará el formulario de descarga de Melodia . Puede llenarlo con información falsa, por supuesto, para seguir adelante:

Download Melodia Form

Una vez que envíe el formulario, se iniciará la descarga y obtendrá el archivo tar. Luego, extrae todo el contenido del zip:

Melodia Zip Data

En el directorio /usr/local/lib/vamp (crea el directorio vamp y almacena el contenido del zip dentro). Tenga en cuenta que necesitará acceso de root para extraer el contenido del zip en el directorio mencionado.

2. Clonar el proyecto audio_to_midi_melodia

Después de instalar Melodia, ahora necesita obtener el código fuente del proyecto Audio to Midi disponible en Github. Puede clonar rápidamente el código en algún directorio de su computadora ejecutando el siguiente comando:

git clone https://github.com/justinsalamon/audio_to_midi_melodia.git

El  script de  Python audio_to_midi_melodia le permite extraer la melodía de una canción y guardarla en un archivo MIDI. El script utiliza el   algoritmo Melodia para realizar la  extracción de melodías , aprovechando el nuevo  módulo vamp que permite  ejecutar complementos vamp (como Melodia) directamente en Python Una vez que se extrae el contorno de tono de la melodía, el siguiente paso (¡no trivial!) Es  segmentarlo  en notas y  cuantificar  el tono de cada nota, produciendo una serie discreta de notas que luego se pueden exportar a cualquier formato simbólico como como MIDI o  JAMS .

Cuantificar una secuencia de tono continuo en una serie de notas es una Área de investigación activa  y permanece y  problema abierto . Aún así, podemos obtener resultados bastante decentes utilizando una serie de heurísticas:

  1. Convierta la secuencia de tono de Hertz a números de nota MIDI (fraccionarios)
  2. Redondea cada valor al número de nota MIDI entero más cercano
  3. Opcionalmente, aplique un filtro mediano para suavizar los saltos cortos en el tono (por ejemplo, debido al vibrato)
  4. Itere sobre la secuencia y cada vez que cambie el tono, comience una nueva nota

Después de clonar el proyecto, cambie al directorio audio_to_midi_melodia:

cd audio_to_midi_melodia

Entonces podrá instalar las dependencias para ejecutar el proyecto. Para obtener más información sobre este proyecto, visite el repositorio oficial en Github aquí .

3. Instalar dependencias

El proyecto necesita varias bibliotecas para funcionar correctamente. Puede instalarlos fácilmente con un solo comando leyendo el archivo requirements.txt en la terminal:

pip install -r requirements.txt

Los paquetes que se instalarán son:

  • archivo de sonido : SoundFile  es una biblioteca de audio basado en libsndfile, CFFI y NumPy.
  • resampy : conversión de frecuencia de muestreo eficiente en Python. Este paquete implementa el método de interpolación sinc de banda limitada para la conversión de la frecuencia de muestreo.
  • vamp :  este módulo permite que el código Python cargue y use complementos de Vamp de código nativo ( http://vamp-plugins.org ) para el análisis de características de audio.
  • midiutil :  una interfaz de Python para escribir archivos MIDI multipista.
  • jams : Una especificación de música anotada JSON para la investigación MIR reproducible.
  • numpy : NumPy es el paquete fundamental para la computación científica con Python. Contiene entre otras cosas.
  • scipy : SciPy es un ecosistema de software de código abierto basado en Python para matemáticas, ciencia e ingeniería.

4. Genere un archivo MIDI desde WAV

Después de instalar las dependencias, ahora puede proceder con la generación de la versión MIDI de su audio, proporcionando simplemente como argumento posicional la ruta al archivo WAV que desea convertir a MIDI y proporcionar como segundo argumento posicional el archivo MIDI de salida:

python audio_to_midi_melodia.py ./input_audio.wav ./output_file.mid 120

Tenga en cuenta que la exportación a MIDI requiere proporcionar un valor de BPM (pulsaciones por minuto), puede definir un valor arbitrariamente, estimarlo manualmente o estimarlo automáticamente utilizando uno de los algoritmos de estimación de tempo incluidos en Essentia, Librosa o si Me gustaría ceñirme a los complementos vamp QMVP. No se requiere BPM si exporta a JAMS, que utiliza directamente los tiempos de inicio de nota estimados a partir de la pista de audio. Sin embargo, también puede buscar en Google el tempo de la canción y proporcionar este valor. En este ejemplo, estableceremos el BPM en 120 (tercer argumento posicional).

También puede cambiar la duración mínima de cada sintetizador y exportarlo también en formato JAMS:

python audio_to_midi_melodia.py infile outfile bpm [--smooth SMOOTH] [--minduration MINDURATION] [--jams]

Más información

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores