mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 13:38:47 +00:00
1070 lines
17 KiB
Plaintext
1070 lines
17 KiB
Plaintext
//====================================================
|
|
// French
|
|
//====================================================
|
|
// Updated 2011-10-14 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) 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) 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(vwl_fr/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) OR prevPh(isNasal) 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 rfx
|
|
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 @-
|
|
vowel starttype #@ endtype #@
|
|
unstressed
|
|
length 130
|
|
FMT(vowel/@_hgh)
|
|
endphoneme
|
|
|
|
|
|
phoneme a
|
|
vowel starttype #a endtype #a
|
|
IF nextPhW(isVowel) THEN
|
|
length 220
|
|
ELSE
|
|
length 170
|
|
ENDIF
|
|
|
|
FMT(vowel/a_7)
|
|
endphoneme
|
|
|
|
|
|
phoneme a-
|
|
vowel starttype #a endtype #a
|
|
unstressed
|
|
length 130
|
|
|
|
FMT(vowel/a_7, 85)
|
|
endphoneme
|
|
|
|
|
|
phoneme a# // For english words
|
|
import_phoneme en/a#
|
|
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
|
|
unstressed
|
|
length 130
|
|
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 E-
|
|
vowel starttype #e endtype #e
|
|
unstressed
|
|
length 130
|
|
FMT(vowel/e_mid)
|
|
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 150
|
|
IfNextVowelAppend(;)
|
|
ENDIF
|
|
|
|
FMT(vowel/i_8)
|
|
endphoneme
|
|
|
|
|
|
phoneme I // For english words
|
|
import_phoneme en/I
|
|
endphoneme
|
|
|
|
|
|
phoneme I2 // For english words
|
|
import_phoneme en/I2
|
|
endphoneme
|
|
|
|
|
|
phoneme j/ // Short "i" between "r" and a vowel
|
|
vowel starttype #i endtype #i
|
|
length 80
|
|
// 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 thisPh(isFinalVowel) THEN
|
|
FMT(vowel/o_mid2)
|
|
ENDIF
|
|
IF nextPhW(#l) AND next2Ph(isNotVowel) THEN
|
|
FMT(vowel/o_mid2)
|
|
ENDIF
|
|
IF nextPhW(#r) AND next2Ph(isNotVowel) THEN
|
|
FMT(vowel/o_mid2)
|
|
ENDIF
|
|
|
|
FMT(vowel/o_mid)
|
|
endphoneme
|
|
|
|
|
|
phoneme oU
|
|
import_phoneme en/oU
|
|
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, 80)
|
|
ENDIF
|
|
|
|
length 180
|
|
FMT(vowel/y)
|
|
endphoneme
|
|
|
|
|
|
phoneme y-
|
|
vowel starttype #u endtype #u
|
|
unstressed
|
|
|
|
length 130
|
|
FMT(vowel/y)
|
|
endphoneme
|
|
|
|
|
|
phoneme W
|
|
vowel starttype #@ endtype #@
|
|
length 180
|
|
|
|
FMT(vowel/@_6)
|
|
endphoneme
|
|
|
|
|
|
phoneme W2 // For english words
|
|
vowel starttype #@ endtype #@
|
|
length 100
|
|
unstressed
|
|
|
|
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_n4)
|
|
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 n
|
|
vcd alv nasal
|
|
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
|
|
lengthmod 4
|
|
|
|
IF KlattSynth THEN
|
|
Vowelin f1=0 f2=1500 -200 200 f3=0 80
|
|
FMT(klatt/n)
|
|
ENDIF
|
|
|
|
NextVowelStarts
|
|
VowelStart(n/n@)
|
|
VowelStart(n/na)
|
|
VowelStart(n/ne)
|
|
VowelStart(n/ni)
|
|
VowelStart(n/no)
|
|
VowelStart(n/nu)
|
|
EndSwitch
|
|
|
|
IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
|
|
FMT(n/nj)
|
|
ELIF prevPh(isPause) OR prevPh(n) THEN
|
|
FMT(n/_n)
|
|
ELIF nextPh(isNotVowel) THEN
|
|
length 120
|
|
FMT(n/n_long_)
|
|
ENDIF
|
|
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_, 80)
|
|
ELIF nextPh(@-) THEN
|
|
WAV(ustop/p_unasp, 70)
|
|
ELIF nextPh(#l) THEN
|
|
WAV(ustop/pl, 50)
|
|
ELIF nextPh(#r) THEN
|
|
length 40
|
|
WAV(ustop/p_, 80)
|
|
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_, 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) 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 V // For english words
|
|
vowel starttype #a endtype #@
|
|
length 140
|
|
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/V_2)
|
|
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
|
|
|
|
phoneme j.
|
|
liquid
|
|
lengthmod 7
|
|
ipa U+0265
|
|
endphoneme
|
|
|
|
// translate from English to French phonemes
|
|
equivalents NULL // disable this table
|
|
//remove_stress
|
|
0 O
|
|
3 W r
|
|
3: W : r
|
|
@ W
|
|
@- W
|
|
@2 W
|
|
@5 W
|
|
@L W l
|
|
a a
|
|
a# a#
|
|
A: a :
|
|
A@ a r
|
|
aa a :
|
|
aI a j
|
|
aI3 a j W2 r
|
|
aI@ a j W2 r
|
|
aU a w
|
|
aU@ a w @
|
|
A~ A~
|
|
E E
|
|
e: e
|
|
e@ E : r
|
|
eI E : j/
|
|
i i
|
|
I I
|
|
I2 I2
|
|
i: i :
|
|
i@ i r
|
|
i@3 i : r
|
|
O O
|
|
O: O :
|
|
o: o
|
|
O@ O r
|
|
o@ O r
|
|
OI O j
|
|
oU oU
|
|
O~ O~
|
|
U u
|
|
u: u:
|
|
U@ u r
|
|
V V
|
|
IR i r
|
|
VR W r
|
|
b b
|
|
C C
|
|
d d
|
|
D D
|
|
dZ dZ
|
|
f f
|
|
g g
|
|
h h
|
|
j j
|
|
k k
|
|
l l
|
|
l# l#
|
|
m m
|
|
n n
|
|
N N
|
|
n^ n^
|
|
p p
|
|
Q Q
|
|
r r
|
|
r- r
|
|
s s
|
|
S S
|
|
t t
|
|
T T
|
|
t2 t
|
|
tS tS
|
|
v v
|
|
w w/
|
|
x x
|
|
z z
|
|
Z Z
|
|
endphoneme
|
|
|
|
|