123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945 |
- // 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
|