Browse Source

Catalan: Major fixes (#1681)

Co-authored-by: Baybars Külebi <[email protected]>
Co-authored-by: gullabi <[email protected]>
Co-authored-by: mllopartbsc <[email protected]>
master
c-armentano 9 months ago
parent
commit
16a7f64a96
No account linked to committer's email address

+ 1
- 1
.github/workflows/ci.yml View File

@@ -235,4 +235,4 @@ jobs:
- name: test
run: |
${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests
${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -T test -j8 --output-on-failure
${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -T test -j8 --output-on-failure

+ 1
- 1
.github/workflows/windows.yml View File

@@ -30,4 +30,4 @@ jobs:
- name: make
run: cmake --build build --config ${{ matrix.config }}
- name: make check
run: ctest --test-dir build -T test -C ${{ matrix.config }} -j8 --output-on-failure
run: ctest --test-dir build -T test -C ${{ matrix.config }} -j8 --output-on-failure

+ 6
- 0
README.md View File

@@ -135,3 +135,9 @@ taken from the NetBSD `getopt_long` implementation, which is licensed under a
[2-clause BSD](COPYING.BSD2) license.

Android is a trademark of Google LLC.

## Acknowledgements

The catalan extension was funded by [Departament de la Vicepresidència i de Polítiques Digitals i Territori de la Generalitat de Catalunya](https://politiquesdigitals.gencat.cat/ca/inici/index.html#googtrans(ca|en)
within the framework of
[Projecte AINA](https://politiquesdigitals.gencat.cat/ca/economia/catalonia-ai/aina).

+ 1
- 0
dictsource/ca_emoji View File

@@ -12,6 +12,7 @@

$textmode


// 0000..007F : C0 Controls and Basic Latin

//+ plus // [002B] other (no translation)

+ 18839
- 211
dictsource/ca_list
File diff suppressed because it is too large
View File


+ 1141
- 159
dictsource/ca_rules
File diff suppressed because it is too large
View File


+ 2
- 0
espeak-ng-data/lang/roa/ca View File

@@ -1,2 +1,4 @@
name Catalan
language ca

dictrules 1

+ 7
- 0
espeak-ng-data/lang/roa/ca-ba View File

@@ -0,0 +1,7 @@
name Catalan (Balearic)
language ca-ba

phonemes ca-ba

dictrules 1
dictrules 4

+ 6
- 0
espeak-ng-data/lang/roa/ca-nw View File

@@ -0,0 +1,6 @@
name Catalan (North-western)
language ca-nw

phonemes ca-nw

dictrules 2

+ 7
- 0
espeak-ng-data/lang/roa/ca-va View File

@@ -0,0 +1,7 @@
name Catalan (Valencian)
language ca-va

phonemes ca-va

dictrules 2
dictrules 3

+ 457
- 12
phsource/ph_catalan View File

@@ -2,56 +2,108 @@
//====================================================
// Catalan - based on Spanish and Base2
//====================================================
// in our project we decided not to use elisions, but they could be managed here by using "ipa NULL"

// vowels
//=============

phoneme a
vwl starttype #a endtype #a
length 180
ChangeIfUnstressed(a#)
IF thisPh(isUnstressed) THEN
ChangePhoneme(@)
ENDIF
FMT(vowel/a_6)
endphoneme

phoneme a#
vwl starttype #@ endtype #@
ipa ɐ
unstressed
length 170
FMT(vowel/a#_3)
phoneme a2 // don't reduce
vwl starttype #a endtype #a
length 180
FMT(vowel/a_6)
endphoneme

phoneme e
vwl starttype #e endtype #e
length 170
ChangeIfUnstressed(@)
IF thisPh(isUnstressed) THEN
ChangePhoneme(@)
ENDIF
FMT(vowel/e)
endphoneme

phoneme e2 // don't reduce
vwl starttype #e endtype #e
length 170
FMT(vowel/e)
endphoneme

phoneme E
vwl starttype #e endtype #e
length 180
ChangeIfUnstressed(@)
IF thisPh(isUnstressed) THEN
ChangePhoneme(@)
ENDIF
FMT(vowel/e_mid)
endphoneme

phoneme E2 // don't reduce
vwl starttype #e endtype #e
length 180
ChangeIfUnstressed(e2)
FMT(vowel/e_mid)
endphoneme

phoneme O
vwl starttype #o endtype #o
length 170
ChangeIfUnstressed(U)
IF thisPh(isUnstressed) THEN
IF thisPh(isWordEnd) AND nextPh(isVowel) THEN
IF nextPh(i) THEN
ChangePhoneme(u)
ELSE
ChangePhoneme(w)
ENDIF
ELIF thisPh(isWordStart) AND prevPh(isVowel) THEN
ChangePhoneme(w)
ELSE
ChangePhoneme(u)
ENDIF
ENDIF
FMT(vowel/oo)
endphoneme

phoneme o
vwl starttype #o endtype #o
length 170
ChangeIfUnstressed(U)
IF thisPh(isUnstressed) THEN
IF thisPh(isWordEnd) AND nextPh(isVowel) THEN
IF nextPh(i) THEN
ChangePhoneme(u)
ELSE
ChangePhoneme(w)
ENDIF
ELIF thisPh(isWordStart) AND prevPh(isVowel) THEN
ChangePhoneme(w)
ELSE
ChangePhoneme(u)
ENDIF
ENDIF
FMT(vowel/o)
endphoneme

phoneme o2
vwl starttype #o endtype #o
length 170
FMT(vowel/o)
endphoneme

phoneme O2
vwl starttype #o endtype #o
length 170
FMT(vowel/oo)
endphoneme

phoneme U
vwl starttype #u endtype #u
unstressed
@@ -62,15 +114,408 @@ endphoneme
phoneme u
vwl starttype #u endtype #u
length 160
ChangeIfUnstressed(U)
IF thisPh(isUnstressed) THEN
IF thisPh(isWordEnd) THEN
IF nextPh(isVowel) THEN
IF nextPh(i) THEN
ELSE
ChangePhoneme(w)
ENDIF
ENDIF
ELIF thisPh(isWordStart) THEN
IF prevPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
ENDIF
ENDIF
FMT(vowel/u_bck)
endphoneme

phoneme i
vwl starttype #i endtype #i
length 170
IF thisPh(isUnstressed) THEN
IF thisPh(isWordEnd) THEN
IF nextPh(isVowel) THEN
IF nextPh(u) THEN
ELSE
ChangePhoneme(j)
ENDIF
ENDIF
ELIF thisPh(isWordStart) THEN
IF prevPh(isVowel) THEN
ChangePhoneme(j)
ENDIF
ENDIF
ENDIF
FMT(vowel/i)
endphoneme


// nasals
//==============

phoneme M
vls lbd nas
ipa ɱ
IF nextPh(v) THEN
ChangePhoneme(m)
ENDIF
endphoneme

phoneme m
vcd blb nas
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
lengthmod 4

IF KlattSynth THEN
Vowelin f1=0 f2=1000 -50 -200 f3=-200 80
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 nextPh(f) OR nextPh(v) THEN
ChangePhoneme(M)
ENDIF

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
Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
lengthmod 4

IF KlattSynth THEN
Vowelin f1=0 f2=1500 -200 200 f3=0 80
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 nextPh(f) THEN
ChangePhoneme(M)
ELIF nextPh(k) OR nextPh(g) THEN
ChangePhoneme(N)
ELIF nextPh(p) OR nextPh(b) OR nextPh(v) OR nextPh(m) THEN
ChangePhoneme(m)
ELIF nextPh(l^) OR nextPh(n^) THEN
ChangePhoneme(n^)
ENDIF
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 l
import_phoneme en/l // use 'dark' [l] after a vowel
endphoneme

// fricatives
//================
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 prevPh(isPalatal) OR nextPh(S) OR nextPh(Z) THEN
IF prevPh(j) THEN
ELIF nextPh(isVoiced) THEN
ChangePhoneme(Z)
ELSE
ChangePhoneme(S)
ENDIF
ENDIF
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) THEN
ChangePhoneme(z)
ENDIF
ENDIF
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 z
vcd alv frc sib
voicingswitch s
lengthmod 6
Vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50
IF prevPh(isPalatal) OR nextPh(Z) THEN
IF prevPh(j) THEN
ELSE
ChangePhoneme(Z)
ENDIF
ENDIF
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

IF nextPh(isPause2) THEN
FMT(voc/z_) addWav(ufric/s_, 70)
ENDIF
FMT(voc/z) addWav(ufric/s_, 85)
endphoneme

phoneme f
vls lbd frc
voicingswitch v
lengthmod 3
Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
IF thisPh(isWordStart) THEN
ELSE
IF nextPh(isVoiced) THEN
IF thisPh(isWordEnd) THEN
ipa v
ELSE
IF nextPh(isVowel) OR nextPh(l) OR nextPh(**) OR nextPh(R) THEN
ELSE
ipa v
ENDIF
ENDIF
ENDIF
ENDIF
IF nextPh(isPause) THEN
WAV(ufric/f_)
ENDIF
WAV(ufric/f)
endphoneme

phoneme v // = b
vcd blb stp
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELIF prevPh(m) THEN
ELSE
ChangePhoneme(p)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ChangePhoneme(b)
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(B)
ELSE
ChangePhoneme(b)
ENDIF
ELSE
ChangePhoneme(b)
ENDIF
ELSE
ChangePhoneme(p)
ENDIF
CALL base1/b
endphoneme


// R
//=====================
phoneme R
liquid trl
lengthmod 6
ipa r
IF thisPh(isWordEnd) AND nextPh(R) 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

// plosives (oclusives)
// ====================

phoneme b
vcd blb stp

IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELIF prevPh(m) THEN
ELSE
ChangePhoneme(p)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(B)
ENDIF
ENDIF
ELSE
ChangePhoneme(p)
ENDIF

CALL base1/b
endphoneme

phoneme g
vcd vel stp
lengthmod 5
voicingswitch k
Vowelin f1=2 f2=2300 200 300 f3=-300 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELSE
ChangePhoneme(k)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(Q)
ENDIF
ENDIF
ELSE
ChangePhoneme(k)
ENDIF
IF PreVoicing THEN
FMT(g/xg)
ENDIF
IF nextPh(isPause2) THEN
FMT(g/g_) addWav(x/g_)
ENDIF
FMT(g/g) addWav(x/g2)
endphoneme

phoneme d
vcd dnt stp
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELSE
ChangePhoneme(t)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(**) OR prevPh(R) OR prevPh(j) OR prevPh(w) OR prevPh(isVFricative) THEN
ChangePhoneme(D)
ENDIF
ENDIF
ELSE
ChangePhoneme(t)
ENDIF

CALL base2/d
endphoneme


phoneme p
vls blb stp
lengthmod 2
voicingswitch b
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
IF nextPh(isPause2) THEN
WAV(ustop/p_unasp_, 80)
ELIF nextPh(isRhotic) THEN
WAV(ustop/pr)
ELIF nextPh(l) THEN
WAV(ustop/pl)
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
IF nextPh(w) OR nextPh(j) THEN
ELSE
ChangePhoneme(b)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(b)
ENDIF
WAV(ustop/p_unasp)
endphoneme

phoneme t // dental variant of /t/
vls dnt stp
lengthmod 2
voicingswitch d
Vowelin f1=0 f2=1600 -300 300 f3=-100 80
Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/t_dnt, 30)
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
IF nextPh(**) OR nextPh(w) OR nextPh(j) THEN
ELSE
ChangePhoneme(d)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(d)
ENDIF
WAV(ustop/t_dnt2, 60)
endphoneme

phoneme k
vls vel stp
lengthmod 2
voicingswitch g
Vowelin f1=0 f2=2300 200 400 f3=-100 80
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20

IF nextPh(isPause2) THEN
WAV(ustop/k_)
ELIF nextPh(isRhotic) THEN
WAV(ustop/kr)
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
IF nextPh(w) OR nextPh(j) THEN
ELIF nextPh(n) OR nextPh(d) OR nextPh(z) THEN
ChangePhoneme(g)
ELIF thisPh(isWordEnd) THEN
ChangePhoneme(g)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(g)
ENDIF
WAV(ustop/k_unasp, 70)
endphoneme

phoneme tS
vls pla afr sib
voicingswitch dZ
lengthmod 2
Vowelin f1=0 f2=2300 200 400 f3=-100 80

IF thisPh(isWordEnd) AND nextPh(isVoiced) THEN
ChangePhoneme(dZ)
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(dZ)
ENDIF
WAV(ustop/tsh)
endphoneme

+ 490
- 0
phsource/ph_catalan_ba View File

@@ -0,0 +1,490 @@

//====================================================
// Catalan balearic - based on Catalan (and Spanish and Base2)
//====================================================


// plosives (oclusives)
// ====================
// following https://giec.iec.cat/textgramatica/codi/4.2.1

phoneme p
vls blb stp
lengthmod 2
voicingswitch b
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
IF thisPh(isWordEnd) AND nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF nextPh(t) OR nextPh(s) OR nextPh(ts) THEN
ChangePhoneme(t)
ELIF nextPh(g) THEN
ChangePhoneme(g)
ELIF nextPh(Z) THEN
ChangePhoneme(d)
ELIF nextPh(f) THEN
ChangePhoneme(f)
ELIF nextPh(R) OR nextPh(j) THEN
ipa NULL
ELIF nextPh(m) THEN
ChangePhoneme(m)
ELIF nextPh(isVoiced) THEN
ChangePhoneme(b)
ENDIF
ELIF nextPh(isRhotic) THEN
WAV(ustop/pr)
ELIF nextPh(l) THEN
WAV(ustop/pl)
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ChangePhoneme(b)
ELIF nextPh(t) THEN
ChangePhoneme(t)
ELIF nextPh(s) THEN
IF nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(d)
ELSE
ChangePhoneme(t)
ENDIF
ENDIF
WAV(ustop/p_unasp)
endphoneme

phoneme t // dental variant of /t/
vls dnt stp
lengthmod 2
voicingswitch d
Vowelin f1=0 f2=1600 -300 300 f3=-100 80
Vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/t_dnt, 30)
ELIF thisPh(isWordEnd) AND nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF nextPh(k) THEN
ChangePhoneme(k)
ELIF nextPh(b) THEN
ChangePhoneme(b)
ELIF nextPh(f) THEN
ChangePhoneme(f)
ELIF nextPh(p) THEN
ChangePhoneme(p)
ELIF nextPh(isVoiced) THEN
ChangePhoneme(d)
ENDIF
ELIF nextPh(isWordEnd) AND nextPh(s) THEN
IF next2Ph(k) THEN
ChangePhoneme(k)
ELIF next2Ph(b) THEN
ChangePhoneme(b)
ELIF next2Ph(isVoiced) THEN
ChangePhoneme(d)
ENDIF
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
IF nextPh(**) THEN
ELSE
ChangePhoneme(d)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(d)
ENDIF
WAV(ustop/t_dnt2, 60)
endphoneme

phoneme k
vls vel stp
lengthmod 2
voicingswitch g
Vowelin f1=0 f2=2300 200 400 f3=-100 80
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/k_)
ELIF nextPh(isRhotic) THEN
WAV(ustop/kr)
ELIF thisPh(isWordEnd) AND nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF nextPh(t) OR nextPh(s) OR nextPh(ts) THEN
ChangePhoneme(t)
ELIF nextPh(isVoiced) THEN
ChangePhoneme(g)
ENDIF
ELIF thisPh(isWordStart) THEN // don't change it if it's word start
ELIF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
IF nextPh(w) THEN
ELIF nextPh(n) OR nextPh(d) OR nextPh(z) THEN
ChangePhoneme(g)
ENDIF
ELIF nextPh(t) OR nextPh(ts) THEN
ChangePhoneme(t)
ELIF nextPh(s) THEN
IF nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(d)
ELSE
ChangePhoneme(t)
ENDIF
ENDIF
WAV(ustop/k_unasp, 70)
endphoneme

phoneme b
vcd blb stp
IF thisPh(isWordEnd) THEN
IF nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF NOT nextPh(isVoiced) THEN
ChangePhoneme(p)
ENDIF
ELSE
ChangePhoneme(p)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(s) OR nextPh(t) THEN
ChangePhoneme(t)
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(B)
ENDIF
ENDIF
ELSE
ChangePhoneme(p)
ENDIF
CALL base1/b
endphoneme

phoneme g
vcd vel stp
lengthmod 5
voicingswitch k
Vowelin f1=2 f2=2300 200 300 f3=-300 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
IF thisPh(isWordEnd) THEN
IF nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF NOT nextPh(isVoiced) THEN
ChangePhoneme(k)
ENDIF
ELSE
ChangePhoneme(k)
ENDIF
ELIF nextPh(isVoiced) THEN
IF nextPh(m) THEN
ChangePhoneme(m)
ELIF nextPh(d) THEN
ChangePhoneme(g)
ELIF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(Q)
ENDIF
ENDIF
ELSE
ChangePhoneme(k)
ENDIF
IF PreVoicing THEN
FMT(g/xg)
ENDIF
IF nextPh(isPause2) THEN
FMT(g/g_) addWav(x/g_)
ENDIF
FMT(g/g) addWav(x/g2) // weaker [g]
endphoneme

phoneme d
vcd dnt stp
IF thisPh(isWordEnd) AND nextPh(isNotVowel) AND NOT nextPh(isPause) THEN
IF prevPh(isNasal) OR prevPh(isLiquid) OR prevPh(R) OR prevPh(**) OR prevPh(j) THEN
ipa NULL
ELIF nextPh(p) THEN
ChangePhoneme(p)
ELIF NOT nextPh(isVoiced) THEN
ChangePhoneme(t)
ENDIF ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(m) THEN
ChangePhoneme(m)
ELIF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(**) OR prevPh(R) OR prevPh(j) OR prevPh(w) OR prevPh(s) OR prevPh(z) THEN
ChangePhoneme(D)
ENDIF
ENDIF
ELSE
ChangePhoneme(t)
ENDIF
CALL base2/d
endphoneme

// vowels
//=====================================================

phoneme e
vwl starttype #e endtype #e
length 170
IF thisPh(isUnstressed) THEN
ChangePhoneme(@)
ENDIF
FMT(vowel/e)
endphoneme

phoneme O
vwl starttype #o endtype #o
length 170
IF thisPh(isWordEnd) THEN
IF nextPh(o) OR nextPh(O) THEN
ipa NULL
ELSE
ChangeIfUnstressed(o)
ENDIF
ELIF thisPh(isUnstressed) THEN
ChangePhoneme(o)
ENDIF
FMT(vowel/oo)
endphoneme

phoneme o
vwl starttype #o endtype #o
length 170
FMT(vowel/o)
endphoneme

phoneme @ // Schwa, e.g. alph**a**
vwl starttype #@ endtype #@
length 140
FMT(vowel/@)
endphoneme

// fricatives
// ====================================

phoneme v
vcd lbd frc
voicingswitch f
lengthmod 6
Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50

IF thisPh(isWordEnd) AND prevPh(**) AND nextPh(isNotVowel) THEN
ipa NULL
ENDIF
IF KlattSynth THEN
Vowelout f1=1 f2=1000 -500 -300 f3=-300 60 len=50 brk
IF nextPh(isPause2) THEN
FMT(klatt/v_) addWav(vocw/v)
ENDIF
FMT(klatt/v) addWav(vocw/v, 150)
ENDIF

IF nextPh(isPause2) THEN
FMT(voc/v_) addWav(vocw/v)
ENDIF
IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN
length 70
ENDIF
FMT(voc/v) addWav(vocw/v)
endphoneme

phoneme f
vls lbd frc
voicingswitch v
lengthmod 3
Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
IF thisPh(isWordEnd)THEN
IF prevPh(**) THEN
ipa NULL
ELIF nextPh(isVoiced) THEN
ipa v
ENDIF
ELIF nextPh(s) THEN
IF nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // sonority propagation
ChangePhoneme(d)
ELSE
ChangePhoneme(t)
ENDIF
ENDIF

IF nextPh(isPause) THEN
WAV(ufric/f_)
ENDIF
WAV(ufric/f)
endphoneme

// liquid
// =====================================

phoneme ** // "cara"
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 nextPh(isWordEnd) AND nextPh(isNasal) THEN
ipa NULL
ENDIF
IF prevPh(#i) OR prevPh(#e) THEN
FMT(r3/@tap2)
ENDIF
FMT(r3/@tap)
endphoneme

phoneme l^ // "calla"
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^)
ELIF prevPh(isVowel) THEN
IF nextPh(isPause) THEN
ChangePhoneme(j)
ELIF nextPh(s) AND next2Ph(isPause) THEN
ChangePhoneme(j)
ELIF nextPh(isVowel) AND NOT thisPh(isWordEnd) AND NOT thisPh(isWordStart) THEN
IF nextPh(isStressed) THEN
IF nextPh(i) OR nextPh(e) THEN
ipa NULL
ELSE
ChangePhoneme(j)
ENDIF
ELIF prevPh(isStressed) THEN
IF prevPh(i) OR prevPh(e) THEN
ipa NULL
ELSE
ChangePhoneme(j)
ENDIF
ELSE
ChangePhoneme(j)
ENDIF
ENDIF
ENDIF

FMT(l^/l^)
endphoneme

// fricatives
//================================0



phoneme s // dissimilation
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 thisPh(isWordEnd) AND nextPh(isVoiced) THEN
ChangePhoneme(z)
ELIF thisPh(isWordStart) THEN
IF prevPh(t) THEN
ChangePhoneme(ts)
ENDIF
ENDIF
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

// nasals
// ===========================

phoneme m
vcd blb nas
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
lengthmod 4
IF KlattSynth THEN
Vowelin f1=0 f2=1000 -50 -200 f3=-200 80
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 nextPh(f) OR nextPh(v) THEN
ChangePhoneme(M)
ELIF nextPh(t) OR nextPh(d) OR nextPh(s) OR nextPh(z) OR nextPh(R) OR nextPh(S) OR nextPh(Z) THEN
ChangePhoneme(n)
ELIF nextPh(l^) OR nextPh(n^) THEN
ChangePhoneme(n^)
ELIF nextPh(k) OR nextPh(g) THEN
ChangePhoneme(N)
ELIF thisPh(isWordEnd) THEN
IF nextPh(j) THEN
ChangePhoneme(j)
ELIF nextPh(l) THEN
ChangePhoneme(l)
ENDIF
ENDIF
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
Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
lengthmod 4
IF KlattSynth THEN
Vowelin f1=0 f2=1500 -200 200 f3=0 80
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 nextPh(f) OR nextPh(v) THEN
ChangePhoneme(M)
ELIF nextPh(k) OR nextPh(g) THEN
ChangePhoneme(N)
ELIF nextPh(p) OR nextPh(b) OR nextPh(v) OR nextPh(m) THEN
ChangePhoneme(m)
ELIF thisPh(isWordEnd) THEN
IF nextPh(l^) OR nextPh(n^) THEN
ChangePhoneme(n^)
ELIF nextPh(j) THEN
ChangePhoneme(j)
ENDIF
ENDIF
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

+ 160
- 0
phsource/ph_catalan_nw View File

@@ -0,0 +1,160 @@

//====================================================
// Catalan valencian - based on Catalan (and Spanish and Base2)
//====================================================

// vowels
//=============

phoneme a
vwl starttype #a endtype #a
length 180
IF thisPh(isWordEnd) AND thisPh(isUnstressed) THEN
ChangePhoneme(E)
ENDIF
FMT(vowel/a_6)
endphoneme

phoneme a2 // does not change in central accent
vwl starttype #a endtype #a
length 180
FMT(vowel/a_6)
endphoneme

phoneme e
vwl starttype #e endtype #e
length 170
IF thisPh(isUnstressed) THEN
IF thisPh(isWordStart) THEN
IF nextPh(s) OR nextPh(n) OR nextPh(m) OR nextPh(**) OR nextPh(R) THEN
ChangePhoneme(a)
ELIF nextPh(j) AND next2Ph(S) THEN
ChangePhoneme(a)
ENDIF
ENDIF
ENDIF
FMT(vowel/e)
endphoneme

phoneme e2 // don't reduce: "aeri", "aeròdrom".
vwl starttype #e endtype #e
length 170
FMT(vowel/e)
endphoneme

phoneme E
vwl starttype #e endtype #e
length 180
IF thisPh(isUnstressed) THEN
IF thisPh(isWordStart) THEN
IF nextPh(s) OR nextPh(n) OR nextPh(m) OR nextPh(**) OR nextPh(R) THEN
ChangePhoneme(a)
ELIF nextPh(j) AND next2Ph(S) THEN
ChangePhoneme(a)
ELSE
ChangePhoneme(e)
ENDIF
ELSE
ChangePhoneme(e)
ENDIF
ENDIF
FMT(vowel/e_mid)
endphoneme

phoneme E2 // don't reduce
vwl starttype #e endtype #e
length 180
ChangeIfUnstressed(e2)
FMT(vowel/e_mid)
endphoneme

phoneme O
vwl starttype #o endtype #o
length 170
IF thisPh(isUnstressed) THEN
ChangePhoneme(o)
ENDIF
FMT(vowel/oo)
endphoneme

phoneme o
vwl starttype #o endtype #o
length 170
FMT(vowel/o)
endphoneme

phoneme o2
vwl starttype #o endtype #o
length 170
ChangeIfStressed(o)
FMT(vowel/o)
endphoneme

phoneme i
vwl starttype #i endtype #i
length 170
IF thisPh(isUnstressed) AND nextPh(isVowel) THEN
ChangePhoneme(j)
ENDIF
FMT(vowel/i)
endphoneme

// affricates
//================

phoneme Z
vcd pla frc sib
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 thisPh(isWordStart) OR prevPh(isNotVowel) THEN
IF prevPh(d) THEN
ELSE
ChangePhoneme(dZ)
ENDIF
ENDIF
endphoneme

phoneme S
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 thisPh(isWordStart) THEN // initial or post-consonant position
ChangePhoneme(tS)
ELIF prevPh(isNotVowel) THEN
IF prevPh(j) THEN
IF thisPh(isWordEnd) AND nextPh(isVoiced) THEN
ChangePhoneme(Z)
ENDIF
ELSE
ChangePhoneme(tS)
ENDIF
ENDIF
WAV(ufric/sh)
endphoneme

phoneme v
vcd lbd frc
voicingswitch f
lengthmod 6
Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
IF KlattSynth THEN
Vowelout f1=1 f2=1000 -500 -300 f3=-300 60 len=50 brk
IF nextPh(isPause2) THEN
FMT(klatt/v_) addWav(vocw/v)
ENDIF
FMT(klatt/v) addWav(vocw/v, 150)
ENDIF
IF nextPh(isPause2) THEN
FMT(voc/v_) addWav(vocw/v)
ENDIF
IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN
length 70
ENDIF
FMT(voc/v) addWav(vocw/v)
endphoneme

+ 282
- 0
phsource/ph_catalan_va View File

@@ -0,0 +1,282 @@

//====================================================
// Catalan valencian - based on Catalan (and Spanish and Base2)
//====================================================

// vowels
//=============

phoneme a
vwl starttype #a endtype #a
length 180
FMT(vowel/a_6)
endphoneme

phoneme a2 // does not change in central accent
vwl starttype #a endtype #a
length 180
FMT(vowel/a_6)
endphoneme

phoneme e
vwl starttype #e endtype #e
length 170
IF thisPh(isUnstressed) THEN
IF thisPh(isWordStart) THEN
IF nextPh(s) OR nextPh(n) OR nextPh(m) OR nextPh(**) OR nextPh(R) THEN
ChangePhoneme(a)
ELIF nextPh(j) AND next2Ph(S) THEN
ChangePhoneme(a)
ENDIF
ENDIF
ENDIF
FMT(vowel/e)
endphoneme

phoneme e2 // don't reduce
vwl starttype #e endtype #e
length 170
FMT(vowel/e)
endphoneme

phoneme E
vwl starttype #e endtype #e
length 180
IF thisPh(isUnstressed) THEN
IF thisPh(isWordStart) THEN
IF nextPh(s) OR nextPh(n) OR nextPh(m) OR nextPh(**) OR nextPh(R) THEN
ChangePhoneme(a)
ELIF nextPh(j) AND next2Ph(S) THEN
ChangePhoneme(a)
ELSE
ChangePhoneme(e)
ENDIF
ELSE
ChangePhoneme(e)
ENDIF
ENDIF
FMT(vowel/e_mid)
endphoneme

phoneme E2 // don't reduce
vwl starttype #e endtype #e
length 180
ChangeIfUnstressed(e2)
FMT(vowel/e_mid)
endphoneme

phoneme O
vwl starttype #o endtype #o
length 170
ChangeIfUnstressed(o)
FMT(vowel/oo)
endphoneme

phoneme o2
vwl starttype #o endtype #o
length 170
ChangeIfStressed(O)
FMT(vowel/o)
endphoneme

phoneme o
vwl starttype #o endtype #o
length 170
FMT(vowel/o)
endphoneme

phoneme u
vwl starttype #u endtype #u
length 160
IF thisPh(isUnstressed) THEN
IF thisPh(isWordEnd) THEN
IF nextPh(isVowel) THEN
IF nextPh(u) OR nextPh(w) THEN
ELSE
ChangePhoneme(w)
ENDIF
ENDIF
ELIF thisPh(isWordStart) THEN
IF prevPh(isVowel) THEN
ChangePhoneme(w)
ENDIF
ENDIF
ENDIF
FMT(vowel/u_bck)
endphoneme

phoneme i
vwl starttype #i endtype #i
length 170
IF thisPh(isUnstressed) AND nextPh(isVowel) THEN
ChangePhoneme(j)
ENDIF
FMT(vowel/i)
endphoneme

// nasals
//==============

phoneme n
vcd alv nas
Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
lengthmod 4

IF KlattSynth THEN
Vowelin f1=0 f2=1500 -200 200 f3=0 80
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 nextPh(f) OR nextPh(v) THEN
ChangePhoneme(M)
ELIF nextPh(k) OR nextPh(g) THEN
ChangePhoneme(N)
ELIF nextPh(p) OR nextPh(b) OR nextPh(m) THEN
ChangePhoneme(m)
ENDIF

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

// R
//=====================
phoneme R
liquid trl
lengthmod 6
ipa r
IF thisPh(isWordEnd) THEN
ChangePhoneme(**)
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

// affricates
//================

phoneme Z
vcd pla frc sib
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
ChangePhoneme(dZ)
endphoneme

phoneme S
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 prevPh(i) OR prevPh(j) THEN
IF thisPh(isWordEnd) AND nextPh(isVoiced) THEN
ChangePhoneme(Z)
ENDIF
ELSE
ChangePhoneme(tS)
ENDIF
WAV(ufric/sh)
endphoneme


phoneme v
vcd lbd frc
voicingswitch f
lengthmod 6
Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50

IF KlattSynth THEN
Vowelout f1=1 f2=1000 -500 -300 f3=-300 60 len=50 brk
IF nextPh(isPause2) THEN
FMT(klatt/v_) addWav(vocw/v)
ENDIF
FMT(klatt/v) addWav(vocw/v, 150)
ENDIF

IF nextPh(isPause2) THEN
FMT(voc/v_) addWav(vocw/v)
ENDIF
IF thisPh(isWordStart) AND nextPhW(isLiquid) THEN
length 70
ENDIF
FMT(voc/v) addWav(vocw/v)
endphoneme

// Occlusive stops
//=================

phoneme b
vcd blb stp
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELIF prevPh(m) THEN
ELSE
ChangePhoneme(p)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
IF prevPh(**) OR prevPh(R) THEN //***"embarbussa"***
ELSE
ChangePhoneme(B)
ENDIF
ENDIF
ENDIF
ELSE
ChangePhoneme(p)
ENDIF

CALL base1/b
endphoneme

phoneme g
vcd vel stp
lengthmod 5
voicingswitch k
Vowelin f1=2 f2=2300 200 300 f3=-300 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
IF thisPh(isWordEnd) THEN
IF nextPh(isVoiced) AND nextPh(isNotVowel) THEN
ELSE
ChangePhoneme(k)
ENDIF
ELIF nextPh(s) AND nextPh(isWordEnd) AND next2Ph(isVoiced) THEN // keep sonority
ELIF nextPh(isVoiced) THEN
IF nextPh(isVowel) OR nextPh(isRhotic) OR nextPh(l) OR nextPh(j) OR nextPh(w) THEN
IF prevPh(isVowel) OR prevPh(isLiquid) OR prevPh(isVFricative) THEN
ChangePhoneme(Q)
ENDIF
ELIF nextPh(n) THEN
ChangePhoneme(N)
ENDIF
ELSE
ChangePhoneme(k)
ENDIF
IF PreVoicing THEN
FMT(g/xg)
ENDIF
IF nextPh(isPause2) THEN
FMT(g/g_) addWav(x/g_)
ENDIF
FMT(g/g) addWav(x/g2)
endphoneme


+ 9
- 1
phsource/phonemes View File

@@ -826,7 +826,6 @@ phoneme n^ // Spanish **ñ**
ENDIF
endphoneme


phoneme N // si**ng**
vcd vel nas
Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk
@@ -1944,6 +1943,15 @@ include ph_spanish_la
phonemetable ca es
include ph_catalan

phonemetable ca-nw ca
include ph_catalan_nw

phonemetable ca-va ca
include ph_catalan_va

phonemetable ca-ba ca
include ph_catalan_ba

phonemetable an es
include ph_aragon


+ 1
- 1
src/libespeak-ng/dictionary.c View File

@@ -1023,7 +1023,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,
if (phoneme_tab[final_ph]->type != phVOWEL) {
mnem = phoneme_tab[final_ph]->mnemonic;

if (tr->translator_name == L('a', 'n')) {
if ((tr->translator_name == L('a', 'n')) || (tr->translator_name == L('c', 'a'))) {
if (((mnem != 's') && (mnem != 'n')) || phoneme_tab[final_ph2]->type != phVOWEL)
stressed_syllable = vowel_count - 1; // stress on last syllable
} else if (tr->translator_name == L('i', 'a')) {

+ 1
- 1
src/libespeak-ng/tr_languages.c View File

@@ -768,7 +768,7 @@ Translator *SelectTranslator(const char *name)
if (name2 == L('c', 'a')) {
// stress last syllable unless word ends with a vowel
tr->punct_within_word = ca_punct_within_word;
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2;
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_NO_AUTO_2 | S_FIRST_PRIMARY;
} else if (name2 == L('i', 'a')) {
tr->langopts.stress_flags = S_FINAL_SPANISH | S_FINAL_DIM_ONLY | S_FINAL_NO_2;
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED | NUM_OMIT_1_THOUSAND | NUM_ROMAN | NUM_ROMAN_AFTER;

+ 4
- 1
tests/language-phonemes.test View File

@@ -27,7 +27,10 @@ test_phwav bg 3020acb23ac0f93d5479de3b305b71fc07b5e738 "ma na n^a Na m;a pa ba t
test_phwav bn 7fc6c8c6b347677885c6e973ff4dc6b2b6fa6d59 "ma na Na pa ta t.a tSa ka p#a t#a t.#a tS#a k#a ba da d.a dZa ga b#a d#a d.#a g#a fa Ba sa za Sa Za ha Ha wa la ja ra *a Ra _:_ ma mE mO me mi mi mu m& mV"
test_phwav bpy 7fc6c8c6b347677885c6e973ff4dc6b2b6fa6d59 "ma na Na pa ta t.a tSa ka p#a t#a t.#a tS#a k#a ba da d.a dZa ga b#a d#a d.#a g#a fa Ba sa za Sa Za ha Ha wa la ja ra *a Ra _:_ ma mE mO me mi mi mu m& mV"
test_phwav bs f3b9ea69a52d9cabc18007c0bb49c16583acef1b "ma na Na pa ta ka ba da ga tsa tSa tS;a dZa dZ;a fa sa Sa xa va za Za ja la l^a Ra r*a _:_ m@ m@2 ma ma: me me: mo mo: mi mi: mu mu: mA m& mE mU maI"
test_phwav ca 563b93f7de72fb4832f2908484bad4908680d7da "ma na n^a Na pa ta ka ba da ga tsa tSa dza dZa sa Sa za Za fa Ta xa va Q\"a ja wa la l^a Ra *a _:_ ma ma# me mE mE2 mO mo mi mU mu"
test_phwav ca 4954e404110f20ce89e77a784996678aa1c7caf7 "ma na n^a Na pa ta ka ba da ga tsa tSa dza dZa sa Sa za Za fa Ta xa va Q\"a ja wa la l^a Ra *a _:_ ma ma# me mE mE2 mO mo mi mU mu"
test_phwav ca-ba 8446e6833ba24abb13006a081d5ece232322d6ad "ma na n^a Na pa ta ka ba da ga tsa tSa dza dZa sa Sa za Za fa Ta xa va Q\"a ja wa la l^a Ra *a _:_ ma ma# me mE mE2 mO mo mi mU mu"
test_phwav ca-nw c79f0b9bb228feab4db57e44822cd900793803d9 "ma na n^a Na pa ta ka ba da ga tsa tSa dza dZa sa Sa za Za fa Ta xa va Q\"a ja wa la l^a Ra *a _:_ ma ma# me mE mE2 mO mo mi mU mu"
test_phwav ca-va e32d68647ebac8cfc16fcf0401cefbfc92681a5b "ma na n^a Na pa ta ka ba da ga tsa tSa dza dZa sa Sa za Za fa Ta xa va Q\"a ja wa la l^a Ra *a _:_ ma ma# me mE mE2 mO mo mi mU mu"
test_phwav chr 90c90ca6f4c77cb6bbfaff2a6583825088aaa5cb "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@"
test_phwav cmn 368d0fd8e646e37e402377328df39b1d6e832401 "na Na la ja pa pha fa ta tha ka kha tS;a tS;ha S;a s.a tsa tsha ts.a ts.ha N-a _:_ ma mA mai mAu m@ m@r mE mei mi mi[ mi. miA miAu miE mio miou mo mo- mou mong mu muA mua muai mu@ mei muo my myu my& myE my@ myi _:_ ma11 ma21 ma214 ma22 ma33 ma35 ma44 ma51 ma53 ma55"
test_phwav cmn-Latn-pinyin 368d0fd8e646e37e402377328df39b1d6e832401 "na Na la ja pa pha fa ta tha ka kha tS;a tS;ha S;a s.a tsa tsha ts.a ts.ha N-a _:_ ma mA mai mAu m@ m@r mE mei mi mi[ mi. miA miAu miE mio miou mo mo- mou mong mu muA mua muai mu@ mei muo my myu my& myE my@ myi _:_ ma11 ma21 ma214 ma22 ma33 ma35 ma44 ma51 ma53 ma55"

+ 3
- 4
tests/language-pronunciation.test View File

@@ -56,10 +56,9 @@ dZ'ader 'at.Ok k'O*a h'OtS#e
t,ader pr'aj 'O*d#ek,Oi b'aNlad,eSi n'agO*,ik" "মালয়েশিয়ায় অবৈধ শ্রমিকদের বিরুদ্ধে চলমান 'মেগা-থ্রি' অভিযানে সে দেশে শত শত অভিবাসীকে আটক করেছে সে দেশের ইমিগ্রেশন পুলিশ। যাদের আটক করা হয়েছে, তাদের প্রায় অর্ধেকই বাংলাদেশী নাগরিক।" "Beng"
test_phon bs "l^'ub&znI f'En^eRdZ,Ij& tS'adZ;&vog l'its& x'otS;E d'a m'i p'ok&ZE St'os" "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Cyrl"
test_phon bs "l^'ub&znI f'En^eRdZ,Ij& tS'adZ;&vog l'its& x'otS;E d'a m'i p'ok&ZE St'os" "Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos." "Latn"
test_phon ca "d'ona# a#m'o* k'E s@**,as f'Elis
a#jS;'O
ill'us k'ompa#n^ Q@nj'ut
Z;'a es Un l^w'it *R'EtUl Bla#B'is D'onz@_:_: k'e v#,e D,oBl@'ak" "Dóna amor que seràs feliç. Això, il·lús company geniüt, ja és un lluït rètol blavís d’onze kWh." "Latn"
test_phon ca "d'on@ @m'oR k@ s@**'as f@l'is
si n'o @nz @nt@n'Em p@** l^@Ngw'adZ@
@nt@Ng'Emnus p@** @m'oR" "Dóna amor que seràs feliç. Si no ens entenem per llenguatge, entenguem-nos per amor." "Latn"
test_phon cs "n'exc j'iS hR^'i:Sne: s'aksof,oni J'a:blu: R'ozezv,utSi: s'i:n^ 'u:Jesn,i:mi t'o:ni v'aldzu
t'aNga_! a kv'itskstepu
pR^'i:liZ Zl'ucoUtSki: k'u:n^ 'u:pjel J'a:belske: 'o:di" "Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu. Příliš žluťoučký kůň úpěl ďábelské ódy." "Latn"

Loading…
Cancel
Save