//==================================================== // French //==================================================== // Updated 2010-02-13 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 phoneme r liquid rhotic uvl lengthmod 7 starttype #r endtype #r IF nextPh(isNotVowel) THEN ChangePhoneme(r/2) ENDIF VowelEnding(vwl_fr/xr) NextVowelStarts VowelStart(vwl_fr/r@) VowelStart(NULL) VowelStart(vwl_fr/re) VowelStart(vwl_fr/ri) VowelStart(vwl_fr/ro) VowelStart(vwl_fr/ru) EndSwitch IF prevPh(isPause) OR prevPhW(r/2) THEN FMT(vwl_fr/_r) ELIF prevPhW(p) OR prevPhW(k) THEN FMT(vwl_fr/tr) ELIF prevPhW(t) THEN FMT(vwl_fr/tr) addWav(r3/rx,30) ENDIF IF thisPh(isWordStart) THEN IF prevPh(isVowel) OR prevPh(isPause) OR prevPh(#l) OR prevPh(r/2) THEN FMT(vwl_fr/_r) ENDIF FMT(vwl_fr/_r2) addWav(r3/rx, 15) ENDIF FMT(vwl_fr/r) addWav(r3/rx,25) 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 FMT(vwl_fr/r) endphoneme phoneme r/2 // variant of [r] when not preceding a vowel liquid uvl starttype #r endtype #r Vowelout f1=2 f2=1600 -300 300 f3=-300 100 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 FMT(vwl_fr/r_) addWav(r3/rx, 30) ELIF prevPh(m) OR prevPh(n) THEN FMT(r3/r_n) ENDIF FMT(vwl_fr/r_) endphoneme phoneme l liquid 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) THEN 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 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, -20) EndSwitch IF prevPh(i) 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 prevPh(#r) THEN VowelStart(vwl_fr/ra) ENDIF FMT(vowel/a_6) endphoneme phoneme e vowel starttype #e endtype #e length 170 IF nextPh(l/) THEN VowelEnding(l/xl, -20) ENDIF FMT(vowel/e_8) endphoneme phoneme E vowel starttype #e endtype #e length 170 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 ChangeIfUnstressed(o2) IF nextPh(r/2) THEN VowelEnding(vwl_fr/r_o) FMT(vowel/o_mid2) ENDIF FMT(vowel/o_8) endphoneme phoneme o2 vowel starttype #o endtype #o length 170 IF nextPh(r/2) THEN VowelEnding(vwl_fr/r_o) FMT(vowel/o_mid2) ENDIF IF nextPh(l/) THEN VowelEnding(l/l_o) FMT(vowel/o_mid2) ENDIF FMT(vowel/o) endphoneme phoneme O vowel starttype #o endtype #o length 170 ChangeIfUnstressed(o2) FMT(vowel/o_mid2) endphoneme phoneme O2 // Like O but no reduceto vowel starttype #o endtype #o length 170 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 170 IF nextPh(i) THEN Length 50 ENDIF 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 nextPh(r/2) THEN VowelEnding(vwl_fr/r_y) ENDIF IF nextPh(E~) THEN Length 120 ENDIF FMT(vowel/y_2) endphoneme phoneme Y vowel starttype #@ endtype #@ length 170 ChangeIfUnstressed(W) IF prevPh(l) THEN VowelStart(l/l@, -20) ENDIF IF nextPh(l/) THEN VowelEnding(l/l_@, -20) ENDIF FMT(vowel/y#) 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 wA vowel starttype #o endtype #a length 220 IF nextPh(l/) THEN VowelEnding(l/l_a) ENDIF IF nextPh(j) THEN VowelEnding(NULL) ENDIF FMT(vwl_fr/w_a) endphoneme phoneme w^i vowel starttype #u endtype #i length 240 IF prevPh(l) THEN VowelStart(l/lu, -20) ENDIF IF prevPh(#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 prevPh(#r) THEN VowelStart(vwl_fr/raa) 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 CALL base/b RETURN ENDIF IF PreVoicing THEN FMT(b/xb, 50) 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) THEN FMT(d/d_) addWav(x/d_, 50) ELIF nextPh(#r) THEN FMT(d/dr) addWav(x/d, 50) 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 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(#r) THEN WAV(ustop/k, 50) ELIF nextPh(#i) OR nextPh(;) THEN WAV(ustop/ki, 45) ELIF nextPh(#l) THEN WAV(ustop/kl, 45) ENDIF WAV(ustop/k, 40) endphoneme phoneme n2 vcd alv nasal IF nextPh(isNotVowel) THEN ChangePhoneme(NULL) ENDIF ChangePhoneme(n) 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 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(isNotVowel) THEN ChangePhoneme(NULL) ENDIF WAV(ustop/t_short, 30) 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 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 ENDIF FMT(voc/v) addWav(vocw/v, 75) endphoneme phoneme z vcd alv frc sibilant voicingswitch s lengthmod 6 Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 IF nextPh(isPause2) THEN FMT(voc/z_) addWav(ufric/s_, 45) ENDIF FMT(voc/z) addWav(ufric/s_, 45) endphoneme phoneme z2 // silent unless followed by vowel vcd alv frc sibilant IF nextPh(isVowel) THEN ChangePhoneme(z) 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) THEN ChangePhoneme(z) ELSE ChangePhoneme(NULL) ENDIF endphoneme