// PB General rules for vowels: // Short vowels // ACC: Short "pille" [p?el@-], "andre" [AndRV] // AC[V]: Short "piler" [p?ilV] - verbs, not nouns, which is a problem // A[N]: Short "bange" [b?AN@-] // Long vowels // A + @- OR V: Long "ae" "aer" [&:@-] // AC + @- OR V: Long "pile" [pi:l@-] // AC[i]: Long "smidig" [smi:Di] // Vowel length changed by eSpeak // Between two voiced consonants // After [l/3] // Before [l/3] // After an "r" sound // Before [N] // Before voiced consonant + [i] // PROCEDURES // Change the length of SHORT vowels (?+vowel) procedure ShortVowelLength // "endelig", "ånder", "ynde" - Short initial vowel sounds too short TEST IF thisPh(isWordStart) AND nextPhW(n) THEN IF next2PhW(@-) OR next2PhW(V) THEN IF next2PhW(isWordEnd) THEN // NOT "ondeste" length 170 RETURN ENDIF ENDIF ENDIF // "blod" "slutte", "løn" l/3 makes the vowel too long // NOT "mel'oner" IF prevPhW(l/3) AND thisPh(isFirstVowel) THEN IF thisPh(isStressed) THEN length 100 IF nextPhW(N) THEN // [N] makes it even longer - "længden" LengthAdd -20 ENDIF // Don't shorten it further if it comes after an "r" sound // Exit the procedure RETURN ENDIF // "transplantation" - the second a - between 2 voiced consonants IF nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 100 RETURN ENDIF ENDIF // "bygge", "bygget", "byggede" - consonant + [@-] makes the vowel too long IF NOT thisPh(?V) THEN // NOT "fjollet" IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN IF next2PhW(@-) THEN //AND next3PhW(D) THEN IF thisPh(isFirstVowel) THEN // NOT "cellof'anet" length 100 RETURN ENDIF ENDIF ENDIF ENDIF // "byttet", "lyttet", "flyttet" IF prevPhW(isVoiced) AND prevPhW(isNotVowel) THEN IF nextPhW(isNotVowel) AND next2PhW(@-) AND next3PhW(D) THEN length 100 ENDIF ENDIF // "firmaet", "politiet - 140 sounds too short IF nextPhW(@-) AND next2PhW(D) AND next2PhW(isWordEnd) THEN length 180 ENDIF // "forsøgte" stressed second vowel too long TEST IF thisPh(isMaxStress) AND thisPh(isSecondVowel) THEN IF nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN // NOT "papirer" // 2 voiced consonants seem to add further length ([gd] in "forsøgte") IF next2PhW(isVoiced) AND next2PhW(isNotVowel) THEN // NOT "moral" length 110 RETURN ENDIF ENDIF ENDIF // "bygge", "forbandelse", "lynlås", "centralen" vowel between 2 voiced consonants - too long IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN // voiced IF prevPhW(isNotVowel) AND nextPhW(isNotVowel) THEN // consonants IF NOT nextPhW(isWordEnd) THEN // NOT "smil" IF NOT next2PhW(j) AND NOT prevPhW(R) THEN // NOT "vilje", "krympe" IF NOT nextPhW(r) AND NOT nextPhW(3-) THEN // NOT "moderne" - vowel + r/3- IF thisPh(isStressed) THEN // NOT [W] in "f'indelønnen" IF thisPh(isFirstVowel) THEN // IF NOT nextPhW(@-) THEN // NOT "væbne" IF NOT nextPhW(isNotVowel) AND NOT next2PhW(isNotVowel) THEN // NOT "væbne" length 110 RETURN ENDIF ENDIF ENDIF ENDIF ENDIF IF prevPhW(R) THEN // "krympe" R makes the vowel longer than other voiced consonants // NOT [o] in "rod'eo", NOT [æ] in "trængte" IF thisPh(isMaxStress) AND NOT nextPhW(N) THEN length 90 RETURN ENDIF // "trængte" - [N] after the vowel makes it even longer IF thisPh(isMaxStress) AND nextPhW(N) THEN length 75 RETURN ENDIF ENDIF ENDIF ENDIF ENDIF // "buske" - only sg/sk? TEST IF prevPhW(isNotVowel) AND nextPhW(s) AND next2PhW(isNotVowel) AND next3PhW(@-) THEN length 100 ENDIF // "projektet" IF prevPhW(S) AND nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 100 ENDIF // "rigtigt", "fred", "frem", "frikvarter" - R makes the vowel too long IF prevPhW(R) OR prevPhW(3-) OR prevPhW(r) THEN IF nextPhW(isNotVowel) THEN // NOT "krigen" IF thisPh(isFirstVowel) THEN // NOT the a in "moral" length 110 RETURN ENDIF ENDIF // R makes the vowel too long IF thisPh(isWordEnd) THEN // "maleri" length 120 RETURN ENDIF // "forbrydelse" between 2 voiced consonants IF nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 110 RETURN ENDIF ENDIF // "ring", "ringe", "fængsel", "spinkel", "vindspejl", "enke" IF nextPhW(N) THEN length 100 ENDIF // "sigte", "henter" t/d + @-/V makes the vowel too long // ?? is this just between 2 voiced consonants ?? // ?? does [h] act as a voiced consonant ?? IF nextPhW(isNotVowel) AND next2PhW(t) OR next2PhW(d) THEN IF next3PhW(@-) OR next3PhW(V) OR next3PhW(?V) THEN IF thisPh(isFirstVowel) THEN // NOT [i] in "forsp'ildte" length 110 RETURN ENDIF ENDIF ENDIF // "himlen", "pøblen" l/3 makes the vowel too long IF nextPhW(isNotVowel) AND next2PhW(l/3) AND next3PhW(@-) OR next3PhW(V) THEN length 110 ENDIF // "filmen" vowel + l/3 makes the vowel too long // Probably due to 2 voiced consonants (lm) - Change the condition? IF nextPhW(l/3) AND next3PhW(@-) THEN IF NOT next2PhW(j) THEN // NOT "vilje" IF next2PhW(isVoiced) THEN // NOT [e] in "folkevogn" length 100 ENDIF ENDIF ENDIF //"musikken", "piggen", "trafikken" consonant + [@-] makes the vowel too long // Probably wrong. Only k and g? Only [i]? // Could this be due to an English word like "physique" [fIz'i:k]? IF nextPhW(k) OR nextPhW(g)AND next2PhW(@-) THEN IF thisPh(?i) THEN length 100 RETURN ENDIF ENDIF // "rodeo", lianen" abnormal stress sounds too short IF thisPh(isMaxStress) AND NOT thisPh(isFirstVowel) THEN IF NOT nextPhW(k) AND NOT nextPhW(g) THEN // NOT "ant'ikt" - Like "physique" above? IF NOT nextPhW(N) AND NOT next2PhW(isNotVowel) THEN // NOT "omkr'ing", "eks'empel" IF NOT nextPhW(isVoiced) AND NOT next2PhW(isVoiced) THEN // NOT "bestemme" TEST length 170 ENDIF ENDIF ENDIF ENDIF endprocedure //-------------------------------------------------------------------- // Change the length of NORMAL vowels (without ? in front of them) procedure LongVowelLength // "guldmine" [ul/3] makes the vowel extremely short IF prevVowel(l/3) AND prev2PhW(u) THEN length 350 RETURN ENDIF // "guldur" [ul/3] makes the vowel extremely short IF prev2PhW(u) AND prevPhW(l/3) THEN IF NOT thisPh(isWordEnd) THEN // NOT "umulig" IF NOT nextPhW(t) AND NOT nextPhW(d) THEN // NOT "umuligt" IF NOT nextPhW(s) AND NOT nextPhW(S) THEN // NOT Drakulas, spekulationer ??? length 325 RETURN ENDIF ENDIF ENDIF ENDIF // "dage", "dagevis", fødselsdage" STRANGE BEHAVIOUR - too short at 240 IF prevPhW(d) AND nextPhW(@-) THEN IF NOT next2PhW(D) THEN length 350 RETURN ENDIF ENDIF // "tjeneste" TEST IF prevPhW(tS) AND nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 180 RETURN ENDIF // "havet", "lavet" IF nextPhW(isVoiced) AND next2PhW(@-) AND next3PhW(D) THEN length 180 RETURN ENDIF // "videre" IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN // voiced IF prevPhW(isNotVowel) AND nextPhW(isNotVowel) THEN // consonants IF NOT prevPhW(R) AND NOT prevPhW(r) AND NOT prevPhW(3-) THEN length 180 RETURN ELSE // [A] in "begravelse" - "r" adds extra length length 120 RETURN ENDIF ENDIF ENDIF // "alene" - Short initial vowel sounds too short at length 140 IF thisPh(isWordStart) THEN length 160 // "år? [O] - The word is only 1 vowel: make it long IF thisPh(isWordEnd) THEN length 180 ENDIF // "ønske" The vowel should have been made short becauce of 3 x consonant. // Take care of it here IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND next3PhW(isNotVowel) THEN length 140 ENDIF // "ære" IF nextPhW(V) AND nextPhW(isFinalVowel) THEN length 240 ENDIF // "øge", "øgede" IF nextPhW(isNotVowel) AND next2PhW(@-) THEN length 225 ENDIF // RETURN ENDIF // "døre" vowel + vowel: long IF nextPhW(@-) OR nextPhW(?V) THEN length 225 ENDIF // "pæne" vowel + consonant + [@-]: long IF nextPhW(isNotVowel) AND next2PhW(@-) THEN IF thisPh(isFirstVowel) THEN IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN // "vide" length 180 ELSE // "pæne" length 225 ENDIF RETURN ENDIF // Stressed second syllable in words with initial be- and for- IF NOT thisPh(isSecondVowel) AND thisPh(isMaxStress) THEN // "beb'ude", "form'ode" length 140 RETURN ENDIF ENDIF // "vildrede" IF nextPhW(D) AND next2PhW(@-) THEN IF NOT thisPh(isMaxStress) THEN length 225 RETURN ENDIF ENDIF // "guderne", "møde" IF nextPhW(isNotVowel) AND next2PhW(?V) OR next2PhW(V) OR next2PhW(@-) THEN length 225 ENDIF // "mødes", "vred", "møve", "mene", "dele" - vowel too long between 2 voiced consonants IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN IF prevPhW(isNotVowel) AND nextPhW(isNotVowel) THEN IF NOT prevPhW(R) AND NOT prevPhW(r) AND NOT prevPhW(3-) AND NOT prevPhW(l/3) THEN IF NOT next2PhW(isVoiced) THEN // NOT "bælte", "bomben" length 180 // mødes, dele RETURN ENDIF IF next2PhW(isNotVowel) THEN // bælte, svælge length 120 ENDIF ELIF NOT prevPhW(l/3) AND thisPh(isMaxStress) THEN IF NOT prevPhW(R) AND NOT prevPhW(r) AND NOT prevPhW(3-) THEN length 120 // "vred", "vrede" RETURN ENDIF ENDIF IF prevPhW(R) AND prevPhW(isWordStart) THEN // "råderet" length 180 RETURN ENDIF ENDIF ENDIF // "huske" - hACC@- vowel too long // 2 consonants - should have been short in da_rules // 140 too long because of [h]?? IF prevPhW(h) AND nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND next3PhW(@-) THEN length 110 RETURN ENDIF // PB long vowel followed by [@-] or [V](vowel+vowel) - "pigen" [p'i@-n] IF nextPhW(@-) OR nextPhW(V) THEN IF thisPh(isFirstVowel) THEN // NOT "best'yrelse", "geb'yrer" length 225 ENDIF ENDIF // "lydig" IF prevPhW(l/3) AND nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 180 RETURN ENDIF // PB "enig", "enige", "evig", "stædig" - vowel+consolant+[i] IF nextPhW(isNotVowel) AND next2PhW(i) THEN length 225 RETURN ENDIF // "føden" IF nextPhW(D) AND next2PhW(@-) AND next3PhW(n) THEN IF thisPh(isFirstVowel) THEN length 180 ENDIF ENDIF // l/3 + vowel makes the vowel too long IF prevPhW(l/3) AND nextPhW(isNotVowel) THEN // "klub", "klud", "slut" // The vowel should have been short but we fix it here IF NOT next2PhW(@-) AND NOT next2PhW(V) AND NOT next2PhW(?V) THEN // NOT "slæde" length 100 ELSE // "slæde", "lader", "forlader" length 160 ENDIF ENDIF // l/3 + vowel + voiced consonant makes the vowel too long IF prevPhW(l/3) AND nextPhW(isVoiced) AND nextPhW(isNotVowel) THEN length 130 ENDIF // "fryser", "rige" IF prevPhW(r) OR prevPhW(R) OR prevPhW(3-) THEN length 130 IF nextPhW(@-) THEN // "rige" [@-] seems to cancel the "r" effect length 240 ENDIF ENDIF // "længe" - short - 2 consonants => 1 consonant (ng => [N]) // Don't use isNasal here! IF nextPhW(N) THEN IF NOT prevPhW(R) AND NOT prevPhW(r) AND NOT prevPhW(3-) THEN length 140 ENDIF ENDIF // "buskene", "krøbling" The vowel should have been made short becauce og 2 x consonant. // Take care of it here IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN IF NOT nextPhW(l/3) THEN IF NOT nextPhW(r) AND NOT prevPhW(R) AND NOT prevPhW(3-) THEN // NOT "Maria" length 110 ENDIF ENDIF ENDIF endprocedure //---------------------------------------------------------------------- // PHONEMES // A bit longer than [@-] phoneme @ vwl starttype #@ endtype #@ unstressed length 60 IfNextVowelAppend(_!) FMT(vowel/@_3) endphoneme phoneme @- // very short schwa vwl starttype #@ endtype #@ unstressed nsy ipa ə IF nextPhW(*) OR nextPhW(r) THEN ipa NULL // @-* is used to make 'r' ENDIF length 50 // "femten", "manden" - only a short "n" sound IF nextPhW(n) THEN length 15 ENDIF IF prevPhW(isNotVowel) AND thisPh(isWordEnd) THEN length 15 ENDIF // "lige" [li@-] IF prevPhW(i) AND thisPh(isWordEnd) THEN length 15 ENDIF IF nextPhW(isVowel) THEN ChangePhoneme(@) ENDIF FMT(vowel/@-) endphoneme // ToDo: change [@] to [a#] if adjacent to [r] or [R] phoneme 3 vwl starttype #a endtype #a unstressed length 40 FMT(vowel/a#_3) endphoneme // PB sort of schwa [ɐ] (0250+032F) // "spurgt" [sp'o3-d] – ipa [spˈoɐ̯d] phoneme 3- // used for 'r' after a vowel (to create a diphthong) liquid lengthmod 7 ipa ɐ̯ FMT(r/a_) endphoneme phoneme i vwl starttype #i endtype #i length 140 CALL LongVowelLength FMT(vowel/i_4) endphoneme // PB short i // sviret vs. svirret phoneme ?i vwl starttype #i endtype #i length 140 CALL ShortVowelLength // Don't link with the next vowel with [;] - vowel too short // IfNextVowelAppend(;) FMT(vowel/i_4) endphoneme // PB English i - Tim phoneme I vwl starttype #i endtype #i length 130 IfNextVowelAppend(;) FMT(vowel/ii_2) endphoneme phoneme e vwl starttype #e endtype #e length 140 CALL LongVowelLength FMT(vowel/e) endphoneme // PB short e // "skille" vs. "skele", "pille" vs. "pile" phoneme ?e vwl starttype #e endtype #e length 140 CALL ShortVowelLength FMT(vowel/e) endphoneme phoneme E vwl starttype #e endtype #e length 140 // no link with next vowel IF thisPh(isWordEnd) THEN IfNextVowelAppend(_!) ENDIF // "ære", "kærester", "ærefrygt" - vowel + vowel IF nextPhW(V) THEN length 225 ENDIF // "dræber" TEST shortened by -70 in procedure because of the "r" sound IF prevPhW(R) OR prevPhW(r) OR prevPhW(3-) AND next2PhW(V) THEN length 225 ENDIF CALL LongVowelLength // "værelse" [v'E3-Vls@_!] IF nextPhW(3-) AND next2PhW(V) THEN length 100 ENDIF FMT(vowel/e_mid2) endphoneme // PB short E // "læsse" vs. "læse" phoneme ?E vwl starttype #e endtype #e ipa ε length 140 CALL ShortVowelLength FMT(vowel/e_mid2) endphoneme phoneme & vwl starttype #e endtype #e ipa a length 140 // "same", "sale", "bade" - consonant + @-: long // but NOT "hinanden" IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) THEN IF NOT next3PhW(n) THEN length 225 ENDIF ENDIF // ThisPh + V or @- // "ae", "aer" vowel + vowel: extra length IF nextPhW(@-) OR nextPhW(V) THEN length 260 ENDIF CALL LongVowelLength FMT(vowel/ee_2) endphoneme // Short & // e.g. the last a in "staldkarl" // "sale" vs. "sal" phoneme ?& ipa a vwl starttype #e endtype #e length 140 CALL ShortVowelLength FMT(vowel/ee_2) endphoneme // Added for the æ in "dræbt" phoneme &# vwl starttype #e endtype #e length 140 ipa a CALL LongVowelLength FMT(vowel/&) endphoneme // PB short &# // "revl" vs. "tremme" phoneme ?&# vwl starttype #e endtype #e ipa ?a length 140 CALL ShortVowelLength FMT(vowel/&) endphoneme phoneme A // PB changed to a_8 vwl starttype #a endtype #a ipa ɑ length 140 CALL LongVowelLength // "fare" [f'A:A] IF nextPhW(A) THEN length 225 ENDIF FMT(vowel/a_8) endphoneme // Short A // "krabbe" vs. "drabelig" phoneme ?A vwl starttype #a endtype #a ipa ?ɑ length 140 CALL ShortVowelLength FMT(vowel/a_8) endphoneme phoneme u vwl starttype #u endtype #u length 140 // "suge", "uge", "bluse", "julegave" IF nextPhW(@-) OR nextPhW(V) OR next2PhW(@-) OR next2PhW(V)THEN length 225 ENDIF IF NOT thisPh(isWordStart) THEN // NOT "undøvendig" CALL LongVowelLength ENDIF FMT(vowel/u_bck) endphoneme // Short u // "tude" vs. "tuden" - [tuD3] [t?uD@n] phoneme ?u vwl starttype #u endtype #u length 140 CALL ShortVowelLength FMT(vowel/u_bck) endphoneme phoneme o vwl starttype #o endtype #o length 140 // "kone", "koner" o + consonant + V or @- IF next2PhW(V) OR next2PhW(@-) THEN length 225 ENDIF CALL LongVowelLength FMT(vowel/o_2) endphoneme // PB Short o // "patron" vs. "kone" phoneme ?o vwl starttype #o endtype #o length 140 CALL ShortVowelLength FMT(vowel/o_2) endphoneme phoneme O vwl starttype #o endtype #o length 140 ipa ɒ // changed from ɔ - Den Danske Ordbog: ɒ // "såre", "sårede" [s'O:?OD@-] IF nextPhW(O) OR nextPhW(?O) THEN length 225 ENDIF CALL LongVowelLength FMT(vowel/o_5) endphoneme // Short O // "toget" vs. "tåget" phoneme ?O vwl starttype #o endtype #o ipa ɒ // changed from ɔ - Den Danske Ordbog: ɒ length 140 CALL ShortVowelLength FMT(vowel/o_5) endphoneme phoneme V vwl starttype #@ endtype #@ length 140 CALL LongVowelLength FMT(vowel/V_4) endphoneme // PB Short V // "forstår" vs. "kåre" phoneme ?V vwl starttype #@ endtype #@ length 140 CALL ShortVowelLength FMT(vowel/V_4) endphoneme phoneme 0 vwl starttype #o endtype #o length 140 ipa ɔ CALL LongVowelLength FMT(vowel/oo_2) endphoneme // Short 0 "sukker", "provst" phoneme ?0 vwl starttype #o endtype #o length 140 ipa ɔ CALL ShortVowelLength FMT(vowel/oo_2) endphoneme phoneme y vwl starttype #i endtype #i length 140 CALL LongVowelLength FMT(vowel/y) endphoneme // PB Short y // "kylling" vs. "kyle", "krybbe" vs. "krybe" phoneme ?y vwl starttype #i endtype #i length 140 CALL ShortVowelLength FMT(vowel/y) endphoneme phoneme Y vwl starttype #i endtype #i length 140 IF nextPhW(V) OR nextPhW(@-) THEN length 225 ENDIF CALL LongVowelLength FMT(vowel/yy) endphoneme phoneme W vwl starttype #@ endtype #@ length 140 CALL LongVowelLength FMT(vowel/oe) endphoneme // Short W // "prøv" vs. "prøve" phoneme ?W vwl starttype #@ endtype #@ length 140 CALL ShortVowelLength FMT(vowel/oe) endphoneme // Added for the ø in "røv", "røg", "øje" instead of [V3] phoneme W# vwl starttype #@ endtype #@ length 140 CALL LongVowelLength FMT(vowel/V) endphoneme // Short W# // "rømme" phoneme ?W# vwl starttype #@ endtype #@ length 140 CALL ShortVowelLength FMT(vowel/V) endphoneme phoneme aI vwl starttype #a endtype #i length 300 IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2Ph(@-) AND nextPhW(isNotVowel) THEN glstop length 225 ENDIF // "dreje" [dR'aI@-_!] IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN length 280 ENDIF // PB "drej" vs. "dreje" IF thisPh(isWordEnd) THEN length 140 ENDIF // "lejde" [l'aId@-_!], "lejder" [l'aIdV_!] IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN length 190 ENDIF FMT(vdiph/ai) endphoneme // CONSONANTS // PB added l/3 phoneme l liquid lengthmod 7 // [ll] => [-l] - avoid double l IF nextPhW(l) THEN // ChangePhoneme(NULL) ENDIF ChangePhoneme(l/3) // CALL base1/l endphoneme phoneme l/3 // Replacement for [l/] liquid lengthmod 7 length 80 FMT(l/l_) endphoneme phoneme v // approximant, not fricative import_phoneme base1/v# voicingswitch f endphoneme // PB Actually a kind of schwa = [ɐ]? - "byder" [bˈyðɐʌ] phoneme r // used for 'r' after a vowel (to create a diphthong) liquid lengthmod 7 ipa ɐ̯ IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN ChangePhoneme(R) ENDIF // "generer" [Sen'e:Vr], "mysterier" - delete the r IF prevPhW(V) OR prevPhW(?V) AND thisPh(isWordEnd) THEN ChangePhoneme(_!) ENDIF // "plamagers" [pl&m'&SVrs] - delete the r IF prevPhW(V) OR prevPhW(?V) AND nextPhW(s) AND nextPhW(isWordEnd) THEN ChangePhoneme(NULL) ENDIF // "plamagerne" [pl&m'&SVrn@-] - delete the r IF prevPhW(V) OR prevPhW(?V) AND nextPhW(n) AND next2PhW(@-) THEN ChangePhoneme(NULL) ENDIF // "kreaturer" [kR,?E?&t'ur?V] - delete the r // Previous vowel stressed by $alt rule IF nextPhW(V) OR nextPhW(?V) AND nextPh(isWordEnd) THEN IF prevPhW(isMaxStress) THEN ChangePhoneme(NULL) ENDIF ENDIF FMT(r/a_) endphoneme phoneme R lengthmod 6 liquid ipa ʁ FMT(r/aa) endphoneme // don't weaken consonants at end of word or before a stop phoneme s vls alv frc sib voicingswitch z lengthmod 3 Vowelin f1=0 f2=1700 -300 300 f3=-100 80 Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 IF nextPh(p) OR nextPh(t) OR nextPh(k) THEN WAV(ufric/s!) ENDIF WAV(ufric/s) endphoneme phoneme p vls blb stp voicingswitch b lengthmod 7 Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 IF nextPh(isPause2) THEN WAV(ustop/p_unasp) ELIF nextPh(r) THEN WAV(ustop/pr, 70) ELIF nextPh(R) OR nextPh(R2) THEN WAV(ustop/pr) ELIF nextPh(@-) THEN WAV(ustop/p_unasp) ELIF nextPh(l) THEN WAV(ustop/pl) ENDIF WAV(ustop/p) endphoneme phoneme t vls alv stp voicingswitch d lengthmod 7 Vowelin f1=0 f2=1700 -300 300 f3=-100 80 Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 IF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN WAV(ustop/tr) ENDIF // "respekt" [REsp'Egd] IF thisPh(isWordEnd) THEN // ChangePhoneme(d) ENDIF WAV(ustop/t, 90) endphoneme phoneme j liquid pal lengthmod 7 // no link with next vowel IF thisPh(isWordEnd) THEN IfNextVowelAppend(_!) ENDIF IF nextPhW(isVowel) THEN NextVowelStarts VowelStart(j/j@) // jøderne VowelStart(j/ja) VowelStart(j/je) VowelStart(j/ji) VowelStart(j/jo) // "kjole" VowelStart(j/ju) EndSwitch Vowelout len=70 VowelEnding(j/xj, -30) IF prevPh(isPause) THEN FMT(j/_j) ENDIF ELSE // no vowel follows Vowelout len=70 FMT(j/j_) ENDIF endphoneme