Polymath
Polymath 使用机器学习将任何音乐库(如硬盘或 YouTube 上的)转换为音乐制作样本库。该工具自动将歌曲分离成音轨(节奏、低音等),将它们量化到相同的速度和节拍网格(如 120bpm),分析音乐结构(如 verse、chorus 等),调性(如 C4、E3 等)和其他信息(音色、响度等),并将音频转换为 MIDI。结果是一个可搜索的样本库,可以简化音乐制作人、DJ 和 ML 音频开发人员的工作流程。
访问 nendo.ai 获取具有额外功能的 Polymath 网页版
用途
Polymath 使从不同歌曲中组合元素创作独特新作品变得轻而易举:只需从 Funkadelic 曲目中抓取一段节奏,从 Tito Puente 作品中提取一段低音线,再从 Fela Kuti 歌曲中选取合适的号角声,然后迅速将它们无缝整合到你的 DAW 中。利用 Polymath 的搜索功能发现相关曲目,轻松创建一个精心制作的一小时长的混音 DJ 套装。对于 ML 开发人员来说,Polymath 简化了创建大型音乐数据集的过程,用于训练生成模型等。
工作原理
- 音乐源分离使用 Demucs 神经网络完成
- 音乐结构分段/标记使用 sf_segmenter 神经网络完成
- 音乐音高跟踪和调性检测使用 Crepe 神经网络完成
- 音乐转 MIDI 转录使用 Basic Pitch 神经网络完成
- 音乐量化和对齐使用 pyrubberband 完成
- 音乐信息检索和处理使用 librosa 完成
社区
加入 Discord 上的 Polymath 社区
要求
你需要在系统上安装以下软件:
ffmpeg
安装
你需要 Python 版本 >=3.7
且 <=3.10
。在终端中运行:
git clone https://github.com/samim23/polymath
cd polymath
pip install -r requirements.txt
如果在尝试运行 Polymath 时遇到 basic-pitch 问题,请在安装后运行此命令:
pip install git+https://github.com/spotify/basic-pitch.git
GPU 支持
Polymath 使用的大多数库都通过 CUDA 提供原生 GPU 支持。请按照 https://www.tensorflow.org/install/pip 上的步骤设置 TensorFlow 以使用 CUDA。如果你已按照这些步骤操作,TensorFlow 和 PyTorch 将自动识别并使用 GPU。这仅适用于原生设置,对于 Docker 化部署(见下一节),GPU 支持即将推出。
Docker 设置
如果你的系统上安装了 Docker,你可以使用提供的 Dockerfile
快速构建 Polymath Docker 镜像(如果你的用户不属于 docker
组,记得在以下命令前加上 sudo
):
docker build -t polymath ./
为了在主机系统和 Polymath Docker 容器之间交换输入和输出文件,你需要创建以下四个目录:
./input
./library
./processed
./separated
现在将你想用 Polymath 处理的任何文件放入 input
文件夹。
然后,你可以通过使用 docker run
命令运行 Polymath,并传递原本传递给 Python 命令的任何参数,例如,如果你使用的是 Linux 操作系统,请调用:
docker run \
-v "$(pwd)"/processed:/polymath/processed \
-v "$(pwd)"/separated:/polymath/separated \
-v "$(pwd)"/library:/polymath/library \
-v "$(pwd)"/input:/polymath/input \
polymath python /polymath/polymath.py -a ./input/song1.wav
运行 Polymath
1. 将歌曲添加到 Polymath 库
将 YouTube 视频添加到库(自动下载)
python polymath.py -a n6DAqMFe97E
添加音频文件(wav 或 mp3)
python polymath.py -a /path/to/audiolib/song.wav
一次添加多个文件
python polymath.py -a n6DAqMFe97E,eaPzCHEQExs,RijB8wnJCN0
python polymath.py -a /path/to/audiolib/song1.wav,/path/to/audiolib/song2.wav
python polymath.py -a /path/to/audiolib/
歌曲会自动进行一次分析,这需要一些时间。一旦进入数据库,就可以快速访问。数据库存储在 "/library/database.p" 文件夹中。要重置所有内容,只需删除它。
2. 量化 Polymath 库中的歌曲
将库中特定歌曲量化到 120 BPM 速度(-q = 数据库音频文件 ID,-t = BPM 速度)
python polymath.py -q n6DAqMFe97E -t 120
将库中所有歌曲量化到 120 BPM 速度
python polymath.py -q all -t 120
将库中特定歌曲量化到歌曲本身的速度(-k)
python polymath.py -q n6DAqMFe97E -k
歌曲会自动量化到相同的速度和节拍网格,并保存到 "/processed" 文件夹。
3. 在 Polymath 库中搜索相似歌曲
基于库中特定歌曲搜索 10 首相似歌曲(-s = 数据库音频文件 ID,-sa = 结果数量)
python polymath.py -s n6DAqMFe97E -sa 10
基于库中特定歌曲搜索相似歌曲,并将所有歌曲量化到 120 BPM 速度
python polymath.py -s n6DAqMFe97E -sa 10 -q all -t 120
将 BPM 作为搜索标准(-st)
python polymath.py -s n6DAqMFe97E -sa 10 -q all -t 120 -st -k
相似歌曲会自动找到,并可选择量化和保存到 "/processed" 文件夹。这使得创建例如一小时长的完美匹配的歌曲混音变得容易。
4. 将音频转换为 MIDI
将所有处理过的音频文件和音轨转换为 MIDI(-m)
python polymath.py -a n6DAqMFe97E -q all -t 120 -m
生成的 MIDI 文件目前总是 120BPM,需要在你的 DAW 中进行时间调整。这个问题将很快得到解决。当前的 Audio2Midi 模型对鼓/打击乐的效果不一致。这将在未来通过增加额外的 audio2midi 模型选项得到解决。
音频特征
提取的音轨
Demucs 神经网络有可以在 Python 文件中调整的设置
- bass
- drum
- guitare
- other
- piano
- vocals
提取的特征
音频特征提取器有可以在 Python 文件中调整的设置
- tempo
- duration
- timbre
- timbre_frames
- pitch
- pitch_frames
- intensity
- intensity_frames
- volume
- avg_volume
- loudness
- beats
- segments_boundaries
- segments_labels
- frequency_frames
- frequency
- key
许可证
Polymath 根据 LICENSE 文件中的 MIT 许可证发布。