Skip to content
oxygen-dioxide edited this page Jan 28, 2024 · 3 revisions

以下内容适用于基于 DiffSinger variance 音素时长模型的音素器,包括:

  • DIFFS 位于General分类
  • DIFFS ZH 汉语普通话
  • DIFFS ZH-YEU 粤语
  • DIFFS JA 日语
  • DIFFS EN 英语
  • DIFFS ES 西班牙语
  • DIFFS IT 意大利语
  • DIFFS KO 韩语
  • DIFFS PT 葡萄牙语
  • DIFFS RU 俄语

使用方法

用户可通过以下方式输入歌词:

  • 直接输入歌词。此时默认使用字典中该歌词对应的的发音。如果字典中没有这个歌词,则音素器将尝试将歌词解释为音素序列。如果歌词错误,则默认输出SP
image
  • 歌词[音素序列]。其中音素序列用空格分隔。此时音素序列优先。例如只因[zh in]
image
  • [音素序列]。空格分隔。例如[zh in]
image

音源结构

DiffSinger Variance 系列音素器与渲染器相互独立。理论上,任何可以在 DiffSinger for OpenUtau 上使用的 UTAU,NNSVS/ENUNU 和 DiffSinger音源的开发者皆可让自己的音源支持 DiffSinger Variance 系列音素器。此外,DiffSinger音源也可以使用其他音素器,不影响歌声渲染,自动音高等功能的正常使用。

要支持 DiffSinger Variance 系列音素器,需要在音源内创建一个名为dsdur的文件夹。其中包含以下文件:

  • dsconfig.yaml
  • phonemes.txt(音素列表)
  • linguistic.onnx(语言学编码器模型)
  • dur.onnx(音素时长模型)
  • 字典文件

dsconfig.yaml

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

字典文件

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

下载opencpop-extension字典

可使用dict-to-opu.py将diffsinger字典转换为openutau yaml字典。转换脚本会猜测每个音素的类型,但仅适用于中文、日文等两段式字典。对于其他语言,该脚本给出的entries部分仍然是正确的,但你需要手动检查每个音素的类型是否正确。使用方法:python dict-to-opu.py <输入文件> <输出文件>

OpenUtau中的音素分为三种类型:元音、辅音和介母。

元音(vowel)指一个音节中的主要元音,具有如下性质:

  • 每个音节仅含有一个元音,一般位于音符时值的开头。即主要元音的起始位置卡拍
  • 随着音符长度拉伸而拉伸

辅音具有以下特性:

  • 一个音节可以含有多个辅音
  • 音节开头的辅音占据上一个音符的时值
  • 对于足够长的音符,辅音的时长不随着音符长度拉伸而拉伸

介母是一种特殊的辅音。在“辅音-介母-元音”的结构中,卡拍点位于辅音和介母之间,介母会占据当前音符开头的时值。除此之外介母的行为和辅音一致。

例如,在 grass [g r ae s] 中, g和s是辅音,r是介母,ae是元音。卡拍点位于g和r之间。

字典格式如下:

# symbols部分:每个音素的类型,需要包含音源支持的所有音素。
# type可为vowel、stop、affricate、aspirate、liquid、nasal、fricative、semivowel。
# 如果type为vowel,则音素被视为元音。如果type为semivowel,则音素被视为介母。其他情况下音素均被视为辅音。
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]

每个音素器对应一个字典文件。字典文件的命名为dsdict-<语言代码>.yaml。例如DIFFS的字典文件为dsdict.yaml,DIFFS ZH的字典文件为dsdict-zh.yaml,DIFFS ZH-YUE的字典文件为dsdict-zh-yue.yaml。如果对应语言的字典未找到,则会加载dsdict.yaml。

G2P

一些音素器接入了OpenUtau内置的G2P模块。为这些音素器编写字典时,可以在replacements部分定义如何将OpenUtau G2P输出的音素序列转化为音源所支持的音素。该部分格式如下:

#symbols,entries同上。其中symbols部分仍然使用音源所使用的音素集。

#replacements部分:OpenUtau G2P输出的音素序列到音源所使用的音素集的映射。
replacements:
- {from: b, to: B2}
- {from: ch, to: CH2}
- {from: d, to: D2}
- {from: f, to: F2}
- {from: g, to: G2}
- {from: k, to: K2}
- {from: l, to: L2}
- {from: m, to: M2}
- {from: n, to: N2}
- {from: p, to: P2}
- {from: r, to: R2}
- {from: s, to: S2}
- {from: sh, to: SH2}
- {from: t, to: T2}
- {from: v, to: V2}
- {from: w, to: W2}
- {from: y, to: Y2}
- {from: z, to: Z2}
- {from: zh, to: ZH2}
- {from: z, to: Z2}

字典中的symbols部分优先于G2P。如果一个词在字典中存在,则使用字典定义的发音,而非G2P给出的发音。

以下是各G2P使用的音素集

DIFFS EN

  • vowels: aa, ae, ah, ao, aw, ay, eh, er, ey, ih, iy, ow, oy, uh, uw
  • consonants: b, ch, d, dh, f, g, hh, jh, k, l, m, n, ng, p, r, s, sh, t, th, v, w, y, z, zh