mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
1418 lines
23 KiB
Plaintext
1418 lines
23 KiB
Plaintext
// This is the master phoneme file.
|
|
|
|
//*******************************************************************
|
|
// Stress Phonemes
|
|
//*******************************************************************
|
|
|
|
phoneme % // Unstressed
|
|
stress
|
|
stress_type 1
|
|
endphoneme
|
|
|
|
phoneme %% // Diminished stress
|
|
stress
|
|
stress_type 0
|
|
endphoneme
|
|
|
|
phoneme \, // [,] Secondary stress
|
|
stress
|
|
stress_type 2
|
|
endphoneme
|
|
|
|
phoneme \,\, // [,,] Secondary stress
|
|
stress
|
|
stress_type 3
|
|
endphoneme
|
|
|
|
phoneme ' // Primary stress
|
|
stress
|
|
stress_type 4
|
|
endphoneme
|
|
|
|
phoneme '' // Primary stress (priority)
|
|
stress
|
|
stress_type 5
|
|
endphoneme
|
|
|
|
phoneme '! // Primary stress (emphasized)
|
|
stress
|
|
stress_type 6
|
|
endphoneme
|
|
|
|
phoneme = // Place stress on previous vowel
|
|
stress
|
|
stress_type 2
|
|
endphoneme
|
|
|
|
//*******************************************************************
|
|
// IPA Phonemes
|
|
//*******************************************************************
|
|
|
|
phonemetable ipa base
|
|
include ph_ipa
|
|
|
|
phonemetable base1 base
|
|
|
|
// The base phoneme table contains the utility phonemes, the consonants,
|
|
// and a schwa. The vowels are defined in the language specific phoneme
|
|
// tables, which can also redefine consonants if they wish.
|
|
|
|
|
|
//*******************************************************************
|
|
// UTILITY PHONEMES
|
|
//*******************************************************************
|
|
|
|
phoneme || // End Word
|
|
pause
|
|
lengthmod 9 // no effect
|
|
endphoneme
|
|
|
|
phoneme _ // Short pause
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 25
|
|
endphoneme
|
|
|
|
phoneme _! // Short pause, don't replace by linking
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
nolink
|
|
length 35
|
|
endphoneme
|
|
|
|
phoneme _| // Very short pause
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 5
|
|
length 1
|
|
endphoneme
|
|
|
|
phoneme _: // Standard pause
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 75
|
|
endphoneme
|
|
|
|
phoneme _:: // Long pause
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 150
|
|
endphoneme
|
|
|
|
phoneme _;_ // clause pause
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 200
|
|
endphoneme
|
|
|
|
phoneme _^_ // Change dictionary (followed by language-code in ascii
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 10
|
|
endphoneme
|
|
|
|
phoneme _X1 // a language specific action
|
|
pause
|
|
starttype _ endtype _
|
|
lengthmod 1
|
|
length 10
|
|
endphoneme
|
|
|
|
phoneme ? // glottal stp
|
|
vls glt stp
|
|
lengthmod 3 // ??
|
|
nolink
|
|
Vowelin glstop
|
|
Vowelout glstop
|
|
WAV(ustop/null)
|
|
endphoneme
|
|
|
|
|
|
phoneme : // lengthen previous vowel by "length"
|
|
virtual
|
|
length 70
|
|
endphoneme
|
|
|
|
phoneme - // Indicates the previous phoneme is a syllabic consonant
|
|
virtual
|
|
endphoneme
|
|
|
|
|
|
// Some default vowel definitions
|
|
|
|
phoneme @ // Schwa, e.g. alph**a**
|
|
vwl starttype #@ endtype #@
|
|
unstressed
|
|
length 140
|
|
FMT(vowel/@)
|
|
endphoneme
|
|
|
|
|
|
phoneme @- // very short schwa
|
|
vwl starttype #@ endtype #@
|
|
unstressed nsy
|
|
|
|
ipa ə
|
|
IF nextPhW(*) OR nextPhW(r) THEN
|
|
ipa NULL // @-* is used to make 'r'
|
|
ENDIF
|
|
length 50
|
|
FMT(vowel/@-)
|
|
endphoneme
|
|
|
|
|
|
phoneme a // tr**a**p
|
|
vwl starttype #a endtype #a
|
|
length 180
|
|
FMT(vowel/a)
|
|
endphoneme
|
|
|
|
|
|
phoneme e // German **eh**, French **é**
|
|
vwl starttype #e endtype #e
|
|
length 170
|
|
FMT(vowel/e)
|
|
endphoneme
|
|
|
|
|
|
phoneme i
|
|
vwl starttype #i endtype #i
|
|
length 170
|
|
IfNextVowelAppend(;)
|
|
FMT(vowel/i)
|
|
endphoneme
|
|
|
|
|
|
phoneme o // German **oo**, French **o**
|
|
vwl starttype #o endtype #o
|
|
length 170
|
|
FMT(vowel/oo)
|
|
endphoneme
|
|
|
|
|
|
phoneme u
|
|
vwl starttype #u endtype #u
|
|
length 170
|
|
FMT(vowel/u)
|
|
endphoneme
|
|
|
|
|
|
// Syllablic consonants
|
|
//=====================
|
|
|
|
phoneme m-
|
|
vwl starttype #@ endtype #@
|
|
ipa mU+0329
|
|
lengthmod 4
|
|
length 170
|
|
|
|
IF thisPh(isWordStart) THEN
|
|
length 190
|
|
ENDIF
|
|
IF KlattSynth THEN
|
|
FMT(klatt/m-syl)
|
|
ENDIF
|
|
FMT(m/m-syl)
|
|
endphoneme
|
|
|
|
phoneme n-
|
|
vwl starttype #@ endtype #@
|
|
ipa nU+0329
|
|
lengthmod 4
|
|
length 170
|
|
|
|
IF thisPh(isWordStart) THEN
|
|
length 190
|
|
ENDIF
|
|
IF KlattSynth THEN
|
|
FMT(klatt/n-syl)
|
|
ENDIF
|
|
FMT(n/n-syl)
|
|
endphoneme
|
|
|
|
phoneme N-
|
|
vwl starttype #e endtype #e
|
|
ipa ŋU+0329
|
|
lengthmod 4
|
|
length 190
|
|
FMT(nn/nn-syl)
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// Other sounds
|
|
//*******************************************************************
|
|
|
|
phoneme #X1 // click, use for indicating capital letters
|
|
vls alv frc sib
|
|
lengthmod 3
|
|
WAV(ustop/percus10, 60)
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// VIRTUAL - referred to in vowels' vwl starttype and endtype
|
|
// These each apply to a class of vowels
|
|
//*******************************************************************
|
|
|
|
phoneme #@ virtual
|
|
endphoneme
|
|
|
|
phoneme #a virtual
|
|
endphoneme
|
|
|
|
phoneme #e virtual
|
|
endphoneme
|
|
|
|
phoneme #i virtual
|
|
endphoneme
|
|
|
|
phoneme #o virtual
|
|
endphoneme
|
|
|
|
phoneme #u virtual
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// SONORANTS
|
|
//*******************************************************************
|
|
|
|
|
|
phoneme r- // syllabic r
|
|
vwl starttype #@ endtype #@
|
|
ipa rU+0329
|
|
unstressed
|
|
length 220
|
|
FMT(vowelr/r-voc)
|
|
endphoneme
|
|
|
|
phoneme l- // syllabic l
|
|
vwl starttype #@ endtype #@
|
|
ipa lU+0329
|
|
unstressed
|
|
length 200
|
|
FMT(vwl_hi/l-voc)
|
|
endphoneme
|
|
|
|
|
|
phoneme r // **r**ed (Omitted if not immediately followed by a vowel)
|
|
import_phoneme ipa/r\\
|
|
endphoneme
|
|
|
|
phoneme r/ // used for [r] when not preceding a vowel
|
|
import_phoneme ipa/r\\
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme R
|
|
liquid trl
|
|
lengthmod 6
|
|
ipa r
|
|
IF nextPhW(R2) THEN
|
|
ipa NULL
|
|
ENDIF
|
|
Vowelin f1=0 f2=1600 -300 300 f3=-200 80
|
|
Vowelout f1=2 f2=1600 -300 300 f3=-200 80 brk
|
|
FMT(r3/r_trill2) addWav(r3/r_trill2.wav, 65)
|
|
endphoneme
|
|
|
|
phoneme R2 // this is [R] from Slovak/Czech
|
|
liquid trl
|
|
lengthmod 6
|
|
ipa r
|
|
Vowelin f1=0 f2=1700 -300 300 f3=-300 80
|
|
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
|
|
FMT(r3/r_trill) addWav(r3/r_trill.wav, 50)
|
|
endphoneme
|
|
|
|
phoneme R3 // Afrikaans
|
|
liquid trl
|
|
lengthmod 6
|
|
length 60
|
|
ipa r
|
|
Vowelin f1=2 f2=2700 -300 -200 f3=-1300 80
|
|
Vowelout f1=2 f2=1700 -300 -200 f3=-1300 80
|
|
|
|
// vowel modifier is the same as for [r]
|
|
NextVowelStarts
|
|
VowelStart(r/r@, -15)
|
|
VowelStart(r/ra, -15)
|
|
VowelStart(r/re, -15)
|
|
VowelStart(r/ri, -15)
|
|
VowelStart(r/ro, -15)
|
|
VowelStart(r/ru, -15)
|
|
EndSwitch
|
|
|
|
IF prevPh(isVowel) THEN
|
|
VowelEnding(r/xr, -50)
|
|
ENDIF
|
|
|
|
FMT(r3/r_trill) addWav(r3/r_trill3.wav)
|
|
endphoneme
|
|
|
|
|
|
phoneme r" // uvular trill
|
|
vcd uvl frc
|
|
ipa ʀ
|
|
lengthmod 6
|
|
IF nextPh(isNotVowel) THEN
|
|
FMT(r3/r_uvl) addWav(r3/r_uvl.wav, 50)
|
|
ENDIF
|
|
FMT(r3/r_uvl) addWav(r3/r_uvl.wav, 75)
|
|
endphoneme
|
|
|
|
|
|
procedure vowelstart_l
|
|
NextVowelStarts
|
|
VowelStart(l/l@)
|
|
VowelStart(l/la)
|
|
VowelStart(l/le)
|
|
VowelStart(l/li, -10)
|
|
VowelStart(l/lo)
|
|
VowelStart(l/lu)
|
|
EndSwitch
|
|
endprocedure
|
|
|
|
phoneme l
|
|
liquid
|
|
lengthmod 7
|
|
|
|
IF nextPh(isNotVowel) THEN
|
|
ChangePhoneme(l/)
|
|
ENDIF
|
|
|
|
IF nextPh(isNotVowel) THEN
|
|
// in case the next phoneme is no longer a vowel, in pass=2
|
|
PrevVowelEndings
|
|
VowelEnding(l/L1_@L, -60)
|
|
VowelEnding(l/L1_aL, -40)
|
|
VowelEnding(l/L1_eL, -30)
|
|
VowelEnding(l/L1_iL, -30)
|
|
VowelEnding(l/L1_oL, -40)
|
|
VowelEnding(l/L1_uL, -40)
|
|
EndSwitch
|
|
|
|
FMT(l/l_)
|
|
RETURN
|
|
ENDIF
|
|
|
|
CALL vowelstart_l
|
|
|
|
IF prevPh(#@) THEN
|
|
VowelEnding(l/xl, -50)
|
|
ELIF prevPh(isVowel) THEN
|
|
VowelEnding(l/xl, -40)
|
|
ENDIF
|
|
|
|
IF prevPh(isPause) 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
|
|
lengthmod 7
|
|
|
|
IF nextPh(isVowel) THEN
|
|
ChangePhoneme(l)
|
|
ENDIF
|
|
|
|
PrevVowelEndings
|
|
VowelEnding(l/L1_@L, -60)
|
|
VowelEnding(l/L1_aL, -40)
|
|
VowelEnding(l/L1_eL, -30)
|
|
VowelEnding(l/L1_iL, -30)
|
|
VowelEnding(l/L1_oL, -40)
|
|
VowelEnding(l/L1_uL, -40)
|
|
EndSwitch
|
|
|
|
// we need to replace these with new FMT sequeces for jl and wl
|
|
IF prevPhW(j) THEN
|
|
FMT(l/L1_eL)
|
|
ENDIF
|
|
IF prevPhW(w) THEN
|
|
FMT(l/L1_eL)
|
|
ENDIF
|
|
|
|
FMT(l/l_)
|
|
endphoneme
|
|
|
|
phoneme l/2 // 'dark' [l] after a vowel
|
|
liquid
|
|
lengthmod 7
|
|
|
|
IF nextPh(isVowel) THEN
|
|
ChangePhoneme(l)
|
|
ENDIF
|
|
|
|
CALL vowelstart_l
|
|
|
|
IF prevPhW(j) THEN
|
|
FMT(l/L2_eL)
|
|
ENDIF
|
|
IF prevPhW(w) THEN
|
|
FMT(l/L2_uL)
|
|
ENDIF
|
|
|
|
PrevVowelEndings
|
|
VowelEnding(l/L2_@L, -60)
|
|
VowelEnding(l/L2_aL, -50)
|
|
VowelEnding(l/L2_eL, -40)
|
|
VowelEnding(l/L2_iL, -30)
|
|
VowelEnding(l/L2_oL, -50)
|
|
VowelEnding(l/L2_uL, -40)
|
|
EndSwitch
|
|
endphoneme
|
|
|
|
|
|
phoneme l/3 // Replacement for [l/]
|
|
liquid
|
|
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, -20)
|
|
EndSwitch
|
|
|
|
// IF nextPh(isLiquid) THEN
|
|
// FMT(l/_l)
|
|
// ENDIF
|
|
|
|
FMT(l/l_)
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme l^ // palatal l, e.g. Italian **g**li
|
|
liquid
|
|
ipa ʎ
|
|
lengthmod 7
|
|
Vowelout len=60 lenadd rate
|
|
length 100
|
|
|
|
NextVowelStarts
|
|
VowelStart(l^/j2@)
|
|
VowelStart(l^/j2a)
|
|
VowelStart(l^/j2e)
|
|
VowelStart(l^/j2i)
|
|
VowelStart(l^/j2o)
|
|
VowelStart(l^/j2u)
|
|
EndSwitch
|
|
|
|
IF prevPh(isPause) THEN
|
|
FMT(l^/_l^)
|
|
ENDIF
|
|
|
|
FMT(l^/l^)
|
|
endphoneme
|
|
|
|
|
|
phoneme l.
|
|
liquid rfx
|
|
ipa ɭ
|
|
lengthmod 7
|
|
FMT(l^/l_rfx)
|
|
endphoneme
|
|
|
|
|
|
phoneme L/
|
|
import_phoneme base1/l/2
|
|
endphoneme
|
|
|
|
phoneme L // velar L
|
|
liquid
|
|
lengthmod 7
|
|
|
|
IF nextPh(isNotVowel) THEN
|
|
ChangePhoneme(L/) // use 'dark' [l] after a vowel
|
|
ENDIF
|
|
|
|
VowelEnding(ll/xll, -40)
|
|
|
|
IF prevPh(isPause) THEN
|
|
FMT(ll/_ll)
|
|
ENDIF
|
|
|
|
FMT(ll/ll)
|
|
endphoneme
|
|
|
|
phoneme w
|
|
import_phoneme ipa/w
|
|
endphoneme
|
|
|
|
phoneme j // **y**es
|
|
import_phoneme ipa/j
|
|
endphoneme
|
|
|
|
phoneme ; // linking j, used between (i) vowels and a following vowel
|
|
// also to palatalize consonants
|
|
liquid pzd
|
|
lengthmod 0
|
|
|
|
IF prevPh(#i) THEN
|
|
ipa NULL // linking after i vowel, don't show in ipa
|
|
ENDIF
|
|
|
|
IF nextPh(isNotVowel) THEN
|
|
ChangePhoneme(NULL) // this is to ignore this phoneme if not before a vowel
|
|
ENDIF
|
|
|
|
NextVowelStarts
|
|
VowelStart(j2/j2@)
|
|
VowelStart(j2/j2a)
|
|
VowelStart(j2/j2e)
|
|
VowelStart(j2/j2i)
|
|
VowelStart(j2/j2o)
|
|
VowelStart(j2/j2u)
|
|
EndSwitch
|
|
|
|
IF prevPh(#i) THEN
|
|
VowelEnding(j2/xj2, -40)
|
|
ENDIF
|
|
|
|
IF prevPh(isPause) THEN
|
|
FMT(j2/_j2)
|
|
ENDIF
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// NASAL CONSONANTS
|
|
//*******************************************************************
|
|
|
|
phoneme m
|
|
import_phoneme ipa/m
|
|
endphoneme
|
|
|
|
phoneme n
|
|
import_phoneme ipa/n
|
|
endphoneme
|
|
|
|
phoneme n.
|
|
import_phoneme ipa/n`
|
|
endphoneme
|
|
|
|
phoneme n^ // Spanish **ñ**
|
|
import_phoneme ipa/J
|
|
endphoneme
|
|
|
|
phoneme N // si**ng**
|
|
import_phoneme ipa/N
|
|
endphoneme
|
|
|
|
|
|
phoneme ** // TEST flap
|
|
liquid alv rhotic
|
|
ipa ɾ
|
|
lengthmod 3
|
|
Vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15
|
|
Vowelin f1=2 f2=1600 -300 300 f3=-100 80 len=20
|
|
|
|
IF prevPh(#i) OR prevPh(#e) THEN
|
|
FMT(r3/@tap2)
|
|
ENDIF
|
|
FMT(r3/@tap)
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme * // flap
|
|
vcd alv flp rhotic
|
|
brkafter
|
|
ipa ɾ
|
|
lengthmod 3
|
|
|
|
IF prevPhW(@-) THEN
|
|
ipa r // @-* sequence for [r]
|
|
ENDIF
|
|
|
|
IF nextPh(#e) OR nextPh(#i) THEN
|
|
Vowelin f1=0 f2=1500 -300 300 f3=-200 80
|
|
FMT(d/tap1) addWav(r3/rx, 150)
|
|
FMT(d/tap1) addWav(r3/rx, 150)
|
|
ENDIF
|
|
|
|
Vowelin f1=2 f2=1500 -300 300 f3=-200 80
|
|
IF nextPh(#a) THEN
|
|
FMT(d/tap3) addWav(r3/rx, 200)
|
|
ENDIF
|
|
|
|
IF nextPh(r) THEN
|
|
FMT(d/dr)
|
|
ENDIF
|
|
|
|
Vowelout f1=3 f2=1500 -400 300 f3=-200 80 rms=35 len=50
|
|
Vowelin f1=0 f2=1500 -300 300 f3=-200 80
|
|
FMT(d/tap3) addWav(r3/rx, 200)
|
|
endphoneme
|
|
|
|
|
|
|
|
phoneme r. // retroflex
|
|
liquid rfx
|
|
lengthmod 3
|
|
Vowelout f1=3 f2=1400 -400 300 f3=-400 80 rms=35 len=15 colr=2
|
|
Vowelin f1=2 f2=1400 -400 300 f3=-400 80 len=20
|
|
|
|
IF nextPh(isNotVowel) THEN
|
|
FMT(r3/@tap_rfx_)
|
|
ENDIF
|
|
FMT(r3/@tap_rfx)
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// VOICED STOPS
|
|
//*******************************************************************
|
|
|
|
|
|
phoneme b
|
|
import_phoneme ipa/b
|
|
voicingswitch p
|
|
endphoneme
|
|
|
|
phoneme d
|
|
import_phoneme ipa/d
|
|
voicingswitch t
|
|
endphoneme
|
|
|
|
phoneme d[
|
|
import_phoneme ipa/d_d
|
|
voicingswitch t[
|
|
endphoneme
|
|
|
|
phoneme dZ // **j**udge
|
|
import_phoneme ipa/dZ\)
|
|
voicingswitch tS
|
|
endphoneme
|
|
|
|
phoneme dZ;
|
|
import_phoneme ipa/dz\\\)
|
|
voicingswitch tS;
|
|
endphoneme
|
|
|
|
phoneme J
|
|
import_phoneme ipa/J\\
|
|
voicingswitch c
|
|
endphoneme
|
|
|
|
phoneme g
|
|
import_phoneme ipa/g
|
|
voicingswitch k
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// VOICED fricatives
|
|
//*******************************************************************
|
|
|
|
|
|
phoneme B
|
|
import_phoneme ipa/B
|
|
voicingswitch f
|
|
endphoneme
|
|
|
|
phoneme v
|
|
import_phoneme ipa/v
|
|
voicingswitch f
|
|
endphoneme
|
|
|
|
phoneme v#
|
|
import_phoneme ipa/P
|
|
voicingswitch f
|
|
endphoneme
|
|
|
|
phoneme D // **th**is
|
|
import_phoneme ipa/D
|
|
voicingswitch T
|
|
endphoneme
|
|
|
|
phoneme z
|
|
import_phoneme ipa/z
|
|
voicingswitch s
|
|
endphoneme
|
|
|
|
phoneme Z // plea**s**ure
|
|
import_phoneme ipa/Z
|
|
voicingswitch S
|
|
endphoneme
|
|
|
|
phoneme z.
|
|
import_phoneme ipa/z`
|
|
voicingswitch s.
|
|
endphoneme
|
|
|
|
phoneme z;
|
|
import_phoneme ipa/z\\
|
|
voicingswitch s;
|
|
endphoneme
|
|
|
|
phoneme Z;
|
|
import_phoneme ipa/z\\
|
|
voicingswitch S;
|
|
endphoneme
|
|
|
|
phoneme J^ // palatal fricative (Kirshenbaum C<vcd>)
|
|
import_phoneme ipa/j\\
|
|
ipa ʝ
|
|
endphoneme
|
|
|
|
phoneme Q
|
|
import_phoneme ipa/G
|
|
voicingswitch x
|
|
endphoneme
|
|
|
|
phoneme Q"
|
|
import_phoneme ipa/R
|
|
endphoneme
|
|
|
|
|
|
//*******************************************************************
|
|
// UNVOICED STOPS
|
|
//*******************************************************************
|
|
|
|
|
|
phoneme p
|
|
vls blb stp
|
|
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_)
|
|
ELIF nextPh(r) THEN
|
|
WAV(ustop/pr, 70)
|
|
ELIF nextPh(R) OR nextPh(R2) THEN
|
|
WAV(ustop/pr)
|
|
ELIF nextPh(@-) THEN
|
|
WAV(ustop/p_unasp)
|
|
ELIF nextPh(l) THEN
|
|
WAV(ustop/pl)
|
|
ENDIF
|
|
WAV(ustop/p)
|
|
endphoneme
|
|
|
|
|
|
phoneme t
|
|
import_phoneme ipa/t
|
|
voicingswitch d
|
|
endphoneme
|
|
|
|
phoneme t[ // dental variant of /t/
|
|
import_phoneme ipa/t_d
|
|
voicingswitch d[
|
|
endphoneme
|
|
|
|
|
|
phoneme tS // **ch**urch
|
|
import_phoneme ipa/tS\)
|
|
voicingswitch dZ
|
|
endphoneme
|
|
|
|
|
|
phoneme tS;
|
|
vls alp sib afr
|
|
voicingswitch dZ;
|
|
ipa tɕ
|
|
lengthmod 2
|
|
Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
|
|
|
|
IF nextPh(isPause2) THEN
|
|
WAV(ustop/ts_pzd)
|
|
ENDIF
|
|
WAV(ustop/ts_pzd)
|
|
endphoneme
|
|
|
|
|
|
phoneme c
|
|
vls pal stp pzd
|
|
voicingswitch J
|
|
lengthmod 2
|
|
Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
|
|
Vowelout f1=1 f2=2700 400 600 f3=200 70 len=50 colr=1
|
|
|
|
IF nextPh(isPause2) THEN
|
|
WAV(ustop/t_pzd, 30)
|
|
ENDIF
|
|
WAV(ustop/c, 150)
|
|
endphoneme
|
|
|
|
|
|
phoneme k
|
|
vls vel stp
|
|
voicingswitch g
|
|
lengthmod 2
|
|
Vowelin f1=0 f2=2300 200 300 f3=-200 80
|
|
Vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20
|
|
|
|
IF KlattSynth THEN
|
|
Vowelout f1=0 f2=2300 200 300 f3=-200 80 rms=20
|
|
ENDIF
|
|
|
|
IF nextPh(isPause2) THEN
|
|
WAV(ustop/k_)
|
|
ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
|
|
WAV(ustop/kr)
|
|
ELIF nextPh(#i) OR nextPh(;) THEN
|
|
WAV(ustop/ki)
|
|
ELIF nextPh(l) THEN
|
|
WAV(ustop/kl)
|
|
ELIF nextPh(@-) THEN
|
|
WAV(ustop/k_unasp, 70)
|
|
ENDIF
|
|
WAV(ustop/k)
|
|
endphoneme
|
|
|
|
|
|
phoneme q
|
|
vls uvl stp
|
|
lengthmod 2
|
|
Vowelin f1=1 f2=1700 0 200 f3=-300 80 gpaus f4 rms=30
|
|
Vowelout f1=1 f2=1700 -100 200 f3=-300 80 f4 rms=35
|
|
|
|
IF nextPh(isPause2) THEN
|
|
WAV(ustop/q, 40)
|
|
ELIF nextPh(#u) THEN
|
|
WAV(ustop/q_u, 80)
|
|
ENDIF
|
|
WAV(ustop/q, 48)
|
|
endphoneme
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// UNVOICED fricatives
|
|
//*******************************************************************
|
|
|
|
phoneme f
|
|
vls lbd frc
|
|
voicingswitch v
|
|
lengthmod 3
|
|
Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/f_)
|
|
ENDIF
|
|
WAV(ufric/f)
|
|
endphoneme
|
|
|
|
|
|
phoneme T // **th**in
|
|
vls dnt frc
|
|
voicingswitch D
|
|
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/th_)
|
|
ENDIF
|
|
WAV(ufric/th)
|
|
endphoneme
|
|
|
|
|
|
phoneme s
|
|
vls alv frc sib
|
|
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_)
|
|
ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
|
|
WAV(ufric/s!)
|
|
ENDIF
|
|
WAV(ufric/s)
|
|
endphoneme
|
|
|
|
|
|
phoneme S // **sh**op
|
|
vls pla frc sib
|
|
voicingswitch Z
|
|
lengthmod 3
|
|
Vowelin f1=0 f2=2100 100 300 f3=-100 80
|
|
Vowelout f1=0 f2=2100 100 300 f3=-100 80
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/sh_)
|
|
ENDIF
|
|
WAV(ufric/sh)
|
|
endphoneme
|
|
|
|
|
|
phoneme s.
|
|
vls pla frc sib
|
|
ipa ʂ
|
|
voicingswitch z.
|
|
lengthmod 3
|
|
Vowelin f1=0 f2=1800 -100 300 f3=-300 80
|
|
Vowelout f1=0 f2=1800 -100 300 f3=-300 80
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/sh_rfx, 60)
|
|
ENDIF
|
|
WAV(ufric/sh_rfx, 90)
|
|
endphoneme
|
|
|
|
|
|
phoneme s;
|
|
vls pal frc sib pzd
|
|
ipa ʂ
|
|
voicingswitch z;
|
|
lengthmod 3
|
|
Vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70
|
|
Vowelout f1=1 f2=2700 400 600 f3=200 70 rate len=70
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/s_pzd_)
|
|
ENDIF
|
|
WAV(ufric/s_pzd)
|
|
endphoneme
|
|
|
|
|
|
phoneme S;
|
|
vls alp sib frc
|
|
voicingswitch Z;
|
|
ipa ɕ
|
|
lengthmod 3
|
|
Vowelin f1=1 f2=2700 400 600 f3=200 70 rate len=70
|
|
Vowelout f1=1 f2=2700 400 600 f3=200 70 rate
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/sh_pzd_)
|
|
ENDIF
|
|
WAV(ufric/sh_pzd)
|
|
endphoneme
|
|
|
|
|
|
phoneme l# // Lateral fricative (eg. Welsh "ll")
|
|
vls alv frc
|
|
ipa ɬ
|
|
lengthmod 3
|
|
|
|
NextVowelStarts
|
|
VowelStart(l/l@)
|
|
VowelStart(l/la)
|
|
VowelStart(l/le)
|
|
VowelStart(l/li, -10)
|
|
VowelStart(l/lo)
|
|
VowelStart(l/lu)
|
|
EndSwitch
|
|
|
|
IF prevPh(isVowel) THEN
|
|
VowelEnding(l/xl, -40)
|
|
ENDIF
|
|
|
|
WAV(ufric/l#, 60)
|
|
endphoneme
|
|
|
|
|
|
phoneme C // German i**ch**
|
|
vls pal frc
|
|
lengthmod 3
|
|
Vowelin f1=0 f2=2700 400 600 f3=200 70
|
|
Vowelout f1=0 f2=2700 400 600 f3=200 70 rms=20
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/ch_)
|
|
ENDIF
|
|
WAV(ufric/ch)
|
|
endphoneme
|
|
|
|
|
|
phoneme x // German bu**ch**
|
|
vls vel frc
|
|
voicingswitch Q
|
|
lengthmod 3
|
|
Vowelin f1=0 f2=2300 200 400 f3=-100 80
|
|
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/x_, 60)
|
|
ENDIF
|
|
WAV(ufric/x_hr, 20)
|
|
endphoneme
|
|
|
|
|
|
phoneme X
|
|
vls uvl frc
|
|
voicingswitch Q"
|
|
lengthmod 3
|
|
|
|
IF nextPh(isPause) THEN
|
|
WAV(ufric/xx, 70)
|
|
ENDIF
|
|
WAV(ufric/xx,80)
|
|
endphoneme
|
|
|
|
|
|
phoneme h
|
|
vls glt apr
|
|
lengthmod 3
|
|
ipa h
|
|
|
|
IF nextPh(#@) THEN
|
|
WAV(h/h@)
|
|
ELIF nextPh(#a) THEN
|
|
WAV(h/ha)
|
|
ELIF nextPh(#e) THEN
|
|
WAV(h/he)
|
|
ELIF nextPh(#i) THEN
|
|
WAV(h/hi)
|
|
ELIF nextPh(#o) THEN
|
|
WAV(h/ho)
|
|
ELIF nextPh(#u) THEN
|
|
WAV(h/hu)
|
|
ENDIF
|
|
WAV(h/h_, 70) // no vowel following
|
|
endphoneme
|
|
|
|
|
|
|
|
//*******************************************************************
|
|
// ADDITIONAL PHONEME TABLES
|
|
//*******************************************************************
|
|
|
|
phonemetable jp base1
|
|
include ph_japanese
|
|
|
|
phonemetable consonants base1
|
|
include ph_consonants
|
|
|
|
|
|
phonemetable base2 base1
|
|
include ph_base2
|
|
|
|
phonemetable en base1
|
|
include ph_english
|
|
|
|
phonemetable en-n en
|
|
include ph_english_n
|
|
|
|
phonemetable en-us en
|
|
include ph_english_us
|
|
|
|
phonemetable en-sc en
|
|
include ph_english_sc
|
|
|
|
phonemetable en-rp en
|
|
include ph_english_rp
|
|
|
|
phonemetable en-wm en
|
|
include ph_english_wm
|
|
|
|
phonemetable en-wi en
|
|
include ph_english_wi
|
|
|
|
|
|
phonemetable af base1
|
|
include ph_afrikaans
|
|
|
|
phonemetable cy base1
|
|
include ph_welsh
|
|
|
|
phonemetable ga base1
|
|
include ph_irish
|
|
|
|
phonemetable de base1
|
|
include ph_german
|
|
|
|
phonemetable eo base1
|
|
include ph_esperanto
|
|
|
|
phonemetable ia eo
|
|
include ph_interlingua
|
|
|
|
phonemetable jbo eo
|
|
include ph_lojban
|
|
|
|
phonemetable nci base2
|
|
include ph_nahuatl
|
|
|
|
phonemetable fi base1
|
|
include ph_finnish
|
|
|
|
phonemetable et base1
|
|
include ph_estonian
|
|
|
|
phonemetable fr base1
|
|
include ph_french
|
|
|
|
phonemetable fr-ca fr
|
|
include ph_french_ca
|
|
|
|
phonemetable nl base1
|
|
include ph_dutch
|
|
|
|
|
|
phonemetable hi_base base1
|
|
include ph_hindi_base
|
|
|
|
phonemetable hi hi_base
|
|
include ph_hindi
|
|
|
|
phonemetable bn hi_base
|
|
include ph_bengali
|
|
|
|
phonemetable ne hi_base
|
|
include ph_nepali
|
|
|
|
phonemetable ur hi_base
|
|
include ph_urdu
|
|
|
|
phonemetable pa hi_base
|
|
include ph_punjabi
|
|
|
|
phonemetable ta hi_base
|
|
include ph_tamil
|
|
|
|
phonemetable kn hi_base
|
|
include ph_kannada
|
|
|
|
phonemetable ml hi_base
|
|
include ph_malayalam
|
|
|
|
phonemetable gu hi_base
|
|
include ph_gujarati
|
|
|
|
phonemetable mr hi_base
|
|
include ph_marathi
|
|
|
|
|
|
|
|
phonemetable hu base1
|
|
include ph_hungarian
|
|
|
|
phonemetable lt base1
|
|
include ph_lithuanian
|
|
|
|
|
|
phonemetable lv base1
|
|
include ph_latvian
|
|
|
|
phonemetable pl base1
|
|
include ph_polish
|
|
|
|
phonemetable sk pl
|
|
include ph_slovak
|
|
|
|
phonemetable cs sk
|
|
include ph_czech
|
|
|
|
phonemetable hr sk
|
|
include ph_croatian
|
|
|
|
phonemetable mk hr
|
|
include ph_macedonian
|
|
|
|
phonemetable sr hr
|
|
include ph_serbian
|
|
|
|
phonemetable ru base1
|
|
include ph_russian
|
|
|
|
phonemetable bg pl
|
|
include ph_bulgarian
|
|
|
|
|
|
phonemetable it base2
|
|
include ph_italian
|
|
|
|
phonemetable la base1
|
|
include ph_latin
|
|
|
|
phonemetable es base2
|
|
include ph_spanish
|
|
|
|
phonemetable es-la es
|
|
include ph_spanish_la
|
|
|
|
phonemetable ca es
|
|
include ph_catalan
|
|
|
|
phonemetable an es
|
|
include ph_aragon
|
|
|
|
phonemetable eu base2
|
|
include ph_basque
|
|
|
|
phonemetable pt base2
|
|
include ph_pt_brazil
|
|
|
|
phonemetable pt-pt pt
|
|
include ph_portugal
|
|
|
|
phonemetable ro base2
|
|
include ph_romanian
|
|
|
|
phonemetable el base2
|
|
include ph_greek
|
|
|
|
phonemetable grc base2
|
|
include ph_greek_ancient
|
|
|
|
phonemetable sv base1
|
|
include ph_swedish
|
|
|
|
phonemetable no base1
|
|
include ph_norwegian
|
|
|
|
phonemetable is base1
|
|
include ph_icelandic
|
|
|
|
phonemetable vi base1
|
|
include ph_vietnam
|
|
|
|
phonemetable vi-hue vi
|
|
include ph_vietnam_hue
|
|
|
|
phonemetable vi-sgn vi
|
|
include ph_vietnam_sgn
|
|
|
|
phonemetable zhy base1
|
|
include ph_zh_yue
|
|
|
|
phonemetable zh base1
|
|
include ph_zh
|
|
|
|
|
|
phonemetable sw base1
|
|
include ph_swahili
|
|
|
|
phonemetable tr base2
|
|
include ph_turkish
|
|
|
|
phonemetable ku base2
|
|
include ph_kurdish
|
|
|
|
phonemetable id base2
|
|
include ph_indonesian
|
|
|
|
phonemetable sq base1
|
|
include ph_albanian
|
|
|
|
phonemetable hy base1
|
|
include ph_armenian
|
|
|
|
phonemetable da base1
|
|
include ph_danish
|
|
|
|
phonemetable ka base1
|
|
include ph_georgian
|
|
|
|
phonemetable fa base1
|
|
include ph_farsi
|
|
|
|
phonemetable ar base1
|
|
include ph_arabic
|
|
|
|
phonemetable rw base2
|
|
include ph_kinyarwanda
|
|
|
|
phonemetable prs base1
|
|
include ph_dari
|
|
|
|
phonemetable sl pl
|
|
include ph_slovenian
|
|
|
|
phonemetable gd base1
|
|
include ph_s_gaelic
|
|
|
|
phonemetable nso base1
|
|
include ph_northern-sotho
|
|
|
|
phonemetable ht fr
|
|
include ph_haitian
|
|
|
|
phonemetable az tr
|
|
include ph_azerbaijani
|
|
|
|
phonemetable ak base1
|
|
include ph_akan
|
|
|
|
phonemetable am base1
|
|
include ph_amhari
|
|
|
|
phonemetable wo base1
|
|
include ph_wolof
|
|
|
|
phonemetable dv hi_base
|
|
include ph_divehi
|
|
|
|
phonemetable te hi_base
|
|
include ph_telugu
|
|
|
|
phonemetable si hi_base
|
|
include ph_sinhala
|
|
|
|
phonemetable as bn
|
|
include ph_assamese
|
|
|
|
phonemetable or bn
|
|
include ph_oriya
|
|
|
|
phonemetable mni bn
|
|
include ph_manipuri
|
|
|
|
phonemetable tn base1
|
|
include ph_setswana
|
|
|
|
phonemetable mt base1
|
|
include ph_maltese
|
|
|
|
phonemetable bo hi
|
|
include ph_tibetan
|
|
|
|
phonemetable kk base1
|
|
include ph_kazakh
|
|
|
|
phonemetable tt base1
|
|
include ph_tatar
|
|
|
|
phonemetable ko base1
|
|
include ph_korean
|
|
|
|
phonemetable kl base1
|
|
include ph_greenlandic
|
|
|
|
phonemetable om base1
|
|
include ph_oromo
|
|
|
|
phonemetable my base1
|
|
include ph_burmese
|
|
|
|
phonemetable gn base1
|
|
include ph_guarani
|
|
|
|
phonemetable ky base1
|
|
include ph_kyrgyz
|