Python 将MP3音频文件转换成MIDI乐谱文件

spleeter

1.系统环境

我的Python环境

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

安装spleeter

pip install spleeter

查看spleeter是否安装成功

pip list

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

安装ffmpeg

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

windows版链接:https://www.gyan.dev/ffmpeg/builds/
选择需要的版本进行下载,然后解压

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

将bin目录添加到系统环境变量即可

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

终端输入命令ffmpeg

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

如图说明安装成功

2.获取spleeter项目

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

spleeter项目链接:https://github.com/deezer/spleeter

下载预训练模型

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

预训练模型链接:https://github.com/deezer/spleeter/releases/tag/v1.4.0

我下载的spleeter项目

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

在项目根目录新建music文件夹,用来存放要分离的mp3音频文件

在项目根目录新建pretrained_models文件夹,把下载好的预训练模型解压到这里

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

根据需求来下载,不需要全部下载。
将2stems开头的一个预训练模型解压到2stems文件夹下,其他的同理

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

注意:文件夹命名只识别2stems、4stems、5stems

3.在项目根目录新建startup.bat文件

向startup.bat文件添加如下内容

@echo off & title spleeter启动器 by 编程要快乐
:: 项目根目录所在的绝对路径
set CURRENT_PATH=/d %~dp0
:: cd /d 会切换不同盘符的路径
@REM cd %CURRENT_PATH%
@REM echo %CURRENT_PATH%
:main
echo ------------------------------------------------------------------------------------------
echo 1.使用2stems预训练模型分离mp3音频文件(Vocals (singing voice) / accompaniment separation)
echo.
echo 2.使用4stems预训练模型分离mp3音频文件(Vocals / drums / bass / other separation)
echo.
echo 3.使用5stems预训练模型分离mp3音频文件(Vocals / drums / bass / piano / other separation)
echo ------------------------------------------------------------------------------------------
echo.
set /p x=请选择预训练模型:
:: 默认使用2stems预训练模型分离mp3音频文件
set model=2stems
if %x%==1 (set model=2stems
) else if %x%==2 (set model=4stems
) else if %x%==3 (set model=5stems
)
@REM echo %model%
:: music文件夹所在路径
set MUSIC_PATH=%CURRENT_PATH%music
:: 切换到music文件夹路径下,以便Tab键补全输入的文件名
cd %MUSIC_PATH%
echo.
set /p mp3=直接输入music文件夹里的mp3文件名(含后缀):
:: 将mp3中的所有双引号删除
SET mp3=%mp3:"=%
@REM set mp3=%cd%music%mp3%
set mp3=.music%mp3%
@REM echo %mp3%
:: 再切换回项目根目录来执行命令
cd %CURRENT_PATH%
@echo on
:: 使用 --verbose 参数查看更多的输出信息
python -m spleeter separate -p spleeter:%model% -o music_output "%mp3%" --verbose
@echo off
echo.
set /p isContinue=是否继续执行?(Y/N):
@REM echo %isContinue%
if %isContinue%==Y (clsgoto main
)
if %isContinue%==y (clsgoto main
)
else exit
@REM @echo off
@REM echo 按任意键结束...
@REM pause>nul

然后向music文件夹添加一首歌

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

接着双击startup.bat运行批处理文件

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

这样就分离成功了,去到music_output目录查看

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

由于我选择了2stems预训练模型,所以只分离了人声和伴奏,其他预训练模型可自行测试

4.spleeter分离音频文件所需工具

关注编程要快乐公共号,回复spleeter即可获取

GiantMIDI-Piano

参考教程:https://www.bilibili.com/read/cv8223137/

1.获取GiantMIDI-Piano项目

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

GiantMIDI-Piano项目链接:https://github.com/bytedance/GiantMIDI-Piano

2.下载EmEdtior编辑器

EmEdtior中文官网:https://zh-cn.emeditor.com/

用来处理接下来的.csv文件

3.安装项目根目录requirements.txt文件里的依赖

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

执行命令安装依赖

pip install -r requirements.txt

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

下载完之后,需要安装Pytorch1.4及以上版本

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

pip install torch
这会默认下载CPU版的Pytorch。但是我是下载GPU版的,这样执行速度会快一点。

4.下载CUDA版(GPU版)Pytorch

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

链接:https://pytorch.org/get-started/locally/

如图选择(需根据电脑配置来选择CUDA版本)

查看电脑显卡支持的CUDA版本

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

下载CUDA工具包

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

CUDA工具包链接:https://developer.nvidia.com/zh-cn/cuda-downloads

CUDA工具包本地安装包是内含特定版本Nvidia显卡驱动的,所以只选择下载CUDA工具包就足够了,如果想安装其他版本的显卡驱动就下载相应版本即可。

开始下载Pytorch

执行以下命令就可以下载了

pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
它会根据你当前所在的Python版本环境来下载相应版本的依赖包,我的Python版本为3.8.3,所以会下载cp38的依赖包。
由于我已经下载好了,我用Anaconda来模拟下载命令的过程,可以看到我的Anaconda环境的Python版本为3.7.10,执行命令,会下载cp37的依赖包。

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

因为命令行下载有很大概率下载失败,所以我选择离线包下载安装

各个版本的pytorch以及torchvision,的CPU版本,GPU版本都可以在下面的网址下载:https://download.pytorch.org/whl/torch_stable.html

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

找到对应Python版本的GPU版Pytorch离线包下载即可

torchvision、torchaudio同理

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

注意:torchaudio只有cpu版

离线安装Pytorch、torchvision、torchaudio

依次执行下面的命令,注意离线包名可能不一样

pip install "torch-1.8.1+cu111-cp38-cp38-win_amd64.whl"
pip install "torchvision-0.9.1+cu111-cp38-cp38-win_amd64.whl
pip install "torchaudio-0.8.1-cp38-none-win_amd64.whl"

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

查看是否都安装成功了
pip list

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

5.编写startup.bat以及创建文件夹

在项目根目录创建startup.bat批处理文件

python audios_to_midis.py transcribe_piano --workspace="./works" --mp3s_dir="./works/mp3s_piano_solo" --midis_dir="./works/midis" --begin_ind=0 --end_index=10
@echo off
echo.
echo 按任意键退出...
pause>nul

填入上述内容保存

在项目根目录创建works文件夹

并建立midismp3s_piano_solo两个文件夹,同时将以下full_music_pieces_youtube_similarity_pianosoloprob.csv文件放进该works文件夹

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

将mp3文件放入mp3s_piano_solo

将之前spleeter分离出的accompaniment.wav文件转成mp3文件放入该目录

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

接着用EmEdtior工具打开csv文件

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

删除多余的行,并设置不必要的列的值为unknown,并设置audio_name列的值为accompaniment,以及piano_solo_prob列的值为1

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

保存设置好的csv文件,并执行批处理文件

双击该项目根目录的startup.bat来将MP3文件转换成MIDI乐谱文件

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

查看输出来的MIDI文件

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

双击播放该乐谱文件

Python 将MP3音频文件转换成MIDI乐谱文件-编程之家

播放成功!至此MP3音频文件转MIDI乐谱文件教程就结束了!

6.GiantMIDI-Piano转换所需工具

关注编程要快乐公共号,回复midi即可获取