Basic Pitch,一个轻量但强大的音频到MIDI转换器,具有音高弯曲检测。
项目描述
Basic Pitch 是一个用于自动音乐转录(AMT)的 Python 库,使用由 Spotify 的音频智能实验室 开发的轻量级神经网络。它小巧、易于使用,可以通过其兄弟仓库通过 pip install
和 npm install
安装。
基本音高的概念可能很简单,但它远非“基本”!basic-pitch
既高效又易于使用,其多音高支持、跨乐器泛化能力和音符准确性可与许多更大、资源消耗更大的AMT系统相媲美。
提供兼容的音频文件,basic-pitch将生成包含音高弯曲的MIDI文件。Basic pitch对乐器无特定要求,支持多声部乐器,因此您可以自由享受所有喜爱的音乐的转录,无论使用什么乐器。Basic pitch一次最好只处理一种乐器。
研究论文
本库与Spotify在ICASSP 2022上的发表一同发布。您可以在论文《A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation》中了解更多关于这项研究的内容。
如果您在学术研究中使用此库,请考虑引用它
@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的改进已经超出了本论文中介绍的内容。因此,如果您在学术研究中使用Basic Pitch的输出,我们建议您引用所使用的代码版本。
演示
如果您还没有完全受到启发,或者您已经对整体氛围和一切感到厌倦,请查看我们的快速演示网站basicpitch.io,以在我们的模型上尝试您提供的任何音乐音频!
安装
basic-pitch
可通过PyPI获取。要安装当前版本,请执行以下命令
pip install basic-pitch
要更新Basic Pitch到最新版本,请在上面的命令中添加--upgrade
兼容环境
- MacOS、Windows和Ubuntu操作系统
- Python版本3.7、3.8、3.9、3.10、3.11
- 对于Mac M1硬件,我们目前仅支持Python版本3.10。否则,我们建议使用虚拟机。
模型运行时
Basic Pitch附带原始TensorFlow模型以及转换为CoreML、TensorFlowLite和ONNX的TensorFlow模型。默认情况下,Basic Pitch不会安装TensorFlow作为依赖项,除非您使用Python≥3.11。相反,默认情况下,MacOS上将安装CoreML,Linux上将安装TensorFlowLite,Windows上将安装ONNX。如果您想安装默认模型推理运行时,可以执行pip install basic-pitch[tf]
来安装TensorFlow。
使用方法
模型预测
模型运行时
默认情况下,Basic Pitch将按以下顺序尝试加载模型
- TensorFlow
- CoreML
- TensorFlowLite
- ONNX
此外,模块变量ICASSP_2022_MODEL_PATH将默认为列表中的第一个可用版本。
下面我们将解释如何覆盖此优先级列表。由于所有其他模型序列化都是从TensorFlow转换而来,因此建议尽可能使用TensorFlow。注意,Basic Pitch默认不安装TensorFlow,以节省用户安装和运行Basic Pitch时的时间。
命令行工具
此库提供命令行工具界面。基本预测命令将生成并保存位于<input-audio-path>
的音频在<output-directory>
的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>
您可以将以下任何标志附加到预测命令中,以将预测输出的额外格式保存到<output-directory>
--sonify-midi
将另外保存MIDI文件的.wav
音频渲染。--save-model-outputs
将另外保存原始模型输出为NPZ文件。--save-note-events
将另外保存预测音符事件为CSV文件。
如果您想使用非默认模型类型(例如,使用CoreML而不是TF),请使用--model-serialization
参数。CLI将更改加载的模型为您所喜欢的类型。
要发现更多参数控制,请运行
basic-pitch --help
程序化
predict()
将basic-pitch
导入您的Python代码中,并直接运行predict
函数,提供<input-audio-path>
,返回模型的预测结果。
from basic_pitch.inference import predict
from basic_pitch import ICASSP_2022_MODEL_PATH
model_output, midi_data, note_events = predict(<input-audio-path>)
<minimum-frequency>
和<maximum-frequency>
(浮点数)设置模型返回的最大和最小允许音符频率(单位:Hz)。频率在此范围之外的音符事件将不会被包括在预测结果中。model_output
是原始模型推理输出。midi_data
是从model_output
中提取的转录MIDI数据。note_events
是从model_output
中提取的音符事件列表。
注意:如前所述,ICASSP_2022_MODEL_PATH将默认为TensorFlow、CoreML、TensorFlowLite、ONNX列表中最早支持的运行时。
循环中的predict()
要循环运行预测,您需要自己加载模型,并将加载的模型对象本身提供给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,
)
...
predict_and_save()
如果您希望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>,
)
其中
<input-audio-path-list>
和<output-directory>
- 是
basic-pitch
读取/写入的目录路径。
- 是
<save-midi>
- 布尔值用于控制是否在
<output-directory>
生成并保存MIDI文件。
- 布尔值用于控制是否在
<sonify-midi>
- 布尔值用于控制是否将MIDI文件的WAV音频渲染保存到
<output-directory>
。
- 布尔值用于控制是否将MIDI文件的WAV音频渲染保存到
<save-model-outputs>
- 布尔值用于控制是否将原始模型输出保存为NPZ文件到
<output-directory>
。
- 布尔值用于控制是否将原始模型输出保存为NPZ文件到
<save-notes>
- 布尔值用于控制是否将预测的音符事件保存为CSV文件到
<output-directory>
。
- 布尔值用于控制是否将预测的音符事件保存为CSV文件到
模型输入
支持的音频编解码器
basic-pitch
接受与其版本的librosa
兼容的所有声音文件,包括
.mp3
.ogg
.wav
.flac
.m4a
仅单声道音频
尽管您可以以立体声音频作为模型的输入,但在预测时,输入的通道将被下混为单声道,然后进行分析和转录。
文件大小/音频长度
此模型可以处理任何大小或长度的音频,但处理较大的/较长的音频文件可能会受到您的机器可用磁盘空间的限制。为了处理这些文件,我们建议流式传输文件的音频,一次处理音频的窗口。
采样率
输入音频可以是任何采样率,但是所有音频在处理之前都将重新采样到22050 Hz。
VST
感谢DamRsn开发了basic-pitch的此VST版本! - https://github.com/DamRsn/NeuralNote
贡献
欢迎为basic-pitch
做出贡献!有关详细信息,请参阅CONTRIBUTING.md。
版权和许可
basic-pitch
版权所有2022 Spotify AB。
本软件根据Apache License,版本2.0(“Apache License”)授权。您可以选择其中任何一个许可证来规范您对本软件的使用,但前提是您接受该许可证的所有条款。
您可以在以下位置获得Apache License的副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据Apache License或GPL License分发的软件将按“原样”基础分发,不提供任何形式(无论是明示的还是暗示的)的保证或条件。有关Apache License的具体语言,请参阅Apache License。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
基本_pitch-0.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6f48ac4b909c990fd59460622137a03b857c829bb1f3e65c71708da576ab68e5 |
|
MD5 | e34ebc6a36dd332489aa04a637b0f47d |
|
BLAKE2b-256 | d368384dcaa2493497581ef7a0f18c76ce35afa26ea8a8d703f4761bdae632e6 |
基本_pitch-0.4.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 738adb503aae7fdfc7d1e1511aa0ce35052315f260a19531ef4c356708425db0 |
|
MD5 | 8811fca9539013cd153a6fb1f05af17d |
|
BLAKE2b-256 | 990e3a36d22562daeb0ae3c78ac78da3f8dba96543c5576ed57d4acb8ddbab5b |