| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 | //  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
 |