Basic Pitch 是一个用于自动音乐转录 (AMT) 的 Python 库,使用 Spotify 音频智能实验室开发的轻量级神经网络。它体积小,易于使用,可以通过其兄弟存储库进行pip install
和npm install
。
基本音调可能很简单,但它远非“基本”! basic-pitch
高效且易于使用,其多音高支持、跨乐器泛化的能力以及音符精度可与更大、更需要资源的 AMT 系统相媲美。
提供兼容的音频文件,基本音高将生成一个带有弯音的 MIDI 文件。基本音高与乐器无关,并且支持和弦乐器,因此无论使用什么乐器,您都可以自由地享受所有您喜爱的音乐的转录。基本音高一次在一种乐器上效果最好。
该库与 Spotify 在 ICASSP 2022 上的出版物一起发布。您可以在论文《用于和弦音符转录和多音高估计的轻量级乐器无关模型》中阅读有关这项研究的更多信息。
如果您在学术研究中使用此库,请考虑引用它:
@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 ,
}
请注意,我们对基本音调的改进超出了本文中介绍的内容。因此,如果您在学术研究中使用 Basic Pitch 的输出,我们建议您引用所使用的代码版本。
如果出于某种原因,您还没有完全受到启发,或者您对一般氛围和东西完全不感兴趣,请查看我们活泼的演示网站 basicpitch.io,在您提供的任何音乐音频上试验我们的模型!
basic-pitch
可通过 PyPI 获得。要安装当前版本:
pip install basic-pitch
要将 Basic Pitch 更新到最新版本,请在上述命令中添加--upgrade
。
Basic Pitch 附带原始 TensorFlow 模型以及转换为 CoreML、TensorFlowLite 和 ONNX 的 TensorFlow 模型。默认情况下,Basic Pitch不会安装 TensorFlow 作为依赖项,除非您使用的是 Python>=3.11 。相反,默认情况下,CoreML 将安装在 MacOS 上,TensorFlowLite 将安装在 Linux 上,ONNX 将安装在 Windows 上。如果您想将 TensorFlow 与默认模型推理运行时一起安装,可以通过pip install basic-pitch[tf]
安装 TensorFlow。
默认情况下,Basic Pitch 将尝试按以下顺序加载模型:
此外,模块变量 ICASSP_2022_MODEL_PATH 将默认为列表中的第一个可用版本。
我们将在下面解释如何覆盖此优先级列表。由于所有其他模型序列化都是从 TensorFlow 转换而来,因此我们建议尽可能使用 TensorFlow。 NB Basic Pitch 默认情况下不安装 TensorFlow,以节省用户安装和运行 Basic Pitch 的时间。
该库提供了命令行工具界面。基本预测命令将在
处生成音频的 MIDI 文件转录并保存到
:
basic-pitch < output-directory > < input-audio-path >
例如:
basic-pitch /output/directory/path /input/audio/path
要一次处理多个音频文件:
basic-pitch < output-directory > < input-audio-path- 1> < input-audio-path- 2> < input-audio-path- 3>
或者,您可以将以下任何标志附加到预测命令,以将预测输出的其他格式保存到
:
--sonify-midi
额外保存 MIDI 文件的.wav
音频渲染。--save-model-outputs
将原始模型输出另外保存为 NPZ 文件。--save-note-events
将预测的音符事件另外保存为 CSV 文件。如果您想使用非默认模型类型(例如,使用 CoreML 而不是 TF),请使用--model-serialization
参数。 CLI 会将加载的模型更改为您喜欢的类型。
要发现更多参数控制,请运行:
basic-pitch --help
预测()
将basic-pitch
导入到您自己的 Python 代码中并直接运行predict
函数,提供
并返回模型的预测结果:
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) 设置模型返回的最大和最小允许音符频率(以 Hz 为单位)。频率超出此范围的俯仰事件将从预测结果中排除。model_output
是原始模型推理输出midi_data
是从model_output
导出的转录的 MIDI 数据note_events
是从model_output
派生的音符事件列表注意:如前所述,ICASSP_2022_MODEL_PATH 将默认为 TensorFlow、CoreML、TensorFlowLite、ONNX 列表中第一个支持的运行时。
在循环中预测()
要在循环内运行预测,您需要自己加载模型,并为predict()
提供加载的模型对象本身,以用于重复的预测调用,以避免冗余和缓慢的模型加载。
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 ,
)
...
预测并保存()
如果您希望basic-pitch
协调我们各种支持的输出文件类型的生成和保存,您可以使用predict_and_save
而不是直接使用predict
:
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 > ,
)
在哪里:
&
basic-pitch
读取/写入的目录路径。
支持的音频编解码器
basic-pitch
接受与其librosa
版本兼容的所有声音文件,包括:
.mp3
.ogg
.wav
.flac
.m4a
仅单声道音频
虽然您可以使用立体声音频作为我们模型的输入,但在预测时,输入的通道将被下混合为单声道,然后进行分析和转录。
文件大小/音频长度
此模型可以处理任何大小或长度的音频,但处理更大/更长的音频文件可能会受到计算机可用磁盘空间的限制。要处理这些文件,我们建议流式传输文件的音频,一次处理音频窗口。
采样率
输入音频可以是任何采样率,但是,所有音频在处理之前都将重新采样到 22050 Hz。
感谢 DamRsn 开发了这个基本音高的 VST 版本! - https://github.com/DamRsn/NeuralNote
欢迎对basic-pitch
做出贡献!有关详细信息,请参阅 CONTRIBUTING.md。
basic-pitch
版权所有 2022 Spotify AB。
本软件根据 Apache 许可证 2.0 版(“Apache 许可证”)获得许可。仅当您接受任一 Apache 许可证的所有条款时,您才可以选择任一许可证来管理您对该软件的使用。
您可以在以下位置获取 Apache 许可证的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据 Apache 许可证或 GPL 许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅 Apache 许可证,了解 Apache 许可证下管理权限和限制的特定语言。