//========================================================= // German //========================================================= phoneme @ // Schwa vowel starttype #@ endtype #@ unstressed length 120 IF nextPh(r) THEN IF next2Ph(isVowel) THEN ELSE ChangePhoneme(3) ENDIF ENDIF FMT(vowel/@_4) endphoneme phoneme 3 // open Schwa+r vowel starttype #@ endtype #@ unstressed flag1 length 160 FMT(vowel/a#_3) // in eSpeak 1.44, this used vowel/V_3 at end-of-word endphoneme phoneme 3: // open Schwa+r vowel starttype #@ endtype #@ unstressed flag1 length 210 FMT(vowel/a#_3) endphoneme phoneme a vowel starttype #a endtype #a length 110 IF nextPh(isRhotic) THEN length 125 ENDIF FMT(vowel/a) endphoneme phoneme E vowel starttype #e endtype #e length 120 IF nextPh(*) THEN length 135 ENDIF FMT(vowel/e_mid2) endphoneme phoneme E2 // as[E] but reduces to @ if unstressed vowel starttype #e endtype #e length 120 ChangeIfDiminished(@) IF nextPh(*) THEN length 135 ENDIF FMT(vowel/e_mid2) endphoneme phoneme I vowel starttype #i endtype #i length 120 IF nextPh(*) THEN length 135 ENDIF IfNextVowelAppend(;) FMT(vowel/ii) endphoneme phoneme I: vowel starttype #i endtype #i length 190 FMT(vowel/ii) endphoneme phoneme O vowel starttype #o endtype #o length 120 IF nextPh(*) THEN length 135 ENDIF FMT(vowel/oo) endphoneme phoneme U vowel starttype #u endtype #u length 120 IF nextPh(*) THEN length 135 ENDIF IF nextPh(r) THEN IF next2Ph(isVowel) THEN ELSE ChangePhoneme(UR) ENDIF ENDIF FMT(vowel/uu_2) endphoneme phoneme A: vowel starttype #a endtype #a length 250 FMT(vowel/aa_6) endphoneme phoneme A // reduces to [a] if not stressed vowel starttype #a endtype #a length 250 ChangeIfUnstressed(a) FMT(vowel/aa_6) endphoneme phoneme i: vowel starttype #i endtype #i length 180 IF prevPh(w) THEN VowelStart(w/wi2) ENDIF FMT(vowel/i_2) endphoneme phoneme i2 vowel starttype #i endtype #i length 180 ChangeIfNotStressed(I) IF prevPh(w) THEN VowelStart(w/wi2) ENDIF FMT(vowel/i_2) endphoneme phoneme u: vowel starttype #u endtype #u length 190 FMT(vowel/u) endphoneme phoneme aU vowel starttype #a endtype #u length 220 FMT(vdiph/aau_6) endphoneme phoneme aI vowel starttype #a endtype #i length 210 FMT(vdiph/ai_5) endphoneme phoneme EI vowel starttype #e endtype #i length 210 FMT(vdiph/eei) endphoneme phoneme OY vowel starttype #o endtype #i length 220 FMT(vdiph/oi) endphoneme phoneme E: vowel starttype #e endtype #e length 200 FMT(vowel/e_8) endphoneme phoneme e: vowel starttype #e endtype #e length 200 FMT(vowel/e_2) endphoneme phoneme o: vowel starttype #o endtype #o length 210 FMT(vowel/o) endphoneme phoneme y: vowel starttype #u endtype #u length 200 FMT(vowel/y) endphoneme phoneme y vowel starttype #u endtype #u ipa ʏ length 110 IF nextPh(*) THEN length 115 ENDIF FMT(vowel/yy_4) endphoneme phoneme Y: vowel starttype #@ endtype #@ length 220 FMT(vowel/y#) endphoneme phoneme W vowel starttype #@ endtype #@ length 150 IF nextPh(*) THEN length 160 ENDIF FMT(vowel/oe) endphoneme // CONSONANTS //=========== phoneme ts import_phoneme consonants/ts endphoneme phoneme pF vls blb afr ipa pf Vowelout f1=0 f2=1000 -500 -350 f3=-200 80 lengthmod 2 WAV(ufric/f) // could replace this with a [pf] wav file endphoneme phoneme g# // for "ig" -> [IC] or [Ig] vls pal frc palatal lengthmod 3 IF nextPhW(isVoiced) THEN ChangePhoneme(g) ELSE ChangePhoneme(C) ENDIF endphoneme phoneme l/ // used for [l] when not before a vowel liquid lengthmod 7 IF nextPh(isVowel) THEN ChangePhoneme(l) ENDIF PrevVowelEndings VowelEnding(l/L1_@L, -60) VowelEnding(l/L1_aL, -40) VowelEnding(l/L1_eL, -30) VowelEnding(l/L1_iL, -30) VowelEnding(l/L1_oL, -40) VowelEnding(l/L1_uL, -40) EndSwitch FMT(l/l_3) endphoneme phoneme j liquid palatal lengthmod 7 IF nextPh(isVowel) THEN NextVowelStarts VowelStart(j/j@) VowelStart(j/ja) VowelStart(j/je) VowelStart(j/ji) VowelStart(j/jo) VowelStart(j/ju) EndSwitch VowelEnding(j/xj, -30) IF prevPh(isPause) THEN FMT(j/_j_short) // difference from base/j ENDIF ELSE // no vowel follows Vowelout len=70 FMT(j/j_) ENDIF endphoneme phoneme r vcd alv flp rhotic lengthmod 6 IF prevPhW(@-) THEN ELSE IF nextPhW(isVowel) THEN IF prevPhW(isVowel) THEN ChangePhoneme(R) ELSE // IF thisPh(isWordStart) THEN // ELSE InsertPhoneme(@-) // ENDIF ENDIF ENDIF ENDIF IF prevPh(isFlag1) THEN ChangePhoneme(NULL) // 'r' is already included in the previous vowel ENDIF CALL base/* endphoneme // This version of [r] was used in eSpeak 1.44, but received complaints phoneme r2 // uvular trill or fricative vcd uvl frc ipa ʀ lengthmod 6 length 110 IF nextPhW(isVowel) THEN FMT(r3/r_uvl) addWav(r3/r_uvl.wav, 50) ELSE IF prevPh(isFlag1) THEN ChangePhoneme(NULL) // 'r' is already included in the previous vowel ELSE ChangePhoneme(V#) ENDIF ENDIF endphoneme phoneme V# // used for 'r' after a vowel (to create a diphthong) liquid lengthmod 7 IF nextPhW(isVowel) THEN ChangePhoneme(r) ENDIF ipa ɐ IF prevPh(#a) OR prevPh(E) THEN FMT(r/V_2_) ENDIF IF prevPh(#u) THEN FMT(r/@_) ENDIF FMT(r/V_) endphoneme phoneme UR vowel starttype #u endtype #@ ipa ʊɐ flag1 length 180 FMT(vwl_de/uu_@) endphoneme phoneme oU // for English words import_phoneme en-us/oU endphoneme phoneme A~ vowel starttype #a endtype #a length 260 FMT(vnasal/aa_n4) endphoneme // translate from English to German phonemes equivalents en 0 O 3 3 3: W : @ @ @- @- @2 @ @5 @ @L U l a a a# a A: A: A@ A: r aa a aI aI aI@ aI 3 aU aU aU@ aU 3 A~ A~ E E e: e: e@ E: r eI e j i I I I I2 I i: i: i@ i: 3 i@3 i: r O O O: O : o: o: O@ O : r o@ O : r OI OY oU oU O~ O n U U u: u: U@ U r V W IR I r VR W r b b C C d d D D dZ dZ f f g g h h j j k k l l l# l# m m n n N N n^ n^ p p Q Q r r r- r s s S S t t T T t2 t tS tS v v w w x x z z Z Z endphoneme