Files
espeak-ng/phsource/ph_arabic
T
2014-05-23 12:46:15 +00:00

518 lines
8.6 KiB
Plaintext
Executable File

// short vowels
phoneme a
vowel starttype #a endtype #a
unstressed
length 180
CALL ShortVowelLength
IF prevPh(s[) OR prevPh(d[) OR prevPh(t[) OR prevPh(Z) THEN
FMT(vowel/0_3)
ELSE
FMT(vowel/a#)
ENDIF
endphoneme
phoneme i
vowel starttype #i endtype #i
length 140
unstressed
CALL ShortVowelLength
FMT(vowel/i)
endphoneme
phoneme u
vowel starttype #u endtype #u
unstressed
length 140
CALL ShortVowelLength
FMT(vowel/u)
endphoneme
phoneme : // lengthen previous vowel by "length"
virtual
length 200
endphoneme
// long vowels
phoneme a:
vowel starttype #a endtype #a
length 300
//CALL LongVowelLength
IF prevPh(s[) OR prevPh(d[) OR prevPh(t[) OR prevPh(Z) THEN
FMT(vowel/0_3)
ELSE
FMT(vowel/a#)
ENDIF
endphoneme
phoneme i:
vowel starttype #i endtype #i
length 300
//CALL LongVowelLength
FMT(vowel/i)
endphoneme
phoneme u:
vowel starttype #u endtype #u
length 300
//CALL LongVowelLength
FMT(vowel/u)
endphoneme
// Redifine consnant for arabic
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 w
liquid
lengthmod 7
FMT(w/w_)
endphoneme
phoneme j
liquid palatal
lengthmod 7
FMT(j/j_)
endphoneme
//*******************************************************************
// NASAL CONSONANTS
//*******************************************************************
phoneme m
vcd blb nasal
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
lengthmod 4
FMT(m/m_)
endphoneme
phoneme n
vcd alv nasal
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
lengthmod 4
FMT(n/n_)
endphoneme
//*******************************************************************
// VOICED STOPS
//*******************************************************************
phoneme b
vcd blb stop
voicingswitch p
Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk
lengthmod 7
FMT(b/b) addWav(x/b)
endphoneme
phoneme d
vcd alv stop
voicingswitch t
lengthmod 5
Vowelin f1=1 f2=1700 -300 300 f3=-100 80
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
FMT(d/d) addWav(x/d)
endphoneme
phoneme d[
vcd dnt stop
voicingswitch t[
lengthmod 5
Vowelin f1=2 f2=1500 -300 300 f3=-150 80
Vowelout f1=2 f2=1500 -300 300 f3=-150 80
FMT(d/d) addWav(x/d_dnt, 100)
endphoneme
phoneme dZ
vcd pla afr sibilant
voicingswitch tS
//lengthmod 8
Vowelin f1=2 f2=2300 200 400 f3=100 80
Vowelout f1=2 f2=2300 250 300 f3=100 80 brk
FMT(dzh/dzh) addWav(x/dzh)
endphoneme
phoneme J
vcd pal afr sibilant palatal
voicingswitch c
lengthmod 5
Vowelin f1=2 f2=2700 400 600 f3=300 80 rate len=70
Vowelout f1=2 f2=2700 400 600 f3=300 80 colr=1
IF KlattSynth THEN
IF nextPh(isPause2) THEN
FMT(klatt/dz_pzd_) addWav(x/dzh, 35)
ENDIF
FMT(klatt/dz_pzd) addWav(x/dzh, 45)
ENDIF
FMT(dzh/dz_pzd) addWav(x/dzh, 45)
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
FMT(g/g) addWav(x/g2, 150)
endphoneme
//*******************************************************************
// VOICED fricatives
//*******************************************************************
phoneme D
vcd dnt frc
voicingswitch T
lengthmod 6
Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
IF KlattSynth THEN
Vowelin f1=0 f2=1290 -300 300 f3=0 0
ENDIF
FMT(voc/dh) addWav(vocw/dh)
endphoneme
phoneme z
vcd alv frc sibilant
//voicingswitch s
lengthmod 1
Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
IF KlattSynth THEN
Vowelin f1=0 f2=1390 -300 300 f3=0 0
Vowelout f1=1 f2=1390 -300 300 f3=-100 60 len=50 brk
ENDIF
FMT(voc/z) addWav(ufric/s_, 85)
endphoneme
phoneme Z
vcd pla frc sibilant
voicingswitch S
lengthmod 6
Vowelin f1=0 f2=2000 0 300 f3=-200 80
Vowelout f1=2 f2=2000 0 300 f3=-200 80 brk
IF KlattSynth THEN
IF nextPh(isPause2) THEN
FMT(klatt/zh_) addWav(vocw/zh)
ENDIF
FMT(klatt/zh) addWav(vocw/zh, 130)
ENDIF
FMT(voc/zh) addWav(vocw/zh, 130)
endphoneme
//*******************************************************************
// UNVOICED STOPS
//*******************************************************************
phoneme t
vls alv stop
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
WAV(ustop/t, 90)
endphoneme
phoneme t[ // dental variant of /t/
vls dnt stop
voicingswitch d[
lengthmod 2
Vowelin f1=1 f2=1500 -250 250 f3=-100 80 amp=16
Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20
WAV(ustop/t_dnt, 35)
endphoneme
phoneme k
vls vel stop
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
WAV(ustop/k)
endphoneme
phoneme q
vls uvl stop
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
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
WAV(ufric/f)
endphoneme
phoneme T
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
WAV(ufric/th)
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
WAV(ufric/s)
endphoneme
phoneme S
vls pla frc sibilant
voicingswitch Z
lengthmod 3
Vowelin f1=0 f2=2100 100 300 f3=-100 80
Vowelout f1=0 f2=2100 100 300 f3=-100 80
WAV(ufric/sh)
endphoneme
phoneme x
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
//WAV(ufric/x)
WAV(vwl_ar/kha)
endphoneme
phoneme h
vls glt apr
lengthmod 3
ipa h
WAV(h/h_, 70) // no vowel following
endphoneme
// Added specific consnant to arabic
phoneme H // arabic Hah
vls phr frc
ipa U+0127
lengthmod 5
WAV(vwl_ar/H2)
endphoneme
phoneme Z // arabic ZAH .Todo
vls phr frc
lengthmod 5
voicingswitch z
WAV(vwl_ar/ZH4)
endphoneme
phoneme E // arabic Ain
vls phr frc
//ipa U+0127
//voicingswitch a
lengthmod 5
//WAV(vwl_ar/AN2,50)
WAV(vwl_ar/ain2)
endphoneme
phoneme G //arabic Ghain
//vcd uvl frc
vls uvl frc
lengthmod 3
Vowelin f1=0 f2=2300 200 400 f3=-100 80
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
voicingswitch R
//lengthmod 5
//ipa U+0280
WAV(vwl_ar/ghain6)
//FMT(voc/Q_ulv) addWav(vwl_ar/gh, 100)
//FMT(voc/Q_ulv) addWav(vwl_ar/ghain3, 100)
endphoneme
phoneme d[ //arabic Dhad
vls dnt stop
voicingswitch d
length 120
WAV(vwl_ar/da7)
endphoneme
phoneme s[
vls dnt stop
//voicingswitch s
lengthmod 7
WAV(vwl_ar/SA1)
endphoneme
phoneme r
liquid rhotic
ipa ?
lengthmod 7
IF nextPh(a) OR nextPh(a:) THEN
FMT(r/ra)
ENDIF
FMT(r/r_)
endphoneme
procedure ShortVowelLength
//IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN // voiced
IF prevPhW(isNotVowel) AND nextPhW(isNotVowel) THEN // consonants
length 140
RETURN
//ENDIF
ELSE
IF prevPh(isStressed) THEN
length 160
ELSE
length 175
ENDIF
ENDIF
endprocedure
procedure LongVowelLength
//IF prevPhW(isVoiced) AND nextPhW(isVoiced) THEN // voiced
IF nextPhW(:) THEN
length 300
RETURN
//ENDIF
ELIF prevPhW(isNotVowel) AND nextPhW(isNotVowel) THEN // consonants
length 340
RETURN
//ENDIF
ELSE
IF prevPh(isStressed) THEN
length 360
ELSE
length 375
ENDIF
ENDIF
endprocedure