跳转到主要内容

Basic Pitch,一个轻量但强大的音频到MIDI转换器,具有音高弯曲检测。

项目描述

Basic Pitch Logo

License PyPI - Python Version Supported Platforms

Basic Pitch 是一个用于自动音乐转录(AMT)的 Python 库,使用由 Spotify 的音频智能实验室 开发的轻量级神经网络。它小巧、易于使用,可以通过其兄弟仓库通过 pip installnpm 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模型以及转换为CoreMLTensorFlowLiteONNX的TensorFlow模型。默认情况下,Basic Pitch不会安装TensorFlow作为依赖项,除非您使用Python≥3.11。相反,默认情况下,MacOS上将安装CoreML,Linux上将安装TensorFlowLite,Windows上将安装ONNX。如果您想安装默认模型推理运行时,可以执行pip install basic-pitch[tf]来安装TensorFlow。

使用方法

模型预测

模型运行时

默认情况下,Basic Pitch将按以下顺序尝试加载模型

  1. TensorFlow
  2. CoreML
  3. TensorFlowLite
  4. 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>
  • <save-model-outputs>
    • 布尔值用于控制是否将原始模型输出保存为NPZ文件到<output-directory>
  • <save-notes>
    • 布尔值用于控制是否将预测的音符事件保存为CSV文件到<output-directory>

模型输入

支持的音频编解码器

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。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

basic_pitch-0.4.0.tar.gz (3.7 MB 查看哈希值)

上传时间 源代码

构建分发

basic_pitch-0.4.0-py2.py3-none-any.whl (758.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持