123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730 |
- // ph_pashto - Phoneme table for Pashto language
- // Created: March 2025 by Hanif Rahman
- // Updated: March 2025 - Fixed vowel formants, improved retroflex consonants, corrected stress patterns
- // This file defines phonemes specific to Pashto language
-
-
- //====================================================
- // VOWELS
- //====================================================
-
- phoneme a // َ (zabar/fatha) - short 'a' as in "man"
- vwl starttype #a endtype #a
- length 180
- ipa a
- FMT(vowel/a)
- endphoneme
-
- phoneme a: // ا - long 'aa' as in "father"
- vwl starttype #a endtype #a
- length 280
- ipa aː
- FMT(vowel/a) // Keeping formant consistent with short 'a'
- endphoneme
-
- phoneme e // ِ (zer/kasra) - short 'e' as in "bed" "ketab"
- vwl starttype #e endtype #e
- length 170
- ipa e
- FMT(vowel/e)
- endphoneme
-
- phoneme e: // ې - long 'ee' as in "bait" "peshawar"
- vwl starttype #e endtype #e
- length 250
- ipa eː
- FMT(vowel/e_mid) // Using e_mid for better long vowel quality
- endphoneme
-
- phoneme i // ِ (zer/kasra) - short 'i' as in "sit" same as e?
- vwl starttype #i endtype #i
- length 170
- ipa i
- IfNextVowelAppend(;)
- FMT(vowel/i)
- endphoneme
-
- phoneme i: // ي - long 'ee' as in "see"
- vwl starttype #i endtype #i
- length 250
- ipa iː
- IfNextVowelAppend(;)
- FMT(vowel/i) // Using standard i vowel
- endphoneme
-
- phoneme o // ُ (pesh/damma) - short 'o' as in "pot"
- vwl starttype #o endtype #o
- length 170
- ipa o
- FMT(vowel/o)
- endphoneme
-
- phoneme o: // و - long 'o' as in "go"
- vwl starttype #o endtype #o
- length 250
- ipa oː
- FMT(vowel/o) // Using standard o vowel
- endphoneme
-
- phoneme u // ُ (pesh/damma) - short 'u' as in "put"
- vwl starttype #u endtype #u
- length 170
- ipa u
- FMT(vowel/u)
- endphoneme
-
- phoneme u: // و - long 'oo' as in "moon"
- vwl starttype #u endtype #u
- length 250
- ipa uː
- FMT(vowel/u) // Using standard u vowel
- endphoneme
-
- phoneme @ // ə - schwa sound as in "about"
- vwl starttype #@ endtype #@
- length 130
- ipa ə
- unstressed
- FMT(vowel/@)
- endphoneme
-
- // Add unstressed variants of vowels for better prosody
- phoneme a# // َ (zabar/fatha) - unstressed short 'a'
- vwl starttype #a endtype #a
- length 140 // shorter than stressed version
- ipa a
- unstressed
- FMT(vowel/a_8)
- endphoneme
-
- phoneme i# // ِ (zer/kasra) - unstressed short 'i'
- vwl starttype #i endtype #i
- length 130 // shorter than stressed version
- ipa i
- unstressed
- IfNextVowelAppend(;)
- FMT(vowel/i_6)
- endphoneme
-
- phoneme u# // ُ (pesh/damma) - unstressed short 'u'
- vwl starttype #u endtype #u
- length 130 // shorter than stressed version
- ipa u
- unstressed
- FMT(vowel/u_6)
- endphoneme
-
- //====================================================
- // CONSONANTS SPECIFIC TO PASHTO
- //====================================================
-
- phoneme ts
- // څ in Pashto - voiceless alveolar affricate
- vls alv afr
- lengthmod 2
- ipa ts
- Vowelin f1=0 f2=1700 -300 300 f3=-100 80
- Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
- WAV(ustop/ts)
- endphoneme
-
- phoneme dz
- // ځ in Pashto - voiced alveolar affricate
- vcd alv afr
- lengthmod 5
- ipa dz
- voicingswitch ts
- Vowelin f1=1 f2=1700 -300 300 f3=-100 80
- Vowelout f1=1 f2=1700 -300 300 f3=-100 80 brk
- WAV(ustop/ts) addWav(x/d, 70) // Using standard WAV files
- endphoneme
-
- phoneme t.
- // ټ in Pashto - retroflex/plosive t
- vls rfx stp
- lengthmod 2
- ipa ʈ
- voicingswitch d.
- Vowelin f1=0 f2=1800 -300 300 f3=-200 80 colr=2
- Vowelout f1=0 f2=1800 -300 250 f3=-200 80 colr=2 rms=20
- WAV(ustop/t_) // Using standard t_ WAV
- endphoneme
-
- phoneme d.
- // ډ in Pashto - retroflex/plosive d
- vcd rfx stp
- lengthmod 5
- ipa ɖ
- voicingswitch t.
- Vowelin f1=2 f2=1800 -300 300 f3=-200 80 colr=2
- Vowelout f1=2 f2=1800 -300 300 f3=-200 80 colr=2 brk
- WAV(ustop/t_) addWav(x/d, 60) // Using standard WAV files
- endphoneme
-
- phoneme r.
- // ړ in Pashto - retroflex flap
- vcd rfx flp
- lengthmod 6
- ipa ɽ
- Vowelin f1=3 f2=1200 -400 -100 f3=-400 80 colr=2
- Vowelout f1=3 f2=1200 -400 -100 f3=-400 80 colr=2
- FMT(r3/r_) addWav(r3/rx, 80) // Using standard FMT
- endphoneme
-
- phoneme n.
- // ڼ in Pashto - retroflex nasal
- vcd rfx nas
- lengthmod 4
- ipa ɳ
- Vowelin f1=2 f2=1200 -500 -300 f3=-400 80 colr=2
- Vowelout f1=2 f2=1200 -500 -300 f3=-400 80 colr=2
- FMT(n/n_) // Using standard FMT
- endphoneme
-
- phoneme S.
- // ښ in Pashto - retroflex fricative
- vls rfx frc sib
- lengthmod 3
- ipa ʂ
- voicingswitch Z.
- Vowelin f1=0 f2=1800 -100 300 f3=-400 80 colr=2
- Vowelout f1=0 f2=1800 -100 300 f3=-400 80 colr=2
- WAV(ufric/sh) // Using standard sh WAV
- endphoneme
-
- phoneme Z.
- // ژ in Pashto - voiced retroflex fricative
- vcd rfx frc sib
- lengthmod 6
- ipa ʐ
- voicingswitch S.
- Vowelin f1=0 f2=1800 0 300 f3=-400 80 colr=2
- Vowelout f1=2 f2=1800 0 300 f3=-400 80 colr=2 brk
- FMT(voc/zh) addWav(vocw/zh, 110) // Using standard zh WAV
- endphoneme
-
- phoneme Z
- // ژ in Pashto - voiced post-alveolar fricative (like French j)
- vcd pla frc sib
- lengthmod 6
- ipa ʒ
- voicingswitch S
- Vowelin f1=0 f2=2000 0 300 f3=-200 80
- Vowelout f1=2 f2=2000 0 300 f3=-200 80 brk
- FMT(voc/zh) addWav(vocw/zh, 130)
- endphoneme
-
- phoneme Q
- // غ in Pashto - voiced uvular fricative
- vcd uvl frc
- lengthmod 6
- ipa ʁ
- voicingswitch X
- Vowelin f1=2 f2=1000 -500 -350 f3=-200 80
- Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
- FMT(voc/Q) addWav(vocw/Q, 60) // Increased WAV amplitude for better voicing
- endphoneme
-
- phoneme X
- // خ in Pashto - voiceless uvular fricative
- vls uvl frc
- lengthmod 3
- ipa χ
- voicingswitch Q
- Vowelin f1=0 f2=1000 -500 -350 f3=-200 80
- Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
- WAV(ufric/xx, 90) // Adjusted amplitude for better contrast with Q
- endphoneme
-
- phoneme g
- // ګ in Pashto - voiced velar stop
- vcd vel stp
- lengthmod 5
- ipa ɡ
- voicingswitch k
- Vowelin f1=2 f2=2300 200 300 f3=-300 80
- Vowelout f1=2 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_)
- ENDIF
- FMT(g/g) addWav(x/g2, 150)
- endphoneme
-
- //====================================================
- // CONSONANTS SHARED WITH OTHER LANGUAGES
- //====================================================
-
- phoneme p
- vls blb stp
- voicingswitch b
- lengthmod 2
- ipa p
- Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
- Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
- WAV(ustop/p)
- endphoneme
-
- phoneme b
- vcd blb stp
- voicingswitch p
- lengthmod 5
- ipa b
- Vowelin f1=2 f2=1000 -500 -300 f3=-300 80
- Vowelout f1=2 f2=1000 -500 -300 f3=-300 80 brk
- IF PreVoicing THEN
- FMT(b/xb)
- ENDIF
- IF nextPh(isPause2) THEN
- FMT(b/b_) addWav(x/b_)
- ENDIF
- FMT(b/b) addWav(x/b)
- endphoneme
-
- phoneme t
- vls alv stp
- voicingswitch d
- lengthmod 2
- ipa t
- 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)
- endphoneme
-
- phoneme d
- vcd alv stp
- voicingswitch t
- lengthmod 5
- ipa d
- Vowelin f1=1 f2=1700 -300 300 f3=-100 80
- Vowelout f1=1 f2=1700 -300 300 f3=-100 80 brk
- IF PreVoicing THEN
- FMT(d/xd)
- ENDIF
- IF nextPh(isPause2) THEN
- FMT(d/d_) addWav(x/d_)
- ENDIF
- FMT(d/d) addWav(x/d)
- endphoneme
-
- phoneme k
- vls vel stp
- voicingswitch g
- lengthmod 2
- ipa k
- Vowelin f1=0 f2=2300 200 300 f3=-200 80
- Vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20
- IF nextPh(isPause2) THEN
- WAV(ustop/k_)
- ENDIF
- WAV(ustop/k)
- endphoneme
-
- phoneme tS
- // چ in Pashto - voiceless post-alveolar affricate
- vls pla afr sib
- voicingswitch dZ
- lengthmod 2
- ipa t͡ʃ
- Vowelin f1=0 f2=2300 200 400 f3=-100 80
- Vowelout f1=0 f2=2300 300 400 f3=-100 80
- WAV(ustop/tsh)
- endphoneme
-
- phoneme dZ
- // ج in Pashto - voiced post-alveolar affricate
- vcd pla afr sib
- voicingswitch tS
- lengthmod 5
- ipa d͡ʒ
- Vowelin f1=2 f2=2300 200 400 f3=-100 80
- Vowelout f1=2 f2=2300 250 300 f3=-100 80 brk
- IF PreVoicing THEN
- FMT(dzh/xdzh)
- ENDIF
- IF nextPh(isPause2) THEN
- FMT(dzh/dzh_) addWav(x/dzh_)
- ENDIF
- FMT(dzh/dzh) addWav(x/dzh)
- endphoneme
-
- phoneme f
- vls lbd frc
- voicingswitch v
- lengthmod 3
- ipa f
- Vowelin f1=0 f2=1000 -500 -350 f3=-200 80
- Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
- WAV(ufric/f)
- endphoneme
-
- phoneme v
- vcd lbd frc
- voicingswitch f
- lengthmod 6
- ipa v
- Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
- Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
- IF nextPh(isPause2) THEN
- FMT(voc/v_) addWav(vocw/v)
- ENDIF
- FMT(voc/v) addWav(vocw/v)
- endphoneme
-
- phoneme s
- vls alv frc sib
- voicingswitch z
- lengthmod 3
- ipa s
- Vowelin f1=0 f2=1700 -300 300 f3=-100 80
- Vowelout f1=0 f2=1700 -300 300 f3=-100 80
- WAV(ufric/s)
- endphoneme
-
- phoneme z
- vcd alv frc sib
- voicingswitch s
- lengthmod 6
- ipa z
- Vowelin f1=0 f2=1700 -300 300 f3=-100 80
- Vowelout f1=0 f2=1700 -300 300 f3=-100 80 brk
- IF nextPh(isPause2) THEN
- FMT(voc/z_) addWav(ufric/s_, 70)
- ENDIF
- FMT(voc/z) addWav(ufric/s_, 85)
- endphoneme
-
- phoneme S
- vls pla frc sib
- voicingswitch Z
- lengthmod 3
- ipa ʃ
- 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
- ipa x
- Vowelin f1=0 f2=2300 200 400 f3=-200 80
- Vowelout f1=0 f2=2300 300 400 f3=-200 80
- WAV(ufric/x_hr, 30) // Increased amplitude for better clarity
- endphoneme
-
- phoneme h
- vls glt frc
- lengthmod 3
- ipa h
- Vowelin f1=0 f2=2300 200 400 f3=-200 80 // Added Vowelin parameters
- Vowelout f1=0 f2=2300 300 400 f3=-200 80
- 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)
- endphoneme
-
- phoneme m
- vcd blb nas
- lengthmod 4
- ipa m
- Vowelin f1=0 f2=1000 -50 -200 f3=-200 80 // Moved Vowelin before Vowelout for consistency
- Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
-
- IF KlattSynth THEN
- IF nextPh(isPause2) THEN
- FMT(klatt/m_)
- ENDIF
- FMT(klatt/m)
- ENDIF
-
- NextVowelStarts
- VowelStart(m/m@)
- VowelStart(m/ma)
- VowelStart(m/me)
- VowelStart(m/mi)
- VowelStart(m/mo)
- VowelStart(m/mu)
- EndSwitch
-
- IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
- FMT(m/mj)
- ELIF prevPh(isPause) THEN
- FMT(m/_m)
- ELIF nextPh(isNotVowel) THEN
- FMT(m/m_)
- ENDIF
- endphoneme
-
- phoneme n
- vcd alv nas
- lengthmod 4
- ipa n
- Vowelin f1=0 f2=1500 -200 200 f3=0 80 // Moved Vowelin before Vowelout for consistency
- Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
-
- IF KlattSynth THEN
- 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
- FMT(n/n_)
- ENDIF
- endphoneme
-
- phoneme N
- vcd vel nas
- lengthmod 8
- ipa ŋ
- Vowelin f1=0 f2=2100 50 300 f3=0 80 // Moved Vowelin before Vowelout for consistency
- Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk
-
- IF KlattSynth THEN
- IF nextPh(isPause2) THEN
- FMT(klatt/nn_)
- ENDIF
- FMT(klatt/nn)
- ENDIF
-
- NextVowelStarts
- VowelStart(nn/nn@)
- VowelStart(nn/nna)
- VowelStart(nn/nne)
- VowelStart(nn/nni)
- VowelStart(nn/nno)
- VowelStart(nn/nnu)
- EndSwitch
-
- IF prevPh(#i) THEN
- VowelEnding(nn/inn, -40)
- ENDIF
-
- IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
- FMT(nn/nnj)
- ELIF prevPh(isPause) THEN
- FMT(nn/_nn)
- ELIF nextPh(isNotVowel) THEN
- FMT(nn/nn_)
- ENDIF
- endphoneme
-
- phoneme l
- liquid
- lengthmod 7
- ipa l
-
- IF nextPh(isNotVowel) THEN
- ChangePhoneme(l/)
- 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/
- liquid
- lengthmod 7
- ipa l̥
-
- 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
-
- IF prevPhW(j) THEN
- FMT(l/L1_eL)
- ENDIF
- IF prevPhW(w) THEN
- FMT(l/L1_eL)
- ENDIF
-
- FMT(l/l_)
- endphoneme
-
- phoneme r
- liquid rhotic
- lengthmod 7
- ipa r
-
- IF nextPh(isNotVowel) THEN
- ChangePhoneme(r/)
- ENDIF
-
- 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
-
- IF prevPh(isPause) THEN
- FMT(r/_r)
- ELIF prevPh(t) OR prevPh(p) OR prevPh(k) THEN
- FMT(r/tr)
- ENDIF
-
- FMT(r/r)
- endphoneme
-
- phoneme r/
- liquid rhotic
- lengthmod 2
- ipa r̥
-
- IF prevPh(t) OR prevPh(p) OR prevPh(k) THEN
- FMT(r/trr)
- ENDIF
-
- IF prevPh(isNotVowel) THEN
- FMT(r/rr)
- ENDIF
-
- FMT(r3/r_) addWav(r3/rx)
- endphoneme
-
- phoneme j
- liquid pal starttype #i
- lengthmod 7
- ipa j
-
- IF nextPhW(isVowel) THEN
- NextVowelStarts
- VowelStart(j/j@)
- VowelStart(j/ja)
- VowelStart(j/je)
- VowelStart(j/ji)
- VowelStart(j/jo)
- VowelStart(j/ju)
- EndSwitch
-
- VowelEnding(j/xj, -30)
-
- IF prevPh(isPause) THEN
- FMT(j/_j)
- ENDIF
- ELSE
- // no vowel follows
- Vowelout len=70
- FMT(j/j_)
- ENDIF
- endphoneme
-
- phoneme w
- liquid
- lengthmod 7
- starttype #u
- ipa w
-
- IF nextPh(isVowel) THEN
- NextVowelStarts
- VowelStart(w/w@)
- VowelStart(w/wa)
- VowelStart(w/we)
- VowelStart(w/wi)
- VowelStart(w/wo)
- VowelStart(w/wu)
- EndSwitch
-
- VowelEnding(w/xw, -30)
-
- IF prevPhW(isNasal) THEN
- FMT(w/w)
- ELSEIF prevPhW(h) THEN
- // none, [hw]
- 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 q
- vls uvl stp
- lengthmod 2
- ipa q
- 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
-
- phoneme ?
- vls glt stp
- lengthmod 3
- ipa ʔ
- nolink
- Vowelin glstop
- Vowelout glstop
- WAV(ustop/null)
- endphoneme
|