Files
espeak-ng/phsource/ph_french
T
jonsd 19b774ffc6 [1.43.16]
git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@242 d46cf337-b52f-0410-862d-fd96e6ae7743
2010-04-03 22:20:25 +00:00

851 lines
14 KiB
Plaintext

//====================================================
// French
//====================================================
// Updated 2010-04-01 Michel Such <michel.such@free.fr>
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