ph_malayalam 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. // Phonemes for Malayalam
  2. // This inherits from ph_hindi
  3. phoneme @
  4. vwl starttype #@ endtype #@
  5. length 130
  6. FMT(vowel/@_low)
  7. endphoneme
  8. phoneme y // epenthetic vowel
  9. vwl starttype #@ endtype #@
  10. unstressed
  11. ipa ɨ
  12. length 80
  13. FMT(vowel/u#_4, 120)
  14. endphoneme
  15. phoneme a
  16. vwl starttype #a endtype #a
  17. ipa ɐ
  18. length 130
  19. IF thisPh(isStressed) OR thisPh(isFirstVowel) OR thisPh(isWordEnd) THEN
  20. FMT(vowel/a#_4)
  21. ELSE
  22. ChangeIfUnstressed(@)
  23. IF nextPh(m) AND nextPh(isWordEnd) THEN
  24. ChangePhoneme(@)
  25. ENDIF
  26. FMT(vowel/a#_3)
  27. ENDIF
  28. endphoneme
  29. phoneme a# // don't reduce to [@]
  30. vwl starttype #a endtype #a
  31. ChangePhoneme(a)
  32. endphoneme
  33. phoneme a:
  34. vwl lng starttype #a endtype #a
  35. length 300
  36. FMT(vowel/a_5)
  37. endphoneme
  38. phoneme e
  39. vwl starttype #e endtype #e
  40. length 130
  41. FMT(vowel/e)
  42. endphoneme
  43. phoneme e:
  44. vwl lng starttype #e endtype #e
  45. length 270
  46. FMT(vowel/e)
  47. endphoneme
  48. phoneme i
  49. vwl starttype #i endtype #i
  50. length 130
  51. FMT(vowel/i_6)
  52. endphoneme
  53. phoneme I
  54. vwl starttype #i endtype #i
  55. length 130
  56. FMT(vowel/ii)
  57. endphoneme
  58. phoneme i:
  59. vwl lng starttype #i endtype #i
  60. length 270
  61. FMT(vowel/i)
  62. endphoneme
  63. phoneme o
  64. vwl starttype #o endtype #o
  65. length 130
  66. FMT(vowel/o)
  67. endphoneme
  68. phoneme o:
  69. vwl lng starttype #o endtype #o
  70. length 300
  71. FMT(vowel/o)
  72. endphoneme
  73. phoneme u
  74. vwl starttype #u endtype #u
  75. length 110
  76. FMT(vowel/u)
  77. endphoneme
  78. phoneme u:
  79. vwl lng starttype #u endtype #u
  80. length 280
  81. FMT(vowel/u)
  82. endphoneme
  83. phoneme aI
  84. vwl lng starttype #a endtype #i
  85. length 280
  86. FMT(vdiph/ai)
  87. endphoneme
  88. phoneme aU
  89. vwl lng starttype #a endtype #u
  90. length 270
  91. FMT(vdiph/aau_3)
  92. endphoneme
  93. // ?? This is standard [v]. Should be it [v] without the fricative noise?
  94. phoneme v
  95. import_phoneme base1/v
  96. endphoneme
  97. phoneme r
  98. import_phoneme base1/**
  99. endphoneme
  100. phoneme R
  101. import_phoneme base1/R2
  102. endphoneme
  103. phoneme d2 // 'rr' sounds like English 'd'
  104. import_phoneme base1/d
  105. endphoneme
  106. // Aspirated voice stops, sound like aspirated unvoiced stops ?
  107. phoneme b#
  108. vls blb stp prevoice
  109. lengthmod 2
  110. voicingswitch b
  111. Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
  112. Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
  113. IF PreVoicing THEN
  114. IF prevPhW(isVowel) THEN
  115. FMT(b/xb)
  116. ELSE
  117. FMT(voc/murmur1)
  118. ENDIF
  119. ENDIF
  120. IF nextPh(isPause2) THEN
  121. WAV(ustop/p_)
  122. ENDIF
  123. IF nextPh(l) THEN
  124. WAV(ustop/pl)
  125. ENDIF
  126. WAV(ustop/p_asp)
  127. endphoneme
  128. phoneme d#
  129. vls dnt stp prevoice
  130. lengthmod 2
  131. voicingswitch d
  132. Vowelin f1=0 f2=1500 -300 300 f3=-100 80 amp=16
  133. Vowelout f1=0 f2=1500 -300 250 f3=-100 80 rms=20
  134. IF PreVoicing THEN
  135. IF prevPhW(isVowel) THEN
  136. FMT(d/xd)
  137. ELSE
  138. FMT(voc/murmur1)
  139. ENDIF
  140. ENDIF
  141. IF nextPh(isPause2) THEN
  142. WAV(ustop/t_dnt, 35)
  143. ENDIF
  144. WAV(ustop/t_dnt, 50)
  145. endphoneme
  146. phoneme t.#
  147. vls rfx stp
  148. lengthmod 2
  149. ipa ʈU+02B0
  150. voicingswitch d.#
  151. Vowelin f1=0 f2=1800 -300 300 f3=-200 80
  152. Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2
  153. IF nextPhW(t.#) THEN
  154. ChangePhoneme(t.)
  155. ENDIF
  156. WAV(ustop/th_rfx2, 80)
  157. endphoneme
  158. phoneme d.#
  159. vls rfx stp prevoice
  160. lengthmod 2
  161. ipa ʈU+02B0
  162. Vowelin f1=0 f2=1800 -300 300 f3=-200 80
  163. Vowelout f1=0 f2=1800 -300 250 f3=-400 80 rms=20 colr=2
  164. IF PreVoicing THEN
  165. IF prevPhW(isVowel) THEN
  166. FMT(d/xdr)
  167. ELSE
  168. FMT(voc/murmur1)
  169. ENDIF
  170. ENDIF
  171. voicingswitch d.#
  172. WAV(ustop/th_rfx2, 80)
  173. endphoneme
  174. phoneme J#
  175. vls pal afr sib pzd prevoice
  176. voicingswitch c#
  177. lengthmod 2
  178. Vowelin f1=0 f2=2700 400 600 f3=300 80 rate len=70
  179. IF PreVoicing THEN
  180. IF prevPhW(isVowel) THEN
  181. FMT(dzh/xdz_pzd)
  182. ELSE
  183. FMT(voc/murmur1)
  184. ENDIF
  185. ENDIF
  186. IF nextPh(isPause2) THEN
  187. WAV(ustop/ts_pzd)
  188. ENDIF
  189. WAV(ustop/ts_pzd)
  190. endphoneme
  191. phoneme g#
  192. vls vel stp prevoice
  193. lengthmod 2
  194. Vowelin f1=1 f2=1400 -100 100 f3=-150 80
  195. Vowelout f1=0 f2=2300 300 400 f3=-150 80 rms=20
  196. IF PreVoicing THEN
  197. IF prevPhW(isVowel) THEN
  198. FMT(g/xg)
  199. ELSE
  200. FMT(voc/murmur1)
  201. ENDIF
  202. ENDIF
  203. IF nextPh(isPause2) THEN
  204. WAV(ustop/k_asp, 40)
  205. ENDIF
  206. IF nextPhW(#e) OR nextPhW(#i) THEN
  207. WAV(ustop/k_asp_e, 40)
  208. ELIF nextPhW(#o) OR nextPhW(#u) THEN
  209. WAV(ustop/k_asp_a, 25)
  210. ELSE
  211. WAV(ustop/k_asp_a, 30)
  212. ENDIF
  213. endphoneme
  214. // suggested by Prasenjit Sen, but perhaps not needed?
  215. // ml_rules changes [p], [t], [k] to [b], [d], [g] in non-initial
  216. // positions
  217. phoneme p
  218. import_phoneme consonants/p-
  219. voicingswitch b
  220. IF thisPh(isWordStart) THEN
  221. CALL base1/p
  222. ELIF thisPh(isWordEnd) AND NOT thisPh(isFirstVowel) THEN
  223. ChangePhoneme(b)
  224. ENDIF
  225. endphoneme
  226. phoneme t
  227. import_phoneme base1/t[
  228. voicingswitch d
  229. IF thisPh(isWordStart) THEN
  230. CALL base1/t
  231. ELIF thisPh(isWordEnd) AND NOT thisPh(isFirstVowel) THEN
  232. ChangePhoneme(d)
  233. ENDIF
  234. endphoneme
  235. phoneme k
  236. import_phoneme consonants/k-
  237. voicingswitch g
  238. IF thisPh(isWordStart) THEN
  239. CALL base1/k
  240. ELIF thisPh(isWordEnd) AND NOT thisPh(isFirstVowel) THEN
  241. ChangePhoneme(g)
  242. ENDIF
  243. endphoneme