#212·moonshine

German dict stresses the onset, not the vowel

Author: cryptomilkCreated Aug 5, 2026Updated Aug 29, 2026

German's dict.tsv places stress marks (ˈ/ˌ) before the whole onset consonant cluster. The English dictionary places them right before the vowel instead. espeak-ng also stresses the vowel.

The English (en_us/dict_filtered_heteronyms.tsv), stress before the vowel:

banana   -> bənˈænə
computer -> kəmpjˈutɚ
teacher  -> tˈitʃɚ

German (de/dict.tsv), stress before the onset:

Servus   -> ˈseɐ̯vus
wäre     -> ˈvɛːʁə
klettern -> ˈklɛtɐn

German commonly stresses the first syllable. In that case the German dictionary puts a bare stress mark as the word's first phoneme, right after silence, with no consonant before it. TTS models don't see that pattern in training data phonemized the normal way (stress before the vowel). This produces a spurious vowel sound before such words.

Example: "Servus, wie wäre es mit Kaffee?" synthesizes with an extra vowel before "Servus" and "wäre" (both stressed on syllable one). Kaffee" (stressed on syllable two) is fine.

So it sounds like: "Äservus, wie äwäre es mit Kaffee?"

The fix is probably to move each stress mark in dict.tsv to right before its syllable's vowel, matching the English dictionary and also espeak-ng.

I have a German Kokoro model.