//==================================================== // French //==================================================== // Updated 2010-04-01 Michel Such phoneme #l virtual // Used for l and l/ endphoneme phoneme #r virtual // Used for r and r/2 endphoneme phoneme : // Lengthen previous vowel by "length" virtual length 40 // shorter than for fr-ca endphoneme procedure pre_post_r IF prevPh(isVowel) THEN VowelEnding(vwl_fr/xr) ENDIF IF nextPhW(isFinalVowel) OR next2Ph(isFinalVowel) THEN NextVowelStarts VowelStart(vwl_fr/r@, -10) VowelStart(vwl_fr/ra, -15) VowelStart(vwl_fr/re, -10) VowelStart(vwl_fr/ri, -20) VowelStart(vwl_fr/ro, -10) VowelStart(vwl_fr/ru, -10) EndSwitch ELSE NextVowelStarts VowelStart(vwl_fr/r@) VowelStart(vwl_fr/ra) VowelStart(vwl_fr/re) VowelStart(vwl_fr/ri) VowelStart(vwl_fr/ro) VowelStart(vwl_fr/ru) EndSwitch ENDIF endprocedure phoneme r liquid rhotic uvl starttype #r endtype #r lengthmod 7 IF nextPh(isNotVowel) THEN ChangePhoneme(r/2) ENDIF CALL pre_post_r IF thisPh(isWordStart) OR prevPhW(r/2) THEN Vowelout len=50 FMT(vwl_fr/_r, -30) ELIF prevPhW(g) OR prevPhW(k) OR prevPhW(p) THEN FMT(vwl_fr/tr, -40) ELIF prevPhW(d) OR prevPhW(t) THEN FMT(vwl_fr/tr, -30) ELIF prevPhW(f) OR prevPhW(v) OR prevPhW(S) THEN FMT(vwl_fr/tr, -30) ELIF prevPhW(b) THEN FMT(vwl_fr/tr, -20) ENDIF FMT(vwl_fr/r) endphoneme phoneme r2 // silent unless followed by vowel liquid rhotic uvl starttype #r endtype #r lengthmod 7 Vowelin f1=0 f2=1600 -300 300 f3=-200 80 Vowelout f1=2 f2=1600 -300 300 f3=-300 80 IF nextPh(isNotVowel) THEN ChangePhoneme(NULL) ENDIF CALL pre_post_r FMT(vwl_fr/r) endphoneme phoneme r/2 // variant of [r] when not preceding a vowel liquid rhotic vel starttype #r endtype #r Vowelout f1=2 f2=1600 -300 300 f3=-300 100 len=40 lengthmod 2 PrevVowelEndings VowelEnding(vwl_fr/r_@) VowelEnding(vwl_fr/r_a) VowelEnding(vwl_fr/r_e) VowelEnding(vwl_fr/r_i) VowelEnding(vwl_fr/r_o) VowelEnding(vwl_fr/r_u) EndSwitch IF prevPh(isVowel) THEN IF nextPh(isPause) THEN FMT(vwl_fr/r_2) addWav(r3/rx, 20) ELSE FMT(vwl_fr/r_, -30) addWav(r3/rx, 20) ENDIF ENDIF IF thisPh(isWordEnd) THEN IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN FMT(vwl_fr/trr) addWav(r3/rx, 15) ELIF prevPhW(v) THEN FMT(vwl_fr/r_, -40) ELIF prevPhW(f) THEN FMT(vwl_fr/r_, -10) addWav(r3/rx, 15) ELIF prevPhW(d) THEN FMT(vwl_fr/r_) addWav(r3/rx, 15) ENDIF FMT(vwl_fr/r_) addWav(r3/rx, 15) ENDIF FMT(vwl_fr/r_) endphoneme phoneme l liquid starttype #l endtype #l lengthmod 7 IF nextPh(isNotVowel) THEN ChangePhoneme(l/) ENDIF NextVowelStarts VowelStart(l/l@) VowelStart(l/la, -10) VowelStart(l/le, -15) VowelStart(l/li, -15) VowelStart(l/lo, -10) VowelStart(l/lu, -20) EndSwitch IF prevPh(#@) THEN VowelEnding(l/xl, -50) ELIF prevPh(isVowel) THEN VowelEnding(l/xl, -40) ENDIF IF prevPh(isPause) OR thisPh(isWordStart) THEN VowelEnding(NULL) FMT(l/_l) ENDIF IF prevPh(r/2) THEN FMT(l/_l) ENDIF IF prevPh(t) THEN FMT(l/tl) ENDIF IF prevPh(l/) THEN FMT(l/l_long) // double l, make it longer ENDIF FMT(l/l) endphoneme phoneme l/ // used for [l] when not before a vowel liquid starttype #l endtype #l lengthmod 7 IF nextPh(isVowel) THEN ChangePhoneme(l) ENDIF PrevVowelEndings VowelEnding(l/l_@) VowelEnding(l/l_a) VowelEnding(l/l_e) VowelEnding(l/l_i) VowelEnding(l/l_o) VowelEnding(l/l_u) EndSwitch IF prevPh(#r) THEN FMT(l/_l) ENDIF FMT(l/l_) endphoneme // Vowels //======= phoneme @ vowel starttype #@ endtype #@ length 170 FMT(vowel/@_hgh) endphoneme phoneme @2 vowel starttype #@ endtype #@ length 160 FMT(vowel/@_fr) endphoneme phoneme a vowel starttype #a endtype #a length 170 IF prevPh(l) THEN VowelStart(l/la, -15) ENDIF IF prevPhW(w) OR prevPhW(w/) THEN FMT(vowel/a_5) ENDIF FMT(vowel/a_6) endphoneme phoneme e vowel starttype #e endtype #e length 170 IF nextPh(l/) THEN VowelEnding(l/xl, -20) ENDIF IF nextPh(isVowel) THEN length 200 ENDIF FMT(vowel/e_8) endphoneme phoneme E vowel starttype #e endtype #e length 170 IF nextPh(r/2) THEN VowelEnding(vwl_fr/r_e2) ENDIF IF nextPhW(j) THEN length 190 ENDIF FMT(vowel/e_mid) endphoneme phoneme E2 // Between e and E vowel starttype #e endtype #e length 170 FMT(vowel/e_9) endphoneme phoneme i vowel starttype #i endtype #i length 160 IfNextVowelAppend(;) FMT(vowel/i_2) endphoneme phoneme i- // shorter vowel starttype #i endtype #i length 110 FMT(vowel/i_2) endphoneme phoneme i: // longer than i vowel starttype #i endtype #i length 240 IfNextVowelAppend(;) FMT(vowel/i_3) endphoneme phoneme o vowel starttype #o endtype #o length 170 IF thisPh(isFinalVowel) THEN IF thisPh(isWordEnd) THEN FMT(vowel/o_8) ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN FMT(vowel/o_8) ELSE ChangePhoneme(O) ENDIF ELSE IF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN ChangePhoneme(O) ELIF nextPhW(isNasal) AND next2Ph(isNotVowel) THEN ChangePhoneme(O) ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN ChangePhoneme(O) ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN ChangePhoneme(O) ELSE FMT(vowel/o) ENDIF ENDIF endphoneme phoneme o2 vowel starttype #o endtype #o length 170 IF nextPh(l/) THEN VowelEnding(l/l_o) ENDIF IF thisPh(isFinalVowel) THEN FMT(vowel/o_8) ELSE FMT(vowel/o) ENDIF endphoneme phoneme O vowel starttype #o endtype #o length 180 IF prevPhW(#r) THEN VowelStart(vwl_fr/ro2) ENDIF IF nextPhW(r/2) THEN VowelEnding(vwl_fr/r_o2) ENDIF FMT(vowel/o_mid2) endphoneme phoneme o3 // almost like english oU vowel starttype #@ endtype #u length 220 FMT(vdiph/@u_3) endphoneme phoneme u vowel starttype #u endtype #u length 180 FMT(vowel/u_bck2) endphoneme phoneme u: // slitely longer than u vowel starttype #u endtype #u length 240 FMT(vowel/u_bck2) endphoneme phoneme y vowel starttype #u endtype #u length 170 IF nextPh(l/) THEN VowelEnding(l/l_y, -30) ENDIF IF prevPh(#r) THEN IF thisPh(isFinalVowel) THEN VowelStart(vwl_fr/ry, -10) ELSE VowelStart(vwl_fr/ry) ENDIF ENDIF IF nextPh(r/2) THEN VowelEnding(vwl_fr/r_y) ENDIF IF nextPhW(E~) THEN FMT(vowel/y_2, -30) ENDIF FMT(vowel/y_2) endphoneme phoneme W vowel starttype #@ endtype #@ length 180 IF prevPh(l) THEN VowelStart(l/l@, -20) ENDIF IF nextPh(l/) THEN VowelEnding(l/l_@, -20) ENDIF FMT(vowel/@) endphoneme phoneme Y vowel starttype #@ endtype #@ length 170 IF prevPh(l) THEN VowelStart(l/l@, -20) ENDIF IF nextPh(l/) THEN VowelEnding(l/l_@, -20) ENDIF IF thisPh(isFinalVowel) THEN IF thisPh(isWordEnd) THEN FMT(vowel/y#) ELIF nextPh(z2) OR nextPh(t2) THEN FMT(vowel/y#) ELSE ChangePhoneme(W) ENDIF ELSE IF nextPhW(isNotVowel) AND next2Ph(isLiquid) THEN FMT(vowel/y#) ELIF nextPhW(isNotVowel) AND next2Ph(isNotVowel) THEN ChangePhoneme(W) ELSE FMT(vowel/y#) ENDIF ENDIF endphoneme phoneme w vowel starttype #u endtype #u IF prevPhW(#r) OR prevPhW(#l) THEN NextVowelStarts VowelStart(w/w@) VowelStart(w/wa, -10) VowelStart(w/we) VowelStart(w/wi) VowelStart(w/wo) VowelStart(w/wu) EndSwitch ELSE ChangePhoneme(w/) ENDIF endphoneme phoneme w/ import_phoneme base/w endphoneme phoneme w^i vowel starttype #u endtype #i length 240 IF prevPhW(l) THEN VowelStart(l/lu, -20) ENDIF IF prevPhW(#r) THEN VowelStart(vwl_fr/ry) ENDIF FMT(vdiph/yi_fr) endphoneme phoneme A~ vowel starttype #a endtype #a length 190 IF nextPh(r/2) THEN VowelEnding(vwl_fr/r_an) ENDIF IF prevPhW(#r) THEN IF thisPh(isFinalVowel) THEN VowelStart(vwl_fr/raa, -15) ELSE VowelStart(vwl_fr/raa, -10) ENDIF ENDIF FMT(vnasal/aa_n4) endphoneme phoneme E~ // same as W~ for fr-fr vowel starttype #e endtype #e length 190 IF nextPh(n2) THEN FMT(vowel/e_mid) ENDIF FMT(vnasal/W_n) endphoneme phoneme O~ vowel starttype #o endtype #o length 190 FMT(vnasal/o_n2) endphoneme phoneme W~ vowel starttype #@ endtype #@ length 190 FMT(vnasal/W_n) endphoneme // These vowels map to others in fr-fr, but are distinct in fr-ca phoneme I // same as [i] import_phoneme fr/i endphoneme phoneme U // same as [u] import_phoneme fr/u endphoneme phoneme y" // same as [y] import_phoneme fr/y endphoneme phoneme E: // slightly longer than [E] import_phoneme E endphoneme phoneme A // same as [a] import_phoneme a endphoneme // CONSONANTS //=========== // uses the consonants in file "phonemes", unless overridden here phoneme b vcd blb stop voicingswitch p lengthmod 5 Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk IF KlattSynth THEN Vowelin f1=1 f2=1000 -500 -300 f3=-300 80 IF nextPh(isPause2) THEN FMT(klatt/b) addWav(x/b_) ENDIF FMT(klatt/b) addWav(x/b) ENDIF IF PreVoicing THEN FMT(b/xb) ENDIF IF nextPh(isPause2) OR nextPh(#l) THEN FMT(b/b_) addWav(x/b_) ENDIF FMT(b/b) addWav(x/b, 70) endphoneme phoneme d vcd alv stop voicingswitch t lengthmod 5 Vowelin f1=0 f2=1700 -300 300 f3=-100 80 amp=20 Vowelout f1=0 f2=1700 -300 300 f3=-100 80 IF PreVoicing THEN FMT(d/xd) ENDIF IF nextPh(isPause2) OR nextPh(isPause) THEN FMT(d/d_) addWav(x/d_, 50) ELIF nextPh(#r) THEN FMT(d/dr) addWav(x/d, 30) ELIF prevPh(isPause) THEN FMT(d/d) addWav(x/d, 50) ENDIF FMT(d/d) addWav(x/d, 40) endphoneme phoneme g vcd vel stop voicingswitch k lengthmod 5 Vowelin f1=2 f2=2300 200 300 f3=-300 80 Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk IF PreVoicing THEN FMT(g/xg) ENDIF IF nextPh(isPause2) THEN FMT(g/g_) addWav(x/g_) ENDIF FMT(g/g) addWav(x/g, 20) endphoneme phoneme k vls vel stop voicingswitch g length 50 lengthmod 2 Vowelin f1=0 f2=2300 200 400 f3=-100 80 Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 IF nextPh(isPause2) THEN WAV(ustop/k_) ELIF nextPh(#i) OR nextPh(;) THEN WAV(ustop/ki, 45) ELIF nextPh(#l) THEN WAV(ustop/kl, 40) ENDIF WAV(ustop/k, 35) endphoneme phoneme n2 vcd alv nasal IF nextPh(w) OR nextPh(isVowel) THEN ChangePhoneme(n) ELSE ChangePhoneme(NULL) ENDIF endphoneme phoneme p vls blb stop voicingswitch b lengthmod 2 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_, 70) ELIF nextPh(@-) THEN WAV(ustop/p_unasp, 60) ELIF nextPh(#l) THEN WAV(ustop/pl, 30) ENDIF WAV(ustop/p_unasp_, 90) endphoneme phoneme p2 // silent unless followed by vowel vls blb stop lengthmod 2 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(isNotVowel) THEN ChangePhoneme(NULL) ENDIF WAV(ustop/p, 45) endphoneme phoneme s vls alv frc sibilant 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(isPause) THEN WAV(ufric/s_, 45) ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN WAV(ufric/s!, 45) ENDIF WAV(ufric/s, 45) endphoneme phoneme S vls pla frc sibilant voicingswitch Z lengthmod 3 Vowelin f1=0 f2=1900 100 300 f3=-100 80 Vowelout f1=0 f2=1900 100 300 f3=-100 80 IF prevPhW(t) THEN length 60 ENDIF IF nextPh(isPause) THEN WAV(ufric/sh_, 45) ENDIF WAV(ufric/sh, 45) endphoneme phoneme t vls alv stop voicingswitch d lengthmod 2 Vowelin f1=0 f2=1600 -300 300 f3=-100 80 Vowelout f1=0 f2=1600 -300 250 f3=-100 80 brk IF nextPh(isPause2) THEN WAV(ustop/t_, 40) ELIF nextPh(r/2) THEN WAV(ustop/t_short, 50) ENDIF WAV(ustop/t_short, 40) endphoneme phoneme t2 // silent unless followed by vowel vls alv stop Vowelin f1=0 f2=1600 -300 300 f3=-100 80 Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 IF nextPh(isVowel) OR nextPh(w) THEN WAV(ustop/t_short, 30) ELSE ChangePhoneme(NULL) ENDIF endphoneme phoneme t3 // silent unless followed by vowel or pause vls alv stop lengthmod 2 IF nextPh(isPause) THEN ChangePhoneme(t) ELIF nextPh(isNotVowel) THEN ChangePhoneme(NULL) ELSE ChangePhoneme(t2) ENDIF endphoneme phoneme v vcd lbd frc voicingswitch f lengthmod 6 length 90 Vowelin f1=0 f2=1000 -300 -200 f3=-300 100 Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 IF KlattSynth THEN CALL base/v RETURN ENDIF IF nextPh(isPause2) THEN FMT(voc/v_) addWav(vocw/v) ENDIF IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN Length 70 ELIF nextPhW(w) THEN Length 50 ENDIF FMT(voc/v) addWav(vocw/v, 60) endphoneme phoneme z vcd alv frc sibilant voicingswitch s lengthmod 6 Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 IF nextPhW(z) THEN FMT(d/xd) ENDIF IF nextPh(isPause2) OR nextPh(isPause) THEN FMT(voc/z_) addWav(ufric/s_, 45) ENDIF IF prevPhW(t) THEN length 60 ENDIF FMT(voc/z) addWav(ufric/s_, 45) endphoneme phoneme z2 // silent unless followed by vowel vcd alv frc sibilant IF nextPh(isVowel) OR nextPh(w/) THEN FMT(voc/z_, -20) addWav(ufric/s_, 40) ELSE ChangePhoneme(NULL) ENDIF endphoneme phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else [] vcd alv frc sibilant IF nextPh(isPause) THEN ChangePhoneme(s) ELIF nextPh(isVowel) OR nextPh(w/) THEN ChangePhoneme(z) ELSE ChangePhoneme(NULL) ENDIF endphoneme