Skip to content

音源开发者文档

oxygen-dioxide edited this page Feb 26, 2024 · 23 revisions

注意事项

  • 以下内容适用于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中指定

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

character.txt

只有第一行name是必要的,其他行均可选

name=音源名
author=作者
voice=声音提供者
web=音源官网

例如:

name=Zhibin Diffsinger
author=Chisong
voice=Chisong
web=http:zhibin.club/

character.yaml

请勿手动修改此文件

text_file_encoding: utf-8
portrait_opacity: 0.67
default_phonemizer: OpenUtau.Core.DiffSinger.DiffSingerPhonemizer
singer_type: diffsinger

dsconfig.yaml

(注意:不是训练音源时的配置文件!!不是训练音源时的配置文件!!请参照下面的格式)

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。

dsconfig.yaml

phonemes: phonemes.txt      #音素列表
linguistic: linguistic.onnx #语言学编码器模型
dur: dur.onnx               #音素时长模型
hop_size: 512
sample_rate: 44100
predict_dur: true           #与训练时指定的predict_dur一致

dsdict.yaml

OpenUtau yaml格式字典,包含了单词到音素的字典及每个音素的类型。使用这一字典格式的原因是OpenUtau需要各音素是元音还是辅音的信息来拆分音节,以支持多音节语言。

下载opencpop-extension字典

可使用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。

dsconfig.yaml

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同上。

dsconfig.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由所训练的声码器模型导出。

vocoder.yaml

model: "vocoder.onnx" #onnx模型文件名
num_mel_bins: 128
hop_size: 512
sample_rate: 44100

导出DiffSinger脚本(.ds)

DiffSinger脚本(.ds)文件是DiffSinger命令行推理使用的输入文件。使用ds文件,音源开发者可在训练音源时预览音源的渲染效果。

注意:ds脚本文件仅包含音素与参数信息,无法编辑或转换为歌声合成工程格式,且无法保证跨音源训练选项、跨版本兼容。因此不建议公开分享导出的ds脚本文件。如需分享,请分享ustx源文件。

ds文件可通过以下方式导出:

  1. 选择合适的音素器,确保能在OpenUtau中正常播放。如需导出性别参数,请选择一个支持性别参数的DiffSinger音源,且该音源训练时的数据增强选项与你正在训练的音源相同。
  2. 在主界面点击“文件→导出工程→导出DiffSinger脚本”。