项目介绍:Polymath
Polymath 是一个利用机器学习技术来将任何音乐库(例如来自硬盘或 YouTube)转换为音乐制作样本库的工具。这个工具可以自动将歌曲分离为不同的音频轨道(如鼓声、贝斯等),将它们的速度和拍子量化为相同的节奏(例如 120 BPM),分析音乐结构(如主歌、合唱等)、音高(如 C4、E3 等)及其他信息(音色、响度等),并将音频转换为 MIDI 数据。最终结果是一个可搜索的样本库,这大大简化了音乐制作人、DJ 和机器学习音频开发者的工作流程。
用例场景
Polymath 让用户轻松地将不同歌曲中的元素组合成独特的新作品:用户可以从 Funkadelic 的乐曲中提取节拍、Tito Puente 的作品中提取贝斯线,再从 Fela Kuti 的歌曲中找到合适的号角声,然后将这些元素无缝整合到他们的数字音频工作站(DAW)中。利用 Polymath 的搜索功能,用户可以快速创建一场经过精心打磨的一个小时的 DJ 混音集。对于机器学习开发者来说,Polymath 简化了创建大型音乐数据集的过程,这些数据集可以用于训练生成性模型等。
工作原理
Polymath 利用一系列强大的神经网络技术来实现其功能:
- 音乐源分离:使用 Demucs 神经网络
- 音乐结构分段/标记:使用 sf_segmenter 神经网络
- 音乐音高跟踪和音调检测:使用 Crepe 神经网络
- 音乐到 MIDI 转录:使用 Basic Pitch 神经网络
- 音乐量化和对齐:使用 pyrubberband
- 音乐信息检索与处理:使用 librosa
社区与支持
Polymath 拥有一个活跃的社区,可以通过 Discord 加入。
系统要求
用户需要在系统上安装 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 支持。在设置 tensorflow 使用 cuda 后,tensorflow 和 torch 将自动检测并使用 GPU。这仅适用于原生环境,对于 docker 化部署,GPU 支持还在开发中。
Docker 设置
如果系统中安装了 Docker,可以使用提供的 Dockerfile
快速构建一个 Polymath docker 镜像。输入和输出文件可以通过在主机系统和 Polymath docker 容器之间创建以下四个文件夹进行交换:
./input
./library
./processed
./separated
将任何要处理的文件放入 input
文件夹,然后使用以下 docker 运行命令:
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
2. 量化歌曲
将特定歌曲量化到 120 BPM:
python polymath.py -q n6DAqMFe97E -t 120
3. 搜索相似歌曲
基于库中某首歌曲搜索 10 首相似歌曲:
python polymath.py -s n6DAqMFe97E -sa 10
4. 音频转换为 MIDI
将所有处理过的音频文件和音频轨转换为 MIDI:
python polymath.py -a n6DAqMFe97E -q all -t 120 -m
音频特性
Polymath 提取的音轨和特性可以在 python 文件中调整设置。音轨包括贝斯、鼓、吉他、其他乐器、钢琴和人声。提取的特性包括节奏、时长、音色、音高、强度、音量、响度、节拍、分段边界、分段标签、频率和音调等。
许可证
Polymath 在 MIT 许可证下发布。