mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 21:39:47 +00:00
634 lines
10 KiB
Plaintext
634 lines
10 KiB
Plaintext
|
|
phoneme t2 // [t] which doesn't reduce
|
|
vcd alv stop dontlist
|
|
ChangePhoneme(t)
|
|
endphoneme
|
|
|
|
|
|
phoneme t# // reduced [t] as in "city" in en-us
|
|
vcd alv stop
|
|
ChangePhoneme(t)
|
|
endphoneme
|
|
|
|
|
|
phoneme d# // change to [d] or [t] depending on whether previous phoneme is voiced
|
|
vls alv stop dontlist
|
|
IF prevPh(isVoiced) THEN
|
|
ChangePhoneme(d)
|
|
ELSE
|
|
ChangePhoneme(t)
|
|
ENDIF
|
|
endphoneme
|
|
|
|
|
|
phoneme z# // change to [z] or [s] depending on whether previous phoneme is voiced
|
|
vls alv frc sibilant dontlist
|
|
IF prevPh(isVoiced) THEN
|
|
ChangePhoneme(z)
|
|
ELSE
|
|
ChangePhoneme(s)
|
|
ENDIF
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme l // use dark [l/2] before not-vowel
|
|
liquid
|
|
lengthmod 7
|
|
|
|
IF NOT nextPhW(isVowel) THEN
|
|
IF prevPh(isVowel) OR prevPh(j) OR prevPh(w) THEN
|
|
ChangePhoneme(l/2)
|
|
ELSE
|
|
ChangePhoneme(l/)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CALL base/l
|
|
endphoneme
|
|
|
|
|
|
phoneme r- // linking r, used in English between certain vowels and a following vowel
|
|
liquid rhotic
|
|
ipa ɹ
|
|
|
|
IF NOT thisPh(isWordEnd) AND NOT prevPh(@) AND NOT prevPh(3) THEN
|
|
ChangePhoneme(r)
|
|
ENDIF
|
|
|
|
lengthmod 0
|
|
|
|
NextVowelStarts
|
|
VowelStart(r2/r2@)
|
|
VowelStart(r2/r2a)
|
|
VowelStart(r2/r2e)
|
|
VowelStart(r2/r2i)
|
|
VowelStart(r2/r2o)
|
|
VowelStart(r2/r2u)
|
|
EndSwitch
|
|
|
|
IF prevPh(isVowel) THEN
|
|
VowelEnding(r/xr, -60)
|
|
ENDIF
|
|
|
|
FMT(r/r)
|
|
endphoneme
|
|
|
|
|
|
phoneme z/2 // used for 's suffix
|
|
vcd alv frc sibilant
|
|
lengthmod 6
|
|
IF prevPh(isSibilant) THEN
|
|
InsertPhoneme(I2)
|
|
ENDIF
|
|
|
|
IF NOT prevPh(isVoiced) THEN
|
|
ChangePhoneme(s)
|
|
ENDIF
|
|
ChangePhoneme(z)
|
|
endphoneme
|
|
|
|
|
|
phoneme w#
|
|
vls glt apr // [h]
|
|
ipa ʍ
|
|
|
|
IF nextPh(isVowel) THEN
|
|
NextVowelStarts
|
|
VowelStart(w/w@)
|
|
VowelStart(w/wa)
|
|
VowelStart(w/we)
|
|
VowelStart(w/wi)
|
|
VowelStart(w/wo)
|
|
VowelStart(w/wu)
|
|
EndSwitch
|
|
ENDIF
|
|
|
|
WAV(h/hu, 70)
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// VOWELS
|
|
//*******************************************************************
|
|
|
|
phoneme @ // Schwa
|
|
vowel starttype #@ endtype #@
|
|
unstressed
|
|
length 140
|
|
IfNextVowelAppend(r-)
|
|
IF thisPh(isWordEnd) THEN
|
|
FMT(vowel/@_6, 90)
|
|
ENDIF
|
|
FMT(vowel/@)
|
|
endphoneme
|
|
|
|
|
|
phoneme 3 // Schwa, used for rhotic schwa in American, e.g. bett**er**
|
|
CALL @
|
|
ipa ə
|
|
endphoneme
|
|
|
|
|
|
phoneme @2 // Schwa, changes to I before a vowel. th**e**, used only for "the".
|
|
vowel starttype #@ endtype #@
|
|
unstressed dontlist
|
|
length 120
|
|
IF nextPh(isVowel) THEN
|
|
ChangePhoneme(I2)
|
|
ENDIF
|
|
ChangePhoneme(@)
|
|
endphoneme
|
|
|
|
|
|
phoneme @5 // Schwa, changes to U before a vowel. t**o**, used only for "to".
|
|
vowel starttype #@ endtype #@
|
|
unstressed dontlist
|
|
length 140
|
|
IF nextPh(isVowel) OR nextPh(isPause) THEN
|
|
ChangePhoneme(U)
|
|
ENDIF
|
|
ChangePhoneme(@)
|
|
endphoneme
|
|
|
|
|
|
phoneme @L // simp**le**
|
|
vowel starttype #@ endtype l
|
|
ipa ə|l
|
|
unstressed
|
|
length 160
|
|
CALL vowelstart_l
|
|
FMT(vwl_en/@L)
|
|
endphoneme
|
|
|
|
|
|
phoneme a
|
|
vowel starttype #a endtype #a
|
|
length 160
|
|
ChangeIfDiminished(a#)
|
|
IF thisPh(isUnstressed) THEN
|
|
FMT(vowel/a_8)
|
|
ENDIF
|
|
FMT(vowel/a)
|
|
endphoneme
|
|
|
|
|
|
phoneme a2 // don't reduce to a#
|
|
vowel dontlist
|
|
ChangePhoneme(a)
|
|
endphoneme
|
|
|
|
|
|
phoneme a# // **a**bout. This may be \[@\] or may be a more open schwa.
|
|
vowel starttype #@ endtype #@
|
|
ipa ɐ
|
|
unstressed
|
|
length 150
|
|
|
|
IF NOT thisPh(isUnstressed) THEN
|
|
ChangePhoneme(a) // syllable has an explicit stress
|
|
ENDIF
|
|
|
|
FMT(vowel/a#_3)
|
|
endphoneme
|
|
|
|
|
|
phoneme aa // 'b**a**th' etc. This is \[a\] in some accents, \[A:\] in others.
|
|
vowel starttype #a endtype #a
|
|
ipa a
|
|
length 200
|
|
|
|
IF MbrolaSynth THEN
|
|
ChangePhoneme(A:)
|
|
ENDIF
|
|
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/a_6, 88)
|
|
endphoneme
|
|
|
|
|
|
phoneme E // dr**e**ss
|
|
vowel starttype #e endtype #e
|
|
length 140
|
|
IF nextPhW(n) THEN
|
|
ChangeIfDiminished(@)
|
|
ELSE
|
|
ChangeIfDiminished(I2)
|
|
ENDIF
|
|
FMT(vowel/ee_5)
|
|
endphoneme
|
|
|
|
|
|
phoneme E# // [@] in unstressed syllables, if next vowel is stressed
|
|
vowel starttype #e endtype #e
|
|
dontlist
|
|
|
|
IF thisPh(isUnstressed) AND nextVowel(isVowel) AND nextVowel(isStressed) THEN
|
|
ChangePhoneme(@)
|
|
ENDIF
|
|
|
|
ChangePhoneme(E)
|
|
endphoneme
|
|
|
|
|
|
phoneme E2 // does not reduce in unstressed syllables
|
|
vowel starttype #e endtype #e
|
|
dontlist
|
|
length 140
|
|
ChangePhoneme(E) // a second change ([E] to [I2]) won't happen
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme I // k**i**t
|
|
vowel starttype #i endtype #i
|
|
length 130
|
|
IfNextVowelAppend(;)
|
|
FMT(vowel/ii_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme I2 // **i**ntend. As \[I\], but also indicates an unstressed syllable.
|
|
vowel starttype #i endtype #i
|
|
unstressed
|
|
length 130
|
|
|
|
IF MbrolaSynth THEN
|
|
ChangePhoneme(I)
|
|
ENDIF
|
|
|
|
IfNextVowelAppend(;)
|
|
|
|
IF thisPh(isAfterStress) AND thisPh(isFinalVowel) THEN
|
|
FMT(vowel/ii#_3)
|
|
ENDIF
|
|
FMT(vowel/ii_4)
|
|
endphoneme
|
|
|
|
|
|
phoneme I# // used for [I] which may be [@] in some accents
|
|
vowel starttype #i endtype #i
|
|
unstressed
|
|
length 130
|
|
|
|
IF MbrolaSynth THEN
|
|
ChangePhoneme(I)
|
|
ENDIF
|
|
|
|
IfNextVowelAppend(;)
|
|
ChangePhoneme(I2)
|
|
endphoneme
|
|
|
|
|
|
phoneme i // happ**y**. optional variant of [I] for end of words
|
|
vowel starttype #i endtype #i
|
|
unstressed
|
|
ipa i
|
|
length 150
|
|
IfNextVowelAppend(;)
|
|
|
|
// IF NOT thisPh(isFinalVowel) THEN
|
|
// ChangePhoneme(I)
|
|
// ENDIF
|
|
|
|
FMT(vowel/ii_7)
|
|
endphoneme
|
|
|
|
|
|
phoneme 0 // l**o**t
|
|
vowel starttype #o endtype #o
|
|
length 140
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/0)
|
|
endphoneme
|
|
|
|
|
|
phoneme 0# // [@] in unstressed syllables
|
|
vowel starttype #o endtype #o
|
|
dontlist
|
|
|
|
IF thisPh(isUnstressed) AND nextVowel(isVowel) AND NOT nextVowel(isUnstressed) THEN
|
|
ChangePhoneme(@)
|
|
ENDIF
|
|
|
|
ChangePhoneme(0)
|
|
endphoneme
|
|
|
|
|
|
phoneme 02 // becomes V in en-us
|
|
vowel starttype #o endtype #o
|
|
dontlist
|
|
length 140
|
|
ChangePhoneme(0)
|
|
endphoneme
|
|
|
|
|
|
phoneme V // str**u**t
|
|
vowel starttype #a endtype #@
|
|
length 140
|
|
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/V_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme U // f**oo**t
|
|
vowel starttype #o endtype #o
|
|
length 150
|
|
|
|
IF prevPhW(j) THEN
|
|
length 130
|
|
FMT(vowel/8_2)
|
|
ENDIF
|
|
|
|
FMT(vowel/uu)
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme A: // p**al**m
|
|
vowel starttype #a endtype #a
|
|
length 230
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/aa_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme A@ // st**ar**t. Used for [A:] when followed by 'r'.
|
|
vowel starttype #a endtype #a
|
|
ipa ɑː
|
|
length 230
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/aa_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme A# // [a] in British [A:] in American
|
|
vowel starttype #a endtype #a
|
|
dontlist
|
|
ChangePhoneme(a)
|
|
endphoneme
|
|
|
|
|
|
|
|
|
|
phoneme 3: // n**ur**se
|
|
vowel starttype #@ endtype #@
|
|
length 210
|
|
IfNextVowelAppend(r-)
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/3_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme i: // fl**ee**ce
|
|
vowel starttype #i endtype #i
|
|
length 175
|
|
IfNextVowelAppend(;)
|
|
IF prevPh(w) THEN
|
|
VowelStart(w/wi2)
|
|
ENDIF
|
|
FMT(vowel/i_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme O: // th**ou**ght
|
|
vowel starttype #o endtype #o
|
|
length 230
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/oo_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme O
|
|
vowel starttype #o endtype #o
|
|
length 200
|
|
ChangeIfDiminished(@)
|
|
FMT(vowel/oo_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme O@ // n**or**th
|
|
vowel starttype #o endtype #o
|
|
ipa ɔː
|
|
length 240
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/oo_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme o@ // f**or**ce
|
|
vowel starttype #o endtype #o
|
|
ipa ɔː
|
|
length 250
|
|
|
|
IF MbrolaSynth THEN
|
|
ChangePhoneme(O@)
|
|
ENDIF
|
|
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/oo_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme u: // g**oo**se
|
|
vowel starttype #u endtype #u
|
|
length 210
|
|
IF nextPh(l/2) THEN
|
|
FMT(vwl_en/u_L)
|
|
ENDIF
|
|
IF prevPhW(j) AND NOT thisPh(isWordEnd) THEN
|
|
length 160
|
|
ENDIF
|
|
FMT(vdiph2/uw_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme aU // m**ou**th
|
|
vowel starttype #a endtype #u
|
|
length 230
|
|
FMT(vdiph/au)
|
|
endphoneme
|
|
|
|
|
|
phoneme oU // g**oa**t
|
|
vowel starttype #@ endtype #u
|
|
ipa əʊ
|
|
length 220
|
|
FMT(vdiph/@u_en)
|
|
endphoneme
|
|
|
|
|
|
phoneme oU#
|
|
vowel dontlist
|
|
IF thisPh(isStressed) THEN
|
|
ChangePhoneme(0)
|
|
ENDIF
|
|
|
|
IF nextVowel(isStressed) OR prevVowel(isStressed) THEN
|
|
ChangePhoneme(@)
|
|
ENDIF
|
|
|
|
ChangePhoneme(oU)
|
|
endphoneme
|
|
|
|
|
|
phoneme aI // pr**i**ce
|
|
vowel starttype #a endtype #i
|
|
length 240
|
|
IF nextPh(#a) THEN
|
|
AppendPhoneme(;)
|
|
ENDIF
|
|
FMT(vdiph/ai_2)
|
|
endphoneme
|
|
|
|
|
|
phoneme eI // f**a**ce
|
|
vowel starttype #e endtype #i
|
|
length 210
|
|
FMT(vdiph/eei)
|
|
endphoneme
|
|
|
|
|
|
phoneme OI // ch**oi**ce
|
|
vowel starttype #o endtype #i
|
|
length 230
|
|
FMT(vdiph/ooi)
|
|
endphoneme
|
|
|
|
|
|
phoneme e@ // squ**are**
|
|
vowel starttype #e endtype #@
|
|
length 230
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowel/ee_1)
|
|
endphoneme
|
|
|
|
|
|
phoneme i@ // n**ear**
|
|
vowel starttype #i endtype #@
|
|
length 250
|
|
IfNextVowelAppend(r-)
|
|
FMT(vdiph2/ii@)
|
|
endphoneme
|
|
|
|
|
|
phoneme i@3
|
|
vowel starttype #i endtype #@
|
|
length 250
|
|
|
|
IF MbrolaSynth THEN
|
|
ChangePhoneme(i@)
|
|
ENDIF
|
|
|
|
IfNextVowelAppend(r-)
|
|
FMT(vdiph2/ii@)
|
|
endphoneme
|
|
|
|
|
|
phoneme U@ // c**ure**
|
|
vowel starttype #u endtype #@
|
|
length 200
|
|
IfNextVowelAppend(r-)
|
|
IF thisPh(isUnstressed) THEN
|
|
FMT(vdiph2/8@)
|
|
ENDIF
|
|
FMT(vdiph2/uu@)
|
|
endphoneme
|
|
|
|
|
|
phoneme aI@ // sc**ie**nce
|
|
vowel starttype #a endtype #@
|
|
length 280
|
|
IfNextVowelAppend(r-)
|
|
FMT(vwl_en/aI@)
|
|
endphoneme
|
|
|
|
|
|
phoneme aI3
|
|
vowel starttype #a endtype #@
|
|
length 280
|
|
ChangePhoneme(aI@)
|
|
endphoneme
|
|
|
|
|
|
phoneme aU@ // h**our**
|
|
vowel starttype #a endtype #@
|
|
length 280
|
|
IfNextVowelAppend(r-)
|
|
FMT(vwl_en/aU@)
|
|
endphoneme
|
|
|
|
|
|
|
|
|
|
phoneme IR // used for "ir" when [3:] is split (Scottish)
|
|
vowel starttype #@ endtype #@
|
|
length 190
|
|
ipa əɹ
|
|
IF nextPhW(r-) THEN
|
|
ipa ə
|
|
ENDIF
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowelr/V_r)
|
|
endphoneme
|
|
|
|
|
|
phoneme VR // used for "or"/"ur" when [3:] is split (Scottish)
|
|
vowel starttype #@ endtype #@
|
|
length 210
|
|
ipa ʌɹ
|
|
IF nextPhW(r-) THEN
|
|
ipa ʌ
|
|
ENDIF
|
|
IfNextVowelAppend(r-)
|
|
FMT(vowelr/V3_r)
|
|
endphoneme
|
|
|
|
|
|
phoneme o:
|
|
vowel starttype #o endtype #o
|
|
length 220
|
|
FMT(vowel/o)
|
|
endphoneme
|
|
|
|
|
|
phoneme A~
|
|
vowel starttype #a endtype #a
|
|
length 260
|
|
FMT(vnasal/aa_n2)
|
|
endphoneme
|
|
|
|
|
|
phoneme O~
|
|
vowel starttype #o endtype #o
|
|
length 240
|
|
FMT(vnasal/oo_n2)
|
|
endphoneme
|
|
|
|
|
|
phoneme e:
|
|
vowel starttype #e endtype #e
|
|
length 210
|
|
FMT(vowel/e)
|
|
endphoneme
|
|
|
|
|
|
phoneme a#2 // for word 'an'
|
|
vowel dontlist
|
|
IF next2Ph(isVowel) THEN
|
|
ChangePhoneme(a#)
|
|
ELSE
|
|
ChangePhoneme(a)
|
|
ENDIF
|
|
endphoneme
|
|
|
|
|
|
phoneme @# // TEST: [@] which is slightly more 'front'
|
|
vowel starttype #i endtype #i
|
|
unstressed
|
|
length 130
|
|
FMT(vowel/@_3)
|
|
endphoneme
|
|
|