mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-01 05:46:19 +00:00
Fix: Speak punctuation option also caused text after [[ to be spoken as phoneme codes even if espeakPHONEMES flag is not set. Speak sequences of letters and dots as individual letters, and don't speak 'dot', eg. "u.s.a." Don't announce punctuation in the alternative text inside <audio ... </audio> Vowelcharts, show the positions of multiple FMT() in vowel phonemes definitions. Phoneme definitions: New attributes: flag1, flag2, flag3 New attribute: nopause. Prevents the insertion of a short pause when this phoneme starts a word which follows a vowel. New conditions: isFlag1, isFlag2, isFlag3, isSibilant. New statement: InsertPhoneme() Phonemes: improve syllablic [m-] [n-] [N-] *_rules: add attributes $p_alt .. $p_alt3, $w_alt .. $w_alt3 *_list: add attributes: $sentence, $atstart klatt synthesizer: implement echo. espeakedit, Prosody display: Indicate stressed and secondary-stress syllables. espeakedit: remember window size and position. Intonation: New file, 'phsource/intonation' to define 'tunes' which can be used from voice files. espeakedit: add Compile -> Intonationm data Speed: Increase range to 80 to 450, with default=175. Improve speaking at high speeds. lang=en: Reduce consecutive unstressed syllables to 'diminished' stress, only in unstressed words. lang=de: Change 'r' phoneme. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@244 d46cf337-b52f-0410-862d-fd96e6ae7743
939 lines
16 KiB
Plaintext
939 lines
16 KiB
Plaintext
//====================================================
|
|
// French
|
|
//====================================================
|
|
// Updated 2010-06-12 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=1 f2=1600 -500 500 f3=-200 100 len=65
|
|
Vowelout f1=1 f2=1200 -400 800 f3=200 100 len=60
|
|
lengthmod 7
|
|
|
|
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
|
|
|
|
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
|
|
Vowelout f1=1 f2=1200 -400 800 f3=200 100 len=30
|
|
lengthmod 7
|
|
|
|
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=1 f2=1600 -500 500 f3=-200 100 len=65 amp=8
|
|
|
|
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 nopause
|
|
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)
|
|
endphoneme
|
|
|
|
|
|
phoneme e
|
|
vowel starttype #e endtype #e
|
|
palatal
|
|
|
|
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
|
|
|
|
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
|
|
IF thisPh(isWordEnd) THEN
|
|
FMT(vowel/o_8)
|
|
ELIF nextPh(p2) OR nextPh(t2) OR nextPh(z2) THEN
|
|
FMT(vowel/o_8)
|
|
ELIF nextPh(z) THEN
|
|
FMT(vowel/o)
|
|
ELSE
|
|
FMT(vowel/o_mid2)
|
|
ENDIF
|
|
ELSE
|
|
IF nextPhW(#r) AND next2Ph(isNotVowel) THEN
|
|
ChangePhoneme(O)
|
|
ELIF nextPhW(isLiquid) AND next2Ph(isNotVowel) THEN
|
|
ChangePhoneme(O)
|
|
ELIF nextPhW(n) AND next2Ph(j) THEN
|
|
FMT(vowel/o)
|
|
ELIF nextPhW(isNasal) AND next2Ph(isLiquid) THEN
|
|
ChangePhoneme(O)
|
|
ELIF nextPhW(isNotVowel) AND next2Ph(isNasal) THEN
|
|
ChangePhoneme(O)
|
|
ELIF nextPhW(d) AND next2Ph(isNotVowel) THEN
|
|
ChangePhoneme(O)
|
|
ELIF nextPhW(t) AND next2Ph(isLiquid) AND nextVowel(isFinalVowel) THEN
|
|
ChangePhoneme(O)
|
|
ELSE
|
|
FMT(vowel/o)
|
|
ENDIF
|
|
FMT(vowel/o)
|
|
ENDIF
|
|
endphoneme
|
|
|
|
|
|
phoneme o2
|
|
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
|
|
IF nextPhW(#r) THEN
|
|
length 200
|
|
ELSE
|
|
length 170
|
|
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
|
|
length 170
|
|
|
|
IF nextPhW(E~) OR nextPhW(#i) THEN
|
|
FMT(vowel/y, -40)
|
|
ENDIF
|
|
|
|
FMT(vowel/y)
|
|
endphoneme
|
|
|
|
|
|
phoneme W
|
|
vowel starttype #@ endtype #@
|
|
length 180
|
|
|
|
FMT(vowel/@_6)
|
|
endphoneme
|
|
|
|
|
|
phoneme Y
|
|
vowel starttype #@ endtype #@
|
|
length 170
|
|
|
|
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 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
|
|
FMT(b/xb)
|
|
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
|
|
FMT(d/xd)
|
|
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
|
|
FMT(g/xg)
|
|
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
|
|
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
|
|
|
|
|