Files
espeak-ng/phsource/ph_french
T
jonsd ebf0535e6d [1.43.57]
Indicate language changes in IPA phoneme output.

Phoneme definitions FMT(), second parameter is amplitude percentage.

Phoneme definitions CALL(),  If phoneme type is not defined, copy the static attributes from the called phoneme.

Unpronouncable word check: stop when an apostrophe is reached.


git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@250 d46cf337-b52f-0410-862d-fd96e6ae7743
2010-07-18 22:43:04 +00:00

899 lines
15 KiB
Plaintext

//====================================================
// French
//====================================================
// Updated 2010-07-16 Michel Such <michel.such@free.fr>
phoneme #l virtual
// Used for l and l/
endphoneme
phoneme #r virtual
// Used for "r" sounds
endphoneme
phoneme : // Lengthen previous vowel by "length"
virtual
length 40 // shorter than for fr-ca
endphoneme
phoneme #cFR virtual
// To identify "b k d f g p t v" when before "r"
endphoneme
procedure pre_r
IF prevPh(y) THEN
VowelEnding(vwl_fr/y2r)
ELIF prevPh(E) OR prevPh(E2) THEN
VowelEnding(vwl_fr/e_2r)
ELIF prevPh(A~) THEN
VowelEnding(vwl_fr/aa2r)
ELIF prevPh(E~) OR prevPh(W~) THEN
VowelEnding(vwl_fr/ee2r)
ELIF prevPh(O~) THEN
VowelEnding(vwl_fr/oo2r)
ELIF prevPh(isVowel) THEN
PrevVowelEndings
VowelEnding(vwl_fr/@2r)
VowelEnding(vwl_fr/a2r)
VowelEnding(vwl_fr/e2r)
VowelEnding(vwl_fr/i2r)
VowelEnding(vwl_fr/o2r)
VowelEnding(vwl_fr/u2r)
EndSwitch
ENDIF
endprocedure
procedure post_r
IF nextPh(E) OR nextPh(E2) THEN
VowelStart(vwl_fr/re2)
ELIF nextPh(W) THEN
VowelStart(vwl_fr/r@2)
ELIF nextPh(A~) THEN
VowelStart(vwl_fr/raa)
ELIF nextPh(E~) OR nextPh(W~) THEN
VowelStart(vwl_fr/ree)
ELIF nextPh(y) THEN
VowelStart(vwl_fr/ry)
ELIF nextPh(w) THEN
VowelStart(vwl_fr/rw)
ELIF nextPh(O~) THEN
VowelStart(vwl_fr/roo)
ELIF nextPh(j) OR nextPh(j/) THEN
VowelStart(vwl_fr/rj)
ELIF nextPh(isVowel) THEN
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
vcd uvl frc nopause
rhotic
starttype #r endtype #r
Vowelin f1=0 f2=1500 -400 400 f3=-400 80
lengthmod 7
ipa U+0281
IF nextPh(isNotVowel) THEN
ChangePhoneme(r/)
ELIF prevPh(isNotVowel) OR prevPh(isPause) THEN
ChangePhoneme(r/2)
ENDIF
CALL pre_r
CALL post_r
FMT(vwl_fr/r)
endphoneme
phoneme r2 // silent unless followed by vowel
vcd uvl frc
rhotic
starttype #r endtype #r
ipa U+0281
IF nextPh(isNotVowel) THEN
ChangePhoneme(NULL)
ELSE
ChangePhoneme(r)
ENDIF
endphoneme
phoneme r/ // variant of [r] when not preceding a vowel
vcd uvl frc
rhotic
starttype #r endtype #r
lengthmod 7
ipa U+0281
IF prevPhW(t) OR prevPhW(p) OR prevPhW(k) THEN
FMT(vwl_fr/trr) addWav(r3/rx, 15)
ELIF prevPh(isNotVowel) THEN
FMT(vwl_fr/rr) addWav(r3/rx, 15)
ENDIF
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(y) THEN
VowelEnding(vwl_fr/r_y)
ENDIF
IF nextPh(isNasal) THEN
FMT(vwl_fr/r_n) addWav(r3/rx, 20)
ELIF nextPh(#r) THEN
length 30
ENDIF
FMT(vwl_fr/r_) addWav(r3/rx, 20)
endphoneme
phoneme r/2
liquid rhotic uvl nopause
starttype #r endtype #r
Vowelin f1=0 f2=1500 -400 400 f3=-400 80
ipa U+0281
CALL post_r
IF prevPhW(f) OR prevPhW(k) OR prevPhW(p) OR prevPhW(s) OR prevPhW(t) OR prevPhW(S) THEN
FMT(vwl_fr/tr)
ELIF prevPhW(#cFR) THEN
FMT(vwl_fr/br)
ELSE
length 80
FMT(vwl_fr/r)
ENDIF
endphoneme
phoneme l
liquid
starttype #l endtype #l
lengthmod 7
IF nextPh(isNotVowel) THEN
ChangePhoneme(l/)
ELIF prevPhW(#cFR) THEN
ChangePhoneme(l/2)
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
FMT(l/_l)
ENDIF
IF prevPh(isRhotic) 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
IF prevPhW(y) THEN
VowelEnding(l/l_y)
ELIF prevPhW(isVowel) THEN
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
ENDIF
IF prevPh(#r) THEN
FMT(l/_l)
ENDIF
FMT(l/l_)
endphoneme
phoneme l/2
liquid
starttype #l endtype #l
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(t) THEN
FMT(l/tl)
ENDIF
FMT(l/l)
endphoneme
// Vowels
//=======
phoneme @
vowel starttype #@ endtype #@
length 170
FMT(vowel/@_hgh)
endphoneme
phoneme a
vowel starttype #a endtype #a
IF nextPh(isVowel) THEN
length 220
ELSE
length 170
ENDIF
FMT(vowel/a_7, 85)
endphoneme
phoneme e
vowel starttype #e endtype #e
IF nextPh(l/) THEN
VowelEnding(l/xl, -20)
ELIF nextPh(isVowel) THEN
length 200
ELSE
length 170
ENDIF
FMT(vowel/e_8)
endphoneme
phoneme E
vowel starttype #e endtype #e
IF nextPhW(j) THEN
length 190
ELSE
length 170
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
palatal
IF prevPhW(r/2) OR prevPhW(l/2) THEN
IF nextPhW(isVowel) THEN
length 240
ENDIF
ELIF prevPhW(#r) AND nextPhW(isVowel) THEN
IF nextPhW(#i) THEN
length 220
IfNextVowelAppend(;)
ELSE
ChangePhoneme(j/)
ENDIF
ELIF nextPhW(isVowel) THEN
ChangePhoneme(j)
ELSE
length 160
IfNextVowelAppend(;)
ENDIF
FMT(vowel/i_8)
endphoneme
phoneme I // longer than i
vowel starttype #i endtype #i
palatal
length 240
ipa i
IfNextVowelAppend(;)
FMT(vowel/i_3)
endphoneme
phoneme j/ // Short "i" between "r" and a vowel
vowel starttype #i endtype #i
length 100
// unstressed
NextVowelStarts
VowelStart(j/j@)
VowelStart(j/ja)
VowelStart(j/je)
VowelStart(j/ji)
VowelStart(j/jo)
VowelStart(j/ju)
EndSwitch
FMT(vwl_fr/j)
endphoneme
phoneme o
vowel starttype #o endtype #o
IF nextPh(isVowel) THEN
length 220
ELSE
length 170
ENDIF
IF thisPh(isFinalVowel) THEN
FMT(vowel/o_8)
ELSE
FMT(vowel/o)
ENDIF
endphoneme
phoneme O
vowel starttype #o endtype #o
length 170
IF nextPhW(z) OR nextPhW(z2) OR nextPhW(z3) THEN
ChangePhoneme(o)
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
IF nextPh(isVowel) OR nextPh(j) THEN
length 220
ELSE
length 180
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
IF nextPhW(E~) OR nextPhW(#i) THEN
length 110
FMT(vowel/y)
ENDIF
length 180
FMT(vowel/y)
endphoneme
phoneme W
vowel starttype #@ endtype #@
length 180
FMT(vowel/@_6)
endphoneme
phoneme Y
vowel starttype #@ endtype #@
length 170
FMT(vowel/y#)
endphoneme
phoneme w
vowel starttype #u endtype #u
IF prevPh(#r) OR prevPhW(#l) THEN
NextVowelStarts
VowelStart(w/w@)
VowelStart(vwl_fr/wa)
VowelStart(w/we)
VowelStart(w/wi)
VowelStart(w/wo)
VowelStart(w/wu)
EndSwitch
ELSE
ChangePhoneme(w/)
ENDIF
endphoneme
phoneme w/
liquid
lengthmod 7
IF nextPh(isVowel) THEN
NextVowelStarts
VowelStart(w/w@)
VowelStart(vwl_fr/wa)
VowelStart(w/we)
VowelStart(w/wi)
VowelStart(w/wo)
VowelStart(w/wu)
EndSwitch
VowelEnding(w/xw, -30)
IF prevPh(isPause) THEN
FMT(w/_w)
ELSE
FMT(w/_w)
ENDIF
ELSE
// no vowel follows
Vowelout len=50
IF prevPh(#i) THEN
FMT(w/iw_)
ENDIF
FMT(w/w_)
ENDIF
endphoneme
phoneme A~
vowel starttype #a endtype #a
length 190
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 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
starttype #cFR endtype #cFR
voicingswitch p
lengthmod 6
Vowelin f1=2 f2=1000 -300 -200 f3=-100 100
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
IF nextPhW(#r) THEN
FMT(b/xbr)
ELSE
FMT(b/xb)
ENDIF
ENDIF
IF nextPh(isPause2) OR nextPh(l) THEN
FMT(b/b_) addWav(x/b_)
ELIF nextPh(l/) THEN
FMT(b/b)
ELIF nextPh(#r) THEN
FMT(b/br) addWav(x/b, 50)
ENDIF
FMT(b/b) addWav(x/b, 70)
endphoneme
phoneme d
vcd alv stop
starttype #cFR endtype #cFR
voicingswitch t
lengthmod 5
Vowelin f1=1 f2=1700 -300 300 f3=-100 80 amp=20
Vowelout f1=2 f2=1700 -300 300 f3=-100 80
IF PreVoicing THEN
IF nextPhW(#r) THEN
FMT(d/xdr)
ELSE
FMT(d/xd)
ENDIF
ENDIF
IF nextPh(isPause2) THEN
FMT(d/d_) addWav(x/d_, 50)
ELIF nextPhW(#r) THEN
FMT(d/dr) addWav(x/d_, 50)
ENDIF
FMT(d/d) addWav(x/d, 40)
endphoneme
phoneme f
vls lbd frc
starttype #cFR endtype #cFR
voicingswitch v
lengthmod 3
Vowelout f1=0 f2=1000 -500 -350 f3=-200 100
IF nextPh(isPause) THEN
WAV(ufric/f_)
ENDIF
WAV(ufric/f, 80)
endphoneme
phoneme g
vcd vel stop
starttype #cFR endtype #cFR
voicingswitch k
lengthmod 5
Vowelin f1=2 f2=2300 200 300 f3=-300 80
Vowelout f1=1 f2=2300 250 300 f3=-300 80 brk
IF PreVoicing THEN
IF nextPhW(#r) THEN
FMT(g/xgr)
ELSE
FMT(g/xg)
ENDIF
ENDIF
IF nextPh(isPause2) THEN
FMT(g/g_) addWav(x/g_)
ELIF nextPhW(#r) THEN
FMT(g/gr) addWav(x/g, 20)
ENDIF
FMT(g/g) addWav(x/g, 20)
endphoneme
phoneme k
vls vel stop
starttype #cFR endtype #cFR
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)
ELIF nextPh(#r) THEN
length 45
WAV(ustop/k, 50)
ENDIF
WAV(ustop/k, 40)
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
starttype #cFR endtype #cFR
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)
ELIF nextPh(#r) THEN
length 40
WAV(ustop/p_, 60)
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
starttype #cFR endtype #cFR
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
starttype #cFR endtype #cFR
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 nextPh(isPause2) THEN
WAV(ustop/t_, 40)
ELIF nextPh(#r) THEN
length 40
WAV(ustop/t_short_, 40)
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) OR nextPh(j) 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
starttype #cFR endtype #cFR
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 100
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/) OR nextPhW(#r) THEN
Length 60
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/) OR nextPh(j) THEN
Length 70
FMT(voc/z) 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