Basic Pitch é uma biblioteca Python para transcrição automática de música (AMT), usando rede neural leve desenvolvida pelo Audio Intelligence Lab do Spotify. É pequeno, fácil de usar, pip install
-able e npm install
-able por meio de seu repositório irmão.
O Basic Pitch pode ser simples, mas está longe de ser "básico"! basic-pitch
é eficiente e fácil de usar, e seu suporte multipitch, sua capacidade de generalizar entre instrumentos e sua precisão de notas competem com sistemas AMT muito maiores e que consomem mais recursos.
Forneça um arquivo de áudio compatível e o pitch básico gerará um arquivo MIDI, completo com pitch bends. O tom básico é independente de instrumentos e suporta instrumentos polifônicos, para que você possa desfrutar livremente da transcrição de todas as suas músicas favoritas, independentemente do instrumento usado. O tom básico funciona melhor em um instrumento de cada vez.
Esta biblioteca foi lançada em conjunto com a publicação do Spotify no ICASSP 2022. Você pode ler mais sobre esta pesquisa no artigo A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation.
Se você usa esta biblioteca em pesquisas acadêmicas, considere citá-la:
@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 ,
}
Observe que melhoramos o Basic Pitch além do que foi apresentado neste artigo. Portanto, caso você utilize o resultado do Basic Pitch em pesquisas acadêmicas, recomendamos que cite a versão do código que foi utilizada.
Se, por algum motivo, você ainda não está completamente inspirado, ou está totalmente superado com a vibração geral e outras coisas, confira nosso rápido site de demonstração, basicpitch.io, para experimentar nosso modelo em qualquer áudio musical que você fornecer. !
basic-pitch
está disponível via PyPI. Para instalar a versão atual:
pip install basic-pitch
Para atualizar o Basic Pitch para a versão mais recente, adicione --upgrade
ao comando acima.
O Basic Pitch vem com o modelo TensorFlow original e o modelo TensorFlow convertido para CoreML, TensorFlowLite e ONNX. Por padrão, o Basic Pitch não instalará o TensorFlow como uma dependência , a menos que você esteja usando Python>=3.11 . Em vez disso, por padrão, o CoreML será instalado no MacOS, o TensorFlowLite será instalado no Linux e o ONNX será instalado no Windows. Se quiser instalar o TensorFlow junto com o tempo de execução de inferência de modelo padrão, você pode instalar o TensorFlow via pip install basic-pitch[tf]
.
Por padrão, o Basic Pitch tentará carregar um modelo na seguinte ordem:
Além disso, a variável do módulo ICASSP_2022_MODEL_PATH será padronizada para a primeira versão disponível na lista.
Explicaremos como substituir esta lista de prioridades abaixo. Como todas as outras serializações de modelo foram convertidas do TensorFlow, recomendamos usar o TensorFlow quando possível. NB Basic Pitch não instala o TensorFlow por padrão para economizar tempo do usuário ao instalar e executar o Basic Pitch.
Esta biblioteca oferece uma interface de ferramenta de linha de comando. Um comando básico de previsão irá gerar e salvar uma transcrição de arquivo MIDI de áudio no
para o
:
basic-pitch < output-directory > < input-audio-path >
Por exemplo:
basic-pitch /output/directory/path /input/audio/path
Para processar mais de um arquivo de áudio por vez:
basic-pitch < output-directory > < input-audio-path- 1> < input-audio-path- 2> < input-audio-path- 3>
Opcionalmente, você pode anexar qualquer um dos seguintes sinalizadores ao seu comando de previsão para salvar formatos adicionais da saída de previsão no
:
--sonify-midi
para salvar adicionalmente uma renderização de áudio .wav
do arquivo MIDI.--save-model-outputs
para salvar adicionalmente as saídas do modelo bruto como um arquivo NPZ.--save-note-events
para salvar adicionalmente os eventos de notas previstos como um arquivo CSV. Se você quiser usar um tipo de modelo não padrão (por exemplo, usar CoreML em vez de TF), use o argumento --model-serialization
. A CLI mudará o modelo carregado para o tipo de sua preferência.
Para descobrir mais controle de parâmetros, execute:
basic-pitch --help
prever()
Importe basic-pitch
para seu próprio código Python e execute as funções predict
diretamente, fornecendo um
e retornando os resultados de previsão do 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 > )
&
( float s) definem a frequência de nota máxima e mínima permitida, em Hz, retornada pelo modelo. Eventos de pitch com frequências fora desta faixa serão excluídos dos resultados da previsão.model_output
é a saída de inferência do modelo brutomidi_data
são os dados MIDI transcritos derivados do model_output
note_events
é uma lista de eventos de notas derivados do model_output
Observação: conforme mencionado anteriormente, ICASSP_2022_MODEL_PATH será padronizado para o primeiro tempo de execução suportado na lista TensorFlow, CoreML, TensorFlowLite, ONNX.
prever() em um loop
Para executar a previsão dentro de um loop, você mesmo desejará carregar o modelo e fornecer predict()
com o próprio objeto do modelo carregado para ser usado em chamadas de previsão repetidas, a fim de evitar o carregamento redundante e lento do 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 ,
)
...
prever_e_salvar()
Se você quiser basic-pitch
a geração e o salvamento de nossos vários tipos de arquivos de saída suportados, você pode usar predict_and_save
em vez de usar predict
diretamente:
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 > ,
)
onde:
e
basic-pitch
para leitura/gravação.
Codecs de áudio suportados
basic-pitch
aceita todos os arquivos de som compatíveis com sua versão do librosa
, incluindo:
.mp3
.ogg
.wav
.flac
.m4a
Somente áudio de canal mono
Embora você possa usar áudio estéreo como entrada para nosso modelo, no momento da previsão, os canais de entrada serão mixados para mono e depois analisados e transcritos.
Tamanho do arquivo/comprimento do áudio
Este modelo pode processar qualquer tamanho ou duração de áudio, mas o processamento de arquivos de áudio maiores/mais longos pode ser limitado pelo espaço disponível em disco da sua máquina. Para processar esses arquivos, recomendamos transmitir o áudio do arquivo, processando janelas de áudio por vez.
Taxa de amostragem
O áudio de entrada pode ter qualquer taxa de amostragem, no entanto, todo o áudio será reamostrado para 22.050 Hz antes do processamento.
Obrigado ao DamRsn por desenvolver esta versão VST funcional do tom básico! - https://github.com/DamRsn/NeuralNote
Contribuições para o basic-pitch
são bem-vindas! Consulte CONTRIBUTING.md para obter detalhes.
basic-pitch
é Copyright 2022 Spotify AB.
Este software é licenciado sob a Licença Apache, Versão 2.0 (a "Licença Apache"). Você pode escolher qualquer uma das licenças para reger o uso deste software somente sob a condição de aceitar todos os termos da Licença Apache.
Você pode obter uma cópia da Licença Apache em:
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença Apache ou a Licença GPL é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença Apache para o idioma específico que rege as permissões e limitações sob a Licença Apache.