//******************************************************************* // VOWELS //******************************************************************* phoneme 3 CALL @ ipa ə endphoneme phoneme @ // Schwa vwl starttype #@ endtype #@ unstressed length 130 IfNextVowelAppend(r-) IF thisPh(isWordEnd) THEN FMT(vowel/@_6) ENDIF FMT(vowel/@_4) endphoneme phoneme @2 // Schwa, changes to I before a vowel vwl starttype #@ endtype #@ unstressed length 120 IF nextPh(isVowel) THEN ChangePhoneme(I2) ENDIF FMT(vowel/@_low2) endphoneme phoneme a vwl starttype #e endtype #@ ipa æ length 210 ChangeIfDiminished(a#) IF nextPh(m) OR nextPh(n) OR nextPh(g) OR nextPh(b) OR nextPh(d) OR nextPh(S) OR nextPh(f) OR nextPh(T) OR nextPh(s) THEN IF NOT next2Ph(isVowel) THEN ipa ɛə FMT(vwl_en_us_nyc/a_raised) ENDIF ELSEIF nextPh(r) AND thisPh(isStressed) THEN length 190 FMT(vwl_en_us/ar) ENDIF FMT(vwl_en_us_nyc/a) endphoneme phoneme aa // 'bath' etc. import_phoneme en-us-nyc/a endphoneme phoneme a# vwl starttype #@ endtype #@ ipa ɐ unstressed length 150 IF thisPh(isStressed) THEN ChangePhoneme(a) ENDIF IF nextPhW(r) THEN ChangePhoneme(3) ENDIF FMT(vowel/a#_3) endphoneme phoneme E vwl starttype #e endtype #e length 190 IF nextPhW(n) THEN ChangeIfDiminished(@) ELSE ChangeIfDiminished(I2) ENDIF FMT(vwl_en_us/ee) endphoneme phoneme I vwl starttype #i endtype #i length 160 IfNextVowelAppend(;) ChangeIfDiminished(I2) IF nextPhW(r) THEN length 200 ENDIF FMT(vowel/ii_4) endphoneme phoneme I2 vwl starttype #i endtype #i unstressed length 160 IfNextVowelAppend(;) FMT(vowel/ii#_3) endphoneme phoneme I# vwl starttype #i endtype #i unstressed length 160 ipa ᵻ // FMT(vowel/@_fnt) FMT(vowel/ii#) endphoneme phoneme I2# vwl starttype #i endtype #i unstressed ChangePhoneme(I#) endphoneme phoneme 0 vwl starttype #a endtype #a length 140 ChangeIfDiminished(@) IF nextPhW(r) AND next2PhW(isVowel) THEN ChangePhoneme(A:) ELIF nextPh(r) THEN ChangePhoneme(O:) ENDIF FMT(vowel/0) endphoneme phoneme 02 // becomes V in en-us vwl starttype #o endtype #o length 140 ChangePhoneme(V) endphoneme phoneme O2 vwl starttype #o endtype #o length 220 IF nextPhW(r) AND next2PhW(isVowel) THEN ChangePhoneme(A:) ENDIF FMT(vwl_en_us_nyc/0_3) endphoneme phoneme V vwl starttype #a endtype #@ length 170 ChangeIfDiminished(@) FMT(vowel/V_6) endphoneme phoneme U vwl starttype #o endtype #o length 145 FMT(vowel/8_2) endphoneme phoneme A: vwl starttype #a endtype #a length 220 IF nextPhW(r) THEN FMT(vwl_en_us/aar) ENDIF FMT(vwl_en_us_nyc/aa_8) endphoneme phoneme A@ vwl starttype #a endtype #a ipa ɑː length 230 IfNextVowelAppend(r-) FMT(vowel/aa_2) endphoneme phoneme A# // [a] in British [A:] in American vwl starttype #a endtype #a ChangePhoneme(A:) endphoneme phoneme 3: vwl starttype #@ endtype #i ipa əɪ length 210 IfNextVowelAppend(r-) ChangeIfDiminished(3) FMT(vwl_en_us_nyc/@i) endphoneme phoneme i: vwl starttype #i endtype #i length 180 IfNextVowelAppend(;) FMT(vowel/i_en) endphoneme phoneme O: vwl starttype #o endtype #@ length 220 ChangeIfDiminished(@) IF nextPhW(r) AND next2PhW(isVowel) THEN ChangePhoneme(A:) ENDIF IF nextPhW(r) THEN FMT(vwl_en_us/oor) ENDIF FMT(vwl_en_us_nyc/0_3) endphoneme phoneme O@ vwl starttype #o endtype #@ length 240 ipa ɔː IfNextVowelAppend(r) FMT(vowel/oo_en) endphoneme phoneme o@ vwl starttype #o endtype #o length 250 ipa ɔː IfNextVowelAppend(r) FMT(vowel/oo_en) endphoneme phoneme O vwl starttype #o endtype #o length 200 ChangeIfDiminished(@) IF nextPhW(r) AND next2PhW(isVowel) THEN ChangePhoneme(A:) ENDIF FMT(vwl_en_us_nyc/0_3) endphoneme phoneme u: vwl starttype #u endtype #u length 190 IF prevPhW(j) AND NOT thisPh(isWordEnd) THEN length 160 ENDIF FMT(vdiph2/uw_6) endphoneme phoneme aU vwl starttype #a endtype #o length 235 FMT(vdiph/aoo) endphoneme phoneme oU vwl starttype #@ endtype #u length 230 FMT(vdiph/8u) endphoneme phoneme aI vwl starttype #a endtype #i length 240 IF nextPh(#a) OR nextPh(#o) THEN AppendPhoneme(;) ENDIF FMT(vwl_en_us/ai) endphoneme phoneme eI vwl starttype #e endtype #i length 220 FMT(vdiph2/ei_4) endphoneme phoneme OI vwl starttype #o endtype #i length 270 FMT(vdiph/oi) endphoneme phoneme e@ vwl starttype #e endtype #@ length 230 IfNextVowelAppend(r-) FMT(vowel/ee_1) endphoneme phoneme i vwl starttype #i endtype #i unstressed ipa i length 170 IfNextVowelAppend(;) IF NOT thisPh(isFinalVowel) THEN length 130 FMT(vowel/ii_4) ENDIF FMT(vowel/ii_final) endphoneme phoneme i@ vwl starttype #i endtype #@ length 250 FMT(vdiph2/ii@) // don't append [r] before a vowel endphoneme phoneme i@3 vwl starttype #i endtype #@ length 250 IF MbrolaSynth THEN ChangePhoneme(i@) ENDIF IfNextVowelAppend(r-) FMT(vdiph2/ii@) endphoneme phoneme U@ vwl starttype #u endtype #@ length 200 IfNextVowelAppend(r-) IF thisPh(isUnstressed) THEN FMT(vdiph2/8@) ENDIF FMT(vdiph2/uu@) endphoneme phoneme aI@ vwl starttype #a endtype #@ length 300 ipa aɪə IfNextVowelAppend(r-) FMT(vwl_en_us/ai@) endphoneme phoneme aI3 vwl starttype #a endtype #@ length 280 ChangePhoneme(aI@) endphoneme phoneme aU@ // h**our** vwl starttype #a endtype #@ length 280 IfNextVowelAppend(r-) FMT(vwl_en/aU@) endphoneme //============== // Consonants //============== phoneme h vls glt apr lengthmod 3 ipa h IF nextPh(j) THEN ChangePhoneme(NULL) // drop "h" for "human", "huge", etc. ELIF nextPh(#@) THEN WAV(h/h@) ELIF nextPh(#a) THEN WAV(h/ha) ELIF nextPh(#e) THEN WAV(h/he) ELIF nextPh(#i) THEN WAV(h/hi) ELIF nextPh(#o) THEN WAV(h/ho) ELIF nextPh(#u) THEN WAV(h/hu) ENDIF WAV(h/h_, 70) // no vowel following endphoneme phoneme r/ // used for [r] when not preceding a vowel liquid lengthmod 2 // // formants NULL endphoneme phoneme t# // reduced [t] as in "city" vcd alv stp ipa ɾ lengthmod 5 Vowelin f1=1 f2=1700 -300 300 f3=-100 80 Vowelout f1=2 f2=1700 -300 300 f3=-100 80 IF nextPh(isNotVowel) THEN ChangePhoneme(t) ENDIF IF KlattSynth THEN IF PreVoicing THEN FMT(klatt/x_tap) ENDIF FMT(klatt/tap2) addWav(x/d, 70) ENDIF IF PreVoicing THEN FMT(d/x_tap) ENDIF FMT(d/tap2) addWav(x/d, 50) endphoneme phoneme t vls alv stp voicingswitch d lengthmod 2 Vowelin f1=0 f2=1700 -300 300 f3=-100 80 Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 IF nextPhW(isVowel) AND nextPh(isUnstressed) THEN IF NOT next2PhW(n) OR nextPhW(3:) THEN IF prevPhW(isVowel) THEN ChangePhoneme(t#) ELIF prevPhW(n) THEN WAV(ustop/t_hi, 60) ENDIF ENDIF ENDIF IF nextPh(isPause2) THEN WAV(ustop/t_dnt) ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN WAV(ustop/tr) ELIF nextPh(@-) THEN WAV(ustop/t_hi, 50) ENDIF WAV(ustop/t_dnt, 90) endphoneme phoneme d CALL d[ endphoneme phoneme t2 // [t] which doesn't reduce import_phoneme base1/t endphoneme phoneme ? // glottal stp vls glt stp lengthmod 1 // 5? longer preceding vowel nolink Vowelin glstop Vowelout glstop WAV(ustop/null) endphoneme phoneme l/2 // 'dark' [l] after a vowel liquid lengthmod 7 CALL vowelstart_l IF prevPhW(j) THEN FMT(l/L2_eL) ENDIF IF prevPhW(w) THEN FMT(l/L2_uL) ENDIF PrevVowelEndings VowelEnding(l/L2_@L, -60) VowelEnding(l/L2_aL, -50) VowelEnding(l/L2_eL, -40) VowelEnding(l/L2_iL, -30) VowelEnding(l/L2_oL, -50) VowelEnding(l/L2_uL, -40) EndSwitch endphoneme