Basic Pitch es una biblioteca de Python para la transcripción automática de música (AMT), que utiliza una red neuronal ligera desarrollada por Audio Intelligence Lab de Spotify. Es pequeño, fácil de usar, se puede pip install
y npm install
a través de su repositorio hermano.
El tono básico puede ser simple, ¡pero está lejos de ser "básico"! basic-pitch
es eficiente y fácil de usar, y su compatibilidad con múltiples tonos, su capacidad para generalizar entre instrumentos y su precisión de notas compite con sistemas AMT mucho más grandes y que consumen más recursos.
Proporcione un archivo de audio compatible y basic-pitch generará un archivo MIDI, completo con inflexiones de tono. El tono básico es independiente del instrumento y admite instrumentos polifónicos, por lo que puede disfrutar libremente de la transcripción de toda su música favorita, sin importar qué instrumento utilice. El tono básico funciona mejor en un instrumento a la vez.
Esta biblioteca se lanzó junto con la publicación de Spotify en ICASSP 2022. Puede leer más sobre esta investigación en el artículo A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation.
Si utiliza esta biblioteca en investigaciones académicas, considere citarla:
@inproceedings { 2022_BittnerBRME_LightweightNoteTranscription_ICASSP ,
author = { Bittner, Rachel M. and Bosch, Juan Jos'e and Rubinstein, David and Meseguer-Brocal, Gabriel and Ewert, Sebastian } ,
title = { A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation } ,
booktitle = { Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP) } ,
address = { Singapore } ,
year = 2022 ,
}
Tenga en cuenta que hemos mejorado el tono básico más allá de lo presentado en este documento. Por lo tanto, si utiliza el resultado de Basic Pitch en una investigación académica, le recomendamos que cite la versión del código que se utilizó.
Si, por alguna razón, aún no estás completamente inspirado, o simplemente estás completamente superado por el ambiente general y esas cosas, visita nuestro ágil sitio web de demostración, basicpitch.io, para experimentar con nuestro modelo en cualquier audio musical que proporciones. !
basic-pitch
está disponible a través de PyPI. Para instalar la versión actual:
pip install basic-pitch
Para actualizar Basic Pitch a la última versión, agregue --upgrade
al comando anterior.
Basic Pitch viene con el modelo TensorFlow original y el modelo TensorFlow convertido a CoreML, TensorFlowLite y ONNX. De forma predeterminada, Basic Pitch no instalará TensorFlow como una dependencia a menos que estés usando Python>=3.11 . En cambio, de forma predeterminada, CoreML se instalará en MacOS, TensorFlowLite se instalará en Linux y ONNX se instalará en Windows. Si desea instalar TensorFlow junto con el tiempo de ejecución de inferencia de modelo predeterminado, puede instalar TensorFlow mediante pip install basic-pitch[tf]
.
De forma predeterminada, Basic Pitch intentará cargar un modelo en el siguiente orden:
Además, la variable del módulo ICASSP_2022_MODEL_PATH utilizará de forma predeterminada la primera versión disponible en la lista.
Explicaremos cómo anular esta lista de prioridades a continuación. Debido a que todas las demás serializaciones de modelos se convirtieron desde TensorFlow, recomendamos usar TensorFlow cuando sea posible. NB Basic Pitch no instala TensorFlow de forma predeterminada para ahorrar tiempo al usuario al instalar y ejecutar Basic Pitch.
Esta biblioteca ofrece una interfaz de herramienta de línea de comandos. Un comando de predicción básico generará y guardará una transcripción de audio en un archivo MIDI en la
al
:
basic-pitch < output-directory > < input-audio-path >
Por ejemplo:
basic-pitch /output/directory/path /input/audio/path
Para procesar más de un archivo de audio a la vez:
basic-pitch < output-directory > < input-audio-path- 1> < input-audio-path- 2> < input-audio-path- 3>
Opcionalmente, puede agregar cualquiera de los siguientes indicadores a su comando de predicción para guardar formatos adicionales de la salida de la predicción en el
:
--sonify-midi
para guardar adicionalmente una representación de audio .wav
del archivo MIDI.--save-model-outputs
para guardar adicionalmente los resultados del modelo sin procesar como un archivo NPZ.--save-note-events
para guardar adicionalmente los eventos de notas previstos como un archivo CSV. Si desea utilizar un tipo de modelo no predeterminado (por ejemplo, utilizar CoreML en lugar de TF), utilice el argumento --model-serialization
. La CLI cambiará el modelo cargado al tipo que prefiera.
Para descubrir más control de parámetros, ejecute:
basic-pitch --help
predecir()
Importe basic-pitch
a su propio código Python y ejecute las funciones predict
directamente, proporcionando una
y devolviendo los resultados de predicción del modelo:
from basic_pitch . inference import predict
from basic_pitch import ICASSP_2022_MODEL_PATH
model_output , midi_data , note_events = predict ( < input - audio - path > )
y
( float s) establecen la frecuencia de nota máxima y mínima permitida, en Hz, devuelta por el modelo. Los eventos de tono con frecuencias fuera de este rango se excluirán de los resultados de la predicción.model_output
es la salida de inferencia del modelo sin procesarmidi_data
son los datos MIDI transcritos derivados del model_output
note_events
es una lista de eventos de notas derivados del model_output
Nota: Como se mencionó anteriormente, ICASSP_2022_MODEL_PATH utilizará de forma predeterminada el primer tiempo de ejecución admitido en la lista TensorFlow, CoreML, TensorFlowLite, ONNX.
predecir() en un bucle
Para ejecutar la predicción dentro de un bucle, deberá cargar el modelo usted mismo y proporcionar predict()
con el objeto del modelo cargado para usarlo en llamadas de predicción repetidas, a fin de evitar una carga redundante y lenta del modelo.
import tensorflow as tf
from basic_pitch . inference import predict , Model
from basic_pitch import ICASSP_2022_MODEL_PATH
basic_pitch_model = Model ( ICASSP_2022_MODEL_PATH ))
for x in range ():
...
model_output , midi_data , note_events = predict (
< loop - x - input - audio - path > ,
basic_pitch_model ,
)
...
predecir_y_guardar()
Si desea que basic-pitch
orqueste la generación y el guardado de nuestros distintos tipos de archivos de salida admitidos, puede usar predict_and_save
en lugar de usar predict
directamente:
from basic_pitch . inference import predict_and_save
predict_and_save (
< input - audio - path - list > ,
< output - directory > ,
< save - midi > ,
< sonify - midi > ,
< save - model - outputs > ,
< save - notes > ,
)
dónde:
y
basic-pitch
pueda leer/escribir.
Códecs de audio compatibles
basic-pitch
acepta todos los archivos de sonido que sean compatibles con su versión de librosa
, incluidos:
.mp3
.ogg
.wav
.flac
.m4a
Solo audio de canal mono
Si bien puede utilizar audio estéreo como entrada para nuestro modelo, en el momento de la predicción, los canales de entrada se mezclarán a mono y luego se analizarán y transcribirán.
Tamaño de archivo/Longitud de audio
Este modelo puede procesar cualquier tamaño o longitud de audio, pero el procesamiento de archivos de audio más grandes o más largos podría estar limitado por el espacio disponible en el disco de su máquina. Para procesar estos archivos, recomendamos transmitir el audio del archivo, procesando ventanas de audio a la vez.
Frecuencia de muestreo
El audio de entrada puede tener cualquier frecuencia de muestreo; sin embargo, todo el audio se volverá a muestrear a 22050 Hz antes de procesarlo.
¡Gracias a DamRsn por desarrollar esta versión VST funcional de tono básico! - https://github.com/DamRsn/NeuralNote
¡Las contribuciones al basic-pitch
son bienvenidas! Consulte CONTRIBUTING.md para obtener más detalles.
basic-pitch
es Copyright 2022 Spotify AB.
Este software tiene la licencia Apache, versión 2.0 (la "Licencia Apache"). Puede elegir cualquiera de las licencias para regir su uso de este software sólo con la condición de que acepte todos los términos de cualquiera de las Licencias Apache.
Puede obtener una copia de la licencia Apache en:
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia Apache o la Licencia GPL se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia Apache para conocer el idioma específico que rige los permisos y las limitaciones de la Licencia Apache.