Basic Pitch adalah pustaka Python untuk Transkripsi Musik Otomatis (AMT), menggunakan jaringan saraf ringan yang dikembangkan oleh Audio Intelligence Lab Spotify. Ini kecil, mudah digunakan, pip install
-able dan npm install
-able melalui repo saudaranya.
Pitch Dasar mungkin sederhana, namun jauh dari kata "dasar"! basic-pitch
efisien dan mudah digunakan, dan dukungan multipitchnya, kemampuannya untuk menggeneralisasi seluruh instrumen, dan akurasi nadanya bersaing dengan sistem AMT yang jauh lebih besar dan lebih haus sumber daya.
Berikan file audio yang kompatibel dan nada dasar akan menghasilkan file MIDI, lengkap dengan tikungan nada. Nada dasar bersifat agnostik pada instrumen dan mendukung instrumen polifonik, sehingga Anda dapat dengan bebas menikmati transkripsi semua musik favorit Anda, apa pun instrumen yang digunakan. Nada dasar bekerja paling baik pada satu instrumen dalam satu waktu.
Perpustakaan ini dirilis bersamaan dengan publikasi Spotify di ICASSP 2022. Anda dapat membaca lebih lanjut tentang penelitian ini di makalah, A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation.
Jika Anda menggunakan perpustakaan ini dalam penelitian akademis, pertimbangkan untuk mengutipnya:
@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 ,
}
Perhatikan bahwa kami telah meningkatkan Pitch Dasar melebihi apa yang disajikan dalam makalah ini. Oleh karena itu, jika Anda menggunakan keluaran Basic Pitch dalam penelitian akademis, kami menyarankan Anda mengutip versi kode yang digunakan.
Jika, karena alasan apa pun, Anda belum sepenuhnya terinspirasi, atau Anda terlalu menyukai suasana umum dan hal-hal lain, lihat situs demo cepat kami, basicpitch.io, untuk bereksperimen dengan model kami pada audio musik apa pun yang Anda berikan !
basic-pitch
tersedia melalui PyPI. Untuk menginstal rilis saat ini:
pip install basic-pitch
Untuk memperbarui Basic Pitch ke versi terbaru, tambahkan --upgrade
ke perintah di atas.
Basic Pitch hadir dengan model TensorFlow asli dan model TensorFlow yang dikonversi ke CoreML, TensorFlowLite, dan ONNX. Secara default, Basic Pitch tidak akan menginstal TensorFlow sebagai dependensi kecuali Anda menggunakan Python>=3.11 . Sebaliknya, secara default, CoreML akan diinstal di MacOS, TensorFlowLite akan diinstal di Linux, dan ONNX akan diinstal di Windows. Jika Anda ingin menginstal TensorFlow bersama dengan runtime inferensi model default, Anda dapat menginstal TensorFlow melalui pip install basic-pitch[tf]
.
Secara default, Basic Pitch akan mencoba memuat model dengan urutan berikut:
Selain itu, variabel modul ICASSP_2022_MODEL_PATH akan default ke versi pertama yang tersedia dalam daftar.
Kami akan menjelaskan cara mengganti daftar prioritas ini di bawah. Karena semua serialisasi model lainnya dikonversi dari TensorFlow, sebaiknya gunakan TensorFlow jika memungkinkan. NB Basic Pitch tidak menginstal TensorFlow secara default untuk menghemat waktu pengguna saat menginstal dan menjalankan Basic Pitch.
Perpustakaan ini menawarkan antarmuka alat baris perintah. Perintah prediksi dasar akan menghasilkan dan menyimpan transkripsi audio file MIDI di
ke
:
basic-pitch < output-directory > < input-audio-path >
Misalnya:
basic-pitch /output/directory/path /input/audio/path
Untuk memproses lebih dari satu file audio sekaligus:
basic-pitch < output-directory > < input-audio-path- 1> < input-audio-path- 2> < input-audio-path- 3>
Secara opsional, Anda dapat menambahkan salah satu tanda berikut ke perintah prediksi Anda untuk menyimpan format tambahan keluaran prediksi ke
:
--sonify-midi
untuk menyimpan tambahan rendering audio .wav
dari file MIDI.--save-model-outputs
untuk menyimpan tambahan output model mentah sebagai file NPZ.--save-note-events
untuk menyimpan tambahan peristiwa catatan yang diprediksi sebagai file CSV. Jika Anda ingin menggunakan tipe model non-default (misalnya, gunakan CoreML alih-alih TF), gunakan argumen --model-serialization
. CLI akan mengubah model yang dimuat ke tipe yang Anda inginkan.
Untuk menemukan lebih banyak kontrol parameter, jalankan:
basic-pitch --help
meramalkan()
Impor basic-pitch
ke dalam kode Python Anda dan jalankan fungsi predict
secara langsung, berikan
dan kembalikan hasil prediksi model:
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) mengatur frekuensi nada maksimum dan minimum yang diperbolehkan, dalam Hz, yang dikembalikan oleh model. Acara pitch dengan frekuensi di luar rentang ini akan dikecualikan dari hasil prediksi.model_output
adalah keluaran inferensi model mentahmidi_data
adalah data MIDI yang ditranskrip yang berasal dari model_output
note_events
adalah daftar peristiwa catatan yang berasal dari model_output
Catatan: Seperti disebutkan sebelumnya, ICASSP_2022_MODEL_PATH akan default ke runtime yang pertama kali didukung dalam daftar TensorFlow, CoreML, TensorFlowLite, ONNX.
prediksi() dalam satu lingkaran
Untuk menjalankan prediksi dalam satu loop, Anda perlu memuat model sendiri dan memberikan predict()
objek model yang dimuat itu sendiri untuk digunakan pada panggilan prediksi berulang, guna menghindari pemuatan model yang berlebihan dan lamban.
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 ,
)
...
prediksi_dan_simpan()
Jika Anda ingin basic-pitch
mengatur pembuatan dan penyimpanan berbagai jenis file keluaran yang kami dukung, Anda dapat predict_and_save
alih-alih menggunakan predict
secara langsung:
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 > ,
)
Di mana:
&
basic-pitch
untuk membaca dari/menulis.
Codec Audio yang Didukung
basic-pitch
menerima semua file suara yang kompatibel dengan versi librosa
-nya, termasuk:
.mp3
.ogg
.wav
.flac
.m4a
Hanya Audio Saluran Mono
Meskipun Anda dapat menggunakan audio stereo sebagai masukan ke model kami, pada waktu prediksi, saluran masukan akan di-down-mix menjadi mono, lalu dianalisis dan ditranskripsi.
Ukuran File/Panjang Audio
Model ini dapat memproses audio dengan ukuran atau panjang apa pun, namun pemrosesan file audio yang lebih besar/panjang dapat dibatasi oleh ruang disk yang tersedia di mesin Anda. Untuk memproses file-file ini, kami menyarankan streaming audio file, memproses jendela audio sekaligus.
Tingkat Sampel
Audio input dapat berupa laju sampel apa pun, namun semua audio akan diambil sampelnya ulang ke 22050 Hz sebelum diproses.
Terima kasih kepada DamRsn yang telah mengembangkan nada dasar versi VST yang berfungsi ini! - https://github.com/DamRsn/NeuralNote
Kontribusi pada basic-pitch
disambut baik! Lihat KONTRIBUSI.md untuk detailnya.
basic-pitch
adalah Hak Cipta 2022 Spotify AB.
Perangkat lunak ini dilisensikan di bawah Lisensi Apache, Versi 2.0 ("Lisensi Apache"). Anda dapat memilih salah satu lisensi untuk mengatur penggunaan Anda atas perangkat lunak ini hanya dengan syarat bahwa Anda menerima semua ketentuan dari Lisensi Apache tersebut.
Anda dapat memperoleh salinan Lisensi Apache di:
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh hukum yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan di bawah Lisensi Apache atau Lisensi GPL didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi Apache untuk bahasa tertentu yang mengatur izin dan batasan di bawah Lisensi Apache.