-
Notifications
You must be signed in to change notification settings - Fork 27
音源开发者文档
- 以下内容适用于Diffsinger no-midi模式,基于DiffSinger(OpenVPI维护版)训练的音源。
- 目前的声码器与音源打包格式是临时的,以后可能会改变,且无法保证兼容。
- 所有文本文件的编码均为utf-8。如果你不知道这是什么,请只使用英文字母和数字。
- 所有文件名和文件夹名只能使用英文字母和数字。
- 在使用过程中遇到了任何Bug,都可以向我反馈。在反馈时,建议提供发生 bug 时的 OpenUtau 窗口完整截图、工程文件,以及 OpenUtau 日志文件。
要制作一个Diffsinger音源,需要完成以下步骤:
- 录制自己的歌声
- 音频标注
- 模型训练
- 音源打包
以下介绍如何将训练好的音源打包为适用于OpenUtau的格式。请先按照DiffSinger文档中的方法完成前面各步骤。
注意:打包音源后,请先在自己的OpenUTAU for Diffsinger上安装并使用,确保能正常合成后再分享给其他用户使用
多说话人音源的打包方法,请见多说话人功能说明
由于音源的训练与合成依赖声码器,每个声码器都有一个不同的包名。包名只能使用小写英文字母、数字和下划线。这里以nsf_hifigan为例
声码器位于OpenUTAU安装目录下的Vocoders文件夹,目录结构如下:
OpenUtau.exe
Vocoders
└─nsf_hifigan #声码器包名
├─vocoder.yaml #声码器信息文件,必须叫vocoder.yaml
└─nsf_hifigan.onnx #声码器模型文件,文件名在vocoder.yaml中指定
#声码器包名,必须和文件夹名称相同
name: nsf_hifigan
#声码器模型文件名
model: nsf_hifigan.onnx
#以下为声码器参数
num_mel_bins: 128
hop_size: 512
sample_rate: 44100
声码器安装包为zip压缩包,将后缀名改为.dsvocoder。声码器信息文件和模型文件必须位于压缩包根目录,不能嵌套文件夹。在openutau中安装声码器时,将自动解压到包名对应目录中。
音源位于OpenUTAU安装目录下的Singers文件夹,目录结构如下:
OpenUtau.exe
Singers
└─mysinger #文件夹可任意命名
├─dsdur #音素时长模型文件夹
| ├─dur.onnx #音素时长模型,onnx
| ├─linguistic.onnx #语言学编码器,onnx
| ├─dsconfig.yaml
| ├─dsdict.yaml #OpenUtau yaml格式词典
| └─phonemes.txt #音素列表
├─dspitch #音高模型文件夹(可选)
| ├─pitch.onnx #音高模型,onnx
| ├─linguistic.onnx #语言学编码器,onnx
| ├─dsconfig.yaml
| ├─dsdict.yaml #OpenUtau yaml格式词典
| └─phonemes.txt #音素列表
├─dsvariance #能量与气声模型文件夹
| ├─variance.onnx #能量与气声模型,onnx
| ├─linguistic.onnx #语言学编码器,onnx
| ├─dsconfig.yaml
| ├─dsdict.yaml #OpenUtau yaml格式词典
| └─phonemes.txt #音素列表
├─dsvocoder #声码器文件夹(可选)
| ├─vocoder.onnx #声码器模型,onnx
| └─vocoder.yaml
├─character.txt #音源基本信息文件
├─character.yaml #OpenUTAU音源信息文件
├─dsconfig.yaml #Diffsinger音源信息文件
├─phonemes.txt #音素列表
└─acoustic.onnx #声学模型,onnx
只有第一行name是必要的,其他行均可选
name=音源名
author=作者
voice=声音提供者
web=音源官网
例如:
name=Zhibin Diffsinger
author=Chisong
voice=Chisong
web=http:zhibin.club/
请勿手动修改此文件
text_file_encoding: utf-8
portrait_opacity: 0.67
default_phonemizer: OpenUtau.Core.DiffSinger.DiffSingerPhonemizer
singer_type: diffsinger
(注意:不是训练音源时的配置文件!!不是训练音源时的配置文件!!请参照下面的格式):
phonemes: phonemes.txt #音素列表
acoustic: acoustic.onnx #声学模型
vocoder: nsf_hifigan #所使用的声码器包名
# 以下是参数相关设置
# 这一部分可以直接从训练使用的配置文件中复制过来
# random_pitch_shifting和use_key_shift_embed为性别参数相关,参见 https:github.com/openvpi/DiffSinger/releases/tag/v1.6.0:
# 只有当你的音源导出时使用了--expose_gender时,才需要这两项
# random_time_stretching和use_speed_embed为发音速度参数相关,参见 https:github.com/openvpi/DiffSinger/releases/tag/v1.7.0:
# 只有当你的音源导出时使用了--expose_velocity时,才需要这两项
augmentation_args:
random_pitch_shifting:
range: [-5., 5.]
scale: 1.5
random_time_stretching:
domain: log
range: [0.5, 2.0]
scale: 1.5
use_key_shift_embed: true
use_speed_embed: true
# 以下是声学模型支持的唱法参数的声明,请务必按声学模型实际支持情况填写
use_energy_embed: true # 声学模型是否支持能量参数
use_breathiness_embed: true # 声学模型是否支持气声参数
use_voicing_embed: true # 声学模型是否支持发声参数
use_tension_embed: true # 声学模型是否支持张力参数
# 如果你的声学模型使用浅扩散,才需要以下两行
use_shallow_diffusion: true
max_depth: 1000 # 训练音源时的K_step
phonemes.txt会在onnx导出时一并导出
在音源内创建一个名为“dsdur”的文件夹,其中各文件如下:
linguistic.onnx、dur.onnx、phonemes.txt由所训练的模型导出,暂不支持多说话人。多说话人模型请冻结为其中一个说话人。
注意:不同音源的的linguistic.onnx和dur.onnx不能混用。你可以复制整个dsdur文件夹(甚至可以在非diffsinger音源上使用),但不能只复制dur.onnx。
phonemes: phonemes.txt #音素列表
linguistic: linguistic.onnx #语言学编码器模型
dur: dur.onnx #音素时长模型
hop_size: 512
sample_rate: 44100
predict_dur: true #与训练时指定的predict_dur一致
OpenUtau yaml格式字典,包含了单词到音素的字典及每个音素的类型。使用这一字典格式的原因是OpenUtau需要各音素是元音还是辅音的信息来拆分音节,以支持多音节语言。
可使用dict-to-opu.py将diffsinger字典转换为openutau yaml字典。转换脚本会猜测每个音素的类型,但仅适用于中文、日文等两段式字典。使用方法:python dict-to-opu.py <输入文件> <输出文件>
在OpenUtau中,vowel指一个音节中的主要元音,具有如下性质
- 位于音符时值的开头。即主要元音的起始位置卡拍
- 随着音符长度拉伸而拉伸
字典格式如下:
# symbols部分:每个音素的类型,需要包含音源支持的所有音素。
# type可为vowel、stop、affricate、aspirate、liquid、nasal、fricative、semivowel,但OpenUTAU只管一个音素是不是vowel,别的都一样。
symbols:
- symbol: SP
type: vowel
- symbol: AP
type: vowel
- symbol: a
type: vowel
- symbol: h
type: fricative
# entries部分:单词到音素的字典。
- grapheme: SP
phonemes: [SP]
- grapheme: AP
phonemes: [AP]
- grapheme: a
phonemes: [a]
- grapheme: ha
phonemes: [h, a]
在音源内创建一个名为“dspitch”的文件夹,其中各文件如下:
- linguistic.onnx、pitch.onnx、phonemes.txt由所训练的模型导出,暂不支持多说话人。多说话人模型请冻结为其中一个说话人。
- dsdict.yaml同上。
注意:不同音源的的linguistic.onnx和pitch.onnx不能混用。你可以复制整个dspitch文件夹,但不能只复制pitch.onnx。
phonemes: phonemes.txt #音素列表
linguistic: linguistic.onnx #语言学编码器模型
pitch: pitch.onnx #音高时长模型
hop_size: 512
sample_rate: 44100
predict_dur: true #与训练时指定的predict_dur一致
use_expr: true #如果你的音高模型支持音高表现力参数(PEXP),则需要这一行
如果你的音源支持能量,气声,张力或发声参数,则需要包含唱法(variance)模型。该模型须至少涵盖四种唱法参数中声学模型所需的参数。
在音源内创建一个名为“dsvariance”的文件夹,其中各文件如下:
- linguistic.onnx、variance.onnx、phonemes.txt由所训练的模型导出。
- dsdict.yaml同上。
phonemes: phonemes.txt #音素列表
linguistic: linguistic.onnx #语言学编码器模型
variance: variance.onnx #唱法模型
hop_size: 512
sample_rate: 44100
predict_dur: true #与训练时指定的predict_dur一致
# 以下部分是模型是否支持各种参数的声明,请务必按照唱法模型实际支持参数情况填写!
predict_energy: true #唱法模型是否支持能量参数
predict_breathiness: true #唱法模型是否支持气声参数
predict_voicing: true #唱法模型是否支持发声参数
predict_tension: true #唱法模型是否支持张力参数
如果你微调(finetune)了声码器,可以在音源中包含声码器模型。
OpenUtau在渲染时,如果你的音源有dsvocoder子文件夹,则会从这个子文件夹加载声码器。否则会根据dsconfig.yaml中声明的包名加载OpenUtau中已安装的公用声码器。
在音源内创建一个名为“dsvocoder”的文件夹,其中各文件如下:
- vocoder.onnx由所训练的声码器模型导出。
model: "vocoder.onnx" #onnx模型文件名
num_mel_bins: 128
hop_size: 512
sample_rate: 44100
DiffSinger脚本(.ds)文件是DiffSinger命令行推理使用的输入文件。使用ds文件,音源开发者可在训练音源时预览音源的渲染效果。
注意:ds脚本文件仅包含音素与参数信息,无法编辑或转换为歌声合成工程格式,且无法保证跨音源训练选项、跨版本兼容。因此不建议公开分享导出的ds脚本文件。如需分享,请分享ustx源文件。
ds文件可通过以下方式导出:
- 选择合适的音素器,确保能在OpenUtau中正常播放。如需导出性别参数,请选择一个支持性别参数的DiffSinger音源,且该音源训练时的数据增强选项与你正在训练的音源相同。
- 在主界面点击“文件→导出工程→导出DiffSinger脚本”。