MakeDiffSinger学习记录
2023.8.17学习记录仅供参考
自动标注部分https://www.bilibili.com/read/cv25820501?spm_id_from=333.9
https://github.com/openvpi/MakeDiffSinger
MakeDiffSinger在colab的CUP模式

#拷贝OPENVPI官方数据
%cd /content
!git clone https://github.com/openvpi/MakeDiffSinger.git

# 安装aria2
!apt -y install -qq aria2

# 下载语音模型重命名mfa.zip放在content/MakeDiffSinger
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/datasets/fox7005/tool/resolve/main/mfa-opencpop-extension.zip -d /content/MakeDiffSinger -o mfa.zip

#@title 安装 conda的colab版本condacolab执行后会自动重启
!pip install -q condacolab
import condacolab
condacolab.install()

#检查是否安装成功condacolab上一步自动重启后执行
import condacolab
condacolab.check()


#在conda中建立虚拟环境名mfa,python版本3.8
!conda create -n mfa python=3.8 --yes
#激活虚拟环境mfa和本地版区别去掉conda,不去掉不知道怎么解决shell
#!空格activate mfa
! activate mfa

#安装mfa2.0.6强制对齐据说这个版本对中文支持最好
!conda install -c conda-forge montreal-forced-aligner==2.0.6 --yes

#在mfa安装依赖环境
%cd /content/MakeDiffSinger/acoustic_forced_alignment
!pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install ipykernel

#@title 检查音频长度是否正确(如果是整首歌请跳过)
!python validate_lengths.py --dir /content/raw
#如果上一篇标注lab和拼音文件还在 /content/raw(替换自己的文件路径)

#@title 检查标记片段是否正确(如果是整首歌请跳过)
!python validate_labels.py --dir /content/raw --dictionary dictionaries/opencpop-extension.txt

#@title 重新格式化录音到新建rawmfa文件夹
%cd /content
!mkdir -p rawmfa
%cd /content/MakeDiffSinger/acoustic_forced_alignment
!python reformat_wavs.py --src /content/raw --dst /content/rawmfa

#新建textgrids文件夹
%cd /content
!mkdir -p textgrids

#@title 使用 MFA 处理语料库
!mfa align /content/rawmfa /content/MakeDiffSinger/acoustic_forced_alignment/dictionaries/opencpop-extension.txt /content/MakeDiffSinger/mfa.zip /content/textgrids --beam 100 --clean --overwrite

#加查是否已经生成所有文件,如果是中途掉或者中途添加文件也可以用它测试是否都生成
%cd /content/MakeDiffSinger/acoustic_forced_alignment
!python check_tg.py --wavs /content/rawmfa --tg /content/textgrids

#@title 改进和完成的 TextGrids导入textgrids2文件夹
!mkdir -p /content/textgrids2
!python enhance_tg.py --wavs /content/rawmfa --dictionary /content/MakeDiffSinger/acoustic_forced_alignment/dictionaries/opencpop-extension.txt --src /content/textgrids --dst /content/textgrids2
#如果希望效果更好可以通过Vlabler(https://github.com/sdercolin/vlabeler) 在mfa的基础上精修你的TextGrids对齐文件

#@title 创建最终的数据集diffsingerdatsaet修改成歌手名
#--dataset这是参数别动
!mkdir -p /content/diffsingerdatsaet
!python build_dataset.py --wavs /content/rawmfa --tg /content/textgrids2 --dataset /content/diffsingerdatsaet

#备份最后的数据集到网盘根目录
#请确保已经加载网盘
%cd /content
!zip -r diffsingerdatsaet.zip /content/diffsingerdatsaet
!cp /content/diffsingerdatsaet.zip /content/drive/MyDrive/

根据官方字典修改config_acoustic.yaml就可预处理
文件在configs/templates中,修改后推荐放到数据集文件夹方便以后使用
把diffsingerdatsaet.zip解压到DiffSinger/data/目录下
如果是gpu模式可继续使用,免费的时间有限所以推荐单独保存此副本cpu模式使用以后制作其他数据集

#@title 自动音高训练集制作创建虚拟环境makediffsinger
!conda create -n makediffsinger python=3.8 --yes
#激活虚拟环境
! activate makediffsinger
#虚拟环境MakeDiffSinger安装依赖
%cd /content/MakeDiffSinger/variance-temp-solution
!pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
#转换transcriptions.txt为transcriptions.csv如果已经有csv跳过继续下一步
!python convert_txt.py 你的文件路径/transcriptions.txt
#二分式词典(汉语普通话、日语等)
!python add_ph_num.py /content/diffsingerdatsaet/transcriptions.csv --dictionary /content/MakeDiffSinger/acoustic_forced_alignment/dictionaries/opencpop-extension.txt

#单音节音素系统(粤语、韩语等)vowels.txt consonants.txt需要自己制作没有跳过
!python add_ph_num.py /content/datsaetge/transcriptions.csv --vowels /content/diffsingerdatsaet/vowels.txt --consonants /content/diffsingerdatsaet/consonants.txt

#推断音高值
!python estimate_midi.py /content/diffsingerdatsaet/transcriptions.csv /content/diffsingerdatsaet/wavs
#优化 MIDI 序列 没需要跳过
!python convert_ds.py csv2ds /content/diffsingerdatsaet/transcriptions.csv /content/diffsingerdatsaet/wavs
#这里会在音频文件夹内生成同名DS文件,之前说的如果你数据集里是一个单文件一整首歌的声成的ds文件就可以直接用作推理,这只是个想法,测试可以使用,也就是在标注的时候4分钟的音频是无法识别汉字,但你只需要去网上找到歌词汉VTuberTalktools/hanzi_to_pinyin.py转成标注lab,或者自己改成拼音标注,然后运行到这里就可以了得到歌词、持续时间、音高的ds文件,mfa和其他处理都支持4分钟的长音频,根据官方说的不能完全识别么好,也推荐了工具修改SlurCutter,https://github.com/openvpi/dataset-tools/releases这工具集合标注lab,也可以整首歌词汉字用这个转lab标注,MinLabel在SlurCutter工具包文件夹内

#将.ds文件重新组合为transcriptions.csv如果没修改跳过,
!python convert_ds.py ds2csv /content/diffsingerdatsaet/wavs /content/datsaetge/transcriptions.csv

这里就完成了音高模型数据集前期准备,之前备份了只需要备份transcriptions.csv
config.variance.yaml修改后预处理
这里是DiffSinger2.0.0仅供参考
根据官方openvpi维护版教程使用
https://github.com/openvpi/DiffSinger
文本教程地址
https://openvpi-docs.feishu.cn/wiki/KmBFwoYDEixrS4kHcTAcajPinPe