German dict uses ʁ instead of r
dict.tsv always writes the German rhotic as ʁ. It does this in every position. Real German does not work that way.
wäre -> ˈvɛːʁə
Zwerge -> ˈt͡svɛʁɡə
Regina -> ʁeˈɡiːnaespeak-ng never uses ʁ. It uses four different sounds instead. The sound depends on position.
$ espeak-ng -v de -q --ipa "Regina"
rˈeːɡiːnˌɑː
$ espeak-ng -v de -q --ipa "wäre"
vˈɛːrə
$ espeak-ng -v de -q --ipa "Zwerge"
tsvˈɛɾɡə
$ espeak-ng -v de -q --ipa "Wärter"
vˈɛɾtɜ- Plain
rat the start of a syllable. This includes word-initial position ("Regina"). It also includes the position between two vowels ("wäre"). German syllable rules put a consonant between two vowels at the start of the next syllable. - Tap
ɾat the end of a syllable, right before another consonant. Example: "Zwerge" ->ɛɾɡ. Also the firstrin "Wärter" ->ɛɾt. - A vowel,
ɐorɜ, for the unstressed "-er" ending. Example: the secondrin "Wärter" ->tɜ.
dict.tsv collapses all four into one symbol. This breaks a Kokoro voice (df_kerstin) fine-tuned on real espeak-ng output. We confirmed the cause directly. Its training script (kikiri-tts/scripts/prepare_dataset.py) calls misaki.espeak.EspeakG2P(language="de"). That call does not remap the rhotic at all. We checked misaki/espeak.py's e2m table. It only remaps affricates, not r/ɾ/ɐ/ɜ. So the model never saw ʁ in these positions during training.
Where it breaks
Confirmed by ear against df_kerstin:
ʁbetween two vowels: clearly broken. "wäre", "Haare", "goren", "Floris", "anderem" all come out wrong. Theʁsounds like achconsonant. Extra syllables sometimes appear too. "wäre" sounds like "wärche". "Floris" sounds like "Florchis".ʁbefore a consonant: also broken, in short common words. "Zwerge", "Bärme", "Ärmel", "Gärten", "Wurf" all get the samech-like mispronunciation. Some gain a whole extra garbled syllable. Example: "Gärten" sounds like "Gächtnä". In longer, less common words in the same position, the problem is fainter. Examples: "Augsburg", "Wismars", "Norberts". One listen even caught faint noise right after "Wismars"' finals. Severity varies. The underlying symbol mismatch is the same.ʁat the start of a syllable: sounds fine. This is true even in clusters likekʁ/fʁ/bʁ/dʁ. Confirmed: "Regina", "Kraft", "Frau", "Drache", "Bringen" all sound correct as-is.
We first guessed this was about stress. It isn't. "Norberts" has a stressed ʁ in the same shape as "Zwerge". But it sounds fine.
"anderem" has an unstressed ʁ. But it's broken. Position decides which sound applies. Stress does not.
Fix: pick the rhotic by position
Not a blanket "use r instead of ʁ". That would be wrong for the before-a-consonant case. That case needs tap ɾ, not r.
ʁat the start of a syllable: leave it, or normalize tor/ɾ. Not broken either way.ʁafter a vowel, before another vowel: user.ʁafter a vowel, before a consonant or word end: use tapɾ.- Leave the dictionary's existing
ɐ/ɐ̯"-er" endings alone. They're already roughly correct.
Source: moonshine-ai/moonshine