git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@206 d46cf337-b52f-0410-862d-fd96e6ae7743master
_?? s'imbOlo | _?? s'imbOlo | ||||
_#32 Esp'aTjo | _#32 Esp'aTjo | ||||
// NOTE: Some of these pronunciations may still be in | |||||
// Spanish, and need to be changed. | |||||
// accent names | // accent names | ||||
_lig liQaD'u**a | _lig liQaD'u**a | ||||
_acu aQ'uDo | _acu aQ'uDo | ||||
_tld t'ilde | _tld t'ilde | ||||
// names of symbols | // names of symbols | ||||
_. punto | _. punto | ||||
_, koma | _, koma |
_85 t['a:3m||m'y@2j||l'a7m | _85 t['a:3m||m'y@2j||l'a7m | ||||
_95 c'i3n||m'y@2j||l'a7m | _95 c'i3n||m'y@2j||l'a7m | ||||
_0C cr'am // trăm | _0C cr'am // trăm | ||||
_0M1 N'a:2n // ngàn | _0M1 N'a:2n // ngàn | ||||
_0M2 cr'i@6w // triệu | _0M2 cr'i@6w // triệu | ||||
_0M3 t['i4 // tỷ | _0M3 t['i4 // tỷ | ||||
_0and l,in^ // linh | _0and l,in^ // linh | ||||
_dpt _f,@I4_ | |||||
// symbols | // symbols | ||||
_, f@I4 | |||||
// ?? found in festival wow_vi_ptn_phrasing.scm | // ?? found in festival wow_vi_ptn_phrasing.scm | ||||
bị $u | bị $u |
61 phoneme tables | |||||
62 phoneme tables | |||||
new total | new total | ||||
base 103 103 | base 103 103 | ||||
base2 24 122 | base2 24 122 | ||||
om 25 125 | om 25 125 | ||||
en_klatt 77 149 | en_klatt 77 149 | ||||
ga 18 117 | ga 18 117 | ||||
mr 1 148 | |||||
Data file Used by | Data file Used by | ||||
b/b [b] base | b/b [b] base | ||||
[u:] ga | [u:] ga | ||||
vowel/u_bck2 [u:] la | vowel/u_bck2 [u:] la | ||||
[u] sq | [u] sq | ||||
vowel/u_fnt [u:] en_rp | |||||
vowel/u_fnt [u:] en | |||||
[u:] en_rp | |||||
vowel/uu [U] en | vowel/uu [U] en | ||||
[U] en_n | [U] en_n | ||||
[U] en_wm | [U] en_wm | ||||
[aa] en_rp | [aa] en_rp | ||||
vwl_en_rp/aU@ [aU@] en_rp | vwl_en_rp/aU@ [aU@] en_rp | ||||
vwl_en_rp/i@ [i@] en_rp | vwl_en_rp/i@ [i@] en_rp | ||||
vwl_en/u_L [u:] en | |||||
vwl_en_us/3_us [3] en_us | vwl_en_us/3_us [3] en_us | ||||
vwl_en_us/3_us2 [3:] en_us | vwl_en_us/3_us2 [3:] en_us | ||||
vwl_en_us/a [a] en_us | vwl_en_us/a [a] en_us |
ENVELOPE | ENVELOPE | ||||
0 95 | |||||
33 95 | |||||
49 55 | |||||
65 95 | |||||
100 95 | |||||
0 60 1 | |||||
35 60 | |||||
42 36 | |||||
60 60 1 | |||||
100 55 |
ENVELOPE | ENVELOPE | ||||
0 100 | |||||
34 100 | |||||
47 66 | |||||
64 100 | |||||
73 100 | |||||
74 0 | |||||
85 95 | |||||
86 95 | |||||
92 95 | |||||
94 0 | |||||
100 0 | |||||
0 50 1 | |||||
40 50 | |||||
50 33 | |||||
68 50 1 | |||||
77 50 | |||||
78 0 | |||||
88 50 1 | |||||
100 50 | |||||
vowel starttype (u) endtype (u) | vowel starttype (u) endtype (u) | ||||
length 210 | length 210 | ||||
formants vdiph2/uw_2 | formants vdiph2/uw_2 | ||||
before l/2 vwl_en/u_L-40+l/L2_uL | |||||
before l/2 vowel/u_fnt-40+l/L2_uL | |||||
endphoneme | endphoneme | ||||
vowel starttype (u) endtype (u) | vowel starttype (u) endtype (u) | ||||
length 190 | length 190 | ||||
formants vowel/u_fnt | formants vowel/u_fnt | ||||
// before l/2 vwl_en/u_L-40+l/L2_uL | |||||
endphoneme | endphoneme | ||||
phoneme 1 // ngang tone: level | phoneme 1 // ngang tone: level | ||||
stress | stress | ||||
length 11 | |||||
tone 28 32 envelope/p_level NULL | tone 28 32 envelope/p_level NULL | ||||
endphoneme | endphoneme | ||||
phoneme 2 // huyền tone: low falling | phoneme 2 // huyền tone: low falling | ||||
stress | stress | ||||
length 12 | |||||
tone 20 8 envelope/p_fall NULL | tone 20 8 envelope/p_fall NULL | ||||
endphoneme | endphoneme | ||||
phoneme 3 // sắc tone rising | phoneme 3 // sắc tone rising | ||||
stress | stress | ||||
length 13 | |||||
tone 25 50 envelope/p_rise NULL | tone 25 50 envelope/p_rise NULL | ||||
endphoneme | endphoneme | ||||
phoneme 4 // hỏi tone curve (dipping rising) | phoneme 4 // hỏi tone curve (dipping rising) | ||||
stress | stress | ||||
length 14 | |||||
tone 30 5 envelope/p_fallrise NULL | tone 30 5 envelope/p_fallrise NULL | ||||
endphoneme | endphoneme | ||||
phoneme 5 // ngã tone: broken (creaking rising) | phoneme 5 // ngã tone: broken (creaking rising) | ||||
stress | stress | ||||
length 15 | |||||
tone 30 55 envelope/p_214 envelope/vi_5amp | |||||
tone 28 58 envelope/p_214 envelope/vi_5amp | |||||
endphoneme | endphoneme | ||||
phoneme 6 // nặng tone drop (constricted) | phoneme 6 // nặng tone drop (constricted) | ||||
stress | stress | ||||
length 16 | |||||
length 75 // reduce the length of the vowel | |||||
tone 40 20 envelope/p_512 envelope/vi_6amp | tone 40 20 envelope/p_512 envelope/vi_6amp | ||||
endphoneme | endphoneme | ||||
phoneme 7 // tone 1 (ngang) at end of clause | phoneme 7 // tone 1 (ngang) at end of clause | ||||
stress | stress | ||||
length 17 | |||||
tone 40 20 envelope/p_fall NULL | tone 40 20 envelope/p_fall NULL | ||||
endphoneme | endphoneme | ||||
// UTILITY PHONEMES | // UTILITY PHONEMES | ||||
//******************************************************************* | //******************************************************************* | ||||
phoneme < // Start of control string | |||||
phoneme < // Start of control string NOT USED | |||||
pause | pause | ||||
length 0 | length 0 | ||||
lengthmod 1 | lengthmod 1 | ||||
phoneme %% // Unstressed | phoneme %% // Unstressed | ||||
stress | stress | ||||
length 0 | |||||
stress_type 0 | |||||
endphoneme | endphoneme | ||||
phoneme % // Diminished stress | phoneme % // Diminished stress | ||||
stress | stress | ||||
length 1 | |||||
stress_type 1 | |||||
endphoneme | endphoneme | ||||
phoneme , // Secondary stress | phoneme , // Secondary stress | ||||
stress | stress | ||||
length 2 | |||||
stress_type 2 | |||||
endphoneme | endphoneme | ||||
phoneme ,, // Secondary stress | phoneme ,, // Secondary stress | ||||
stress | stress | ||||
length 3 | |||||
stress_type 3 | |||||
endphoneme | endphoneme | ||||
phoneme ' // Primary stress | phoneme ' // Primary stress | ||||
stress | stress | ||||
length 4 | |||||
stress_type 4 | |||||
endphoneme | endphoneme | ||||
phoneme '' // Primary stress (priority) | phoneme '' // Primary stress (priority) | ||||
stress | stress | ||||
length 5 | |||||
stress_type 5 | |||||
endphoneme | endphoneme | ||||
phoneme '! // Primary stress (emphasized) | phoneme '! // Primary stress (emphasized) | ||||
stress | stress | ||||
length 6 | |||||
stress_type 6 | |||||
endphoneme | endphoneme | ||||
phoneme = // Place stress on previous vowel | phoneme = // Place stress on previous vowel | ||||
stress | stress | ||||
length 2 | |||||
stress_type 2 | |||||
endphoneme | endphoneme | ||||
phoneme || // End Word | phoneme || // End Word | ||||
phonemetable ga base | phonemetable ga base | ||||
include ph_irish | include ph_irish | ||||
phonemetable mr hi | |||||
include ph_mathari | |||||
#define tPHONEMENUMBER 29 | #define tPHONEMENUMBER 29 | ||||
#define tPHONEMETABLE 30 | #define tPHONEMETABLE 30 | ||||
#define tINCLUDE 31 | #define tINCLUDE 31 | ||||
#define tSTRESSTYPE 32 | |||||
static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING}; | static const int flags_alternative[] = {phBEFOREVOWEL,phBEFOREVOWELPAUSE,phBEFORENOTVOWEL,phBEFORENOTVOWEL2,phSWITCHVOICING}; | ||||
{"appendph",tAPPENDPH}, | {"appendph",tAPPENDPH}, | ||||
{"import_phoneme",tIMPORTPH}, | {"import_phoneme",tIMPORTPH}, | ||||
{"beforepause",tBEFOREPAUSE}, | {"beforepause",tBEFOREPAUSE}, | ||||
{"stress_type",tSTRESSTYPE}, | |||||
// flags | // flags | ||||
{"wavef", 0x2000000+phWAVE}, | {"wavef", 0x2000000+phWAVE}, | ||||
//fprintf(f_errors," sample len=%d max=%4x shift=%d\n",length,max,scale_factor); | //fprintf(f_errors," sample len=%d max=%4x shift=%d\n",length,max,scale_factor); | ||||
#define MIN_FACTOR 6 | |||||
#define MIN_FACTOR -1 // was 6, disable use of 16 bit samples | |||||
if(scale_factor > MIN_FACTOR) | if(scale_factor > MIN_FACTOR) | ||||
{ | { | ||||
length = length/2 + (scale_factor << 16); | length = length/2 + (scale_factor << 16); | ||||
ph->std_length = NextItem(tNUMBER); | ph->std_length = NextItem(tNUMBER); | ||||
break; | break; | ||||
case tSTRESSTYPE: | |||||
ph->std_length = NextItem(tNUMBER); | |||||
break; | |||||
case tWAVE: | case tWAVE: | ||||
ph->phflags |= phWAVE; // drop through to tSPECT | ph->phflags |= phWAVE; // drop through to tSPECT | ||||
case tSPECT: | case tSPECT: | ||||
int LoadEnvelope2(FILE *f, const char *fname) | int LoadEnvelope2(FILE *f, const char *fname) | ||||
{//=================================================== | {//=================================================== | ||||
int ix; | |||||
int ix, ix2; | |||||
int n; | int n; | ||||
int x, y; | int x, y; | ||||
int displ; | int displ; | ||||
int n_points; | int n_points; | ||||
double yy; | |||||
char line_buf[128]; | char line_buf[128]; | ||||
float env_x[20]; | float env_x[20]; | ||||
float env_y[20]; | float env_y[20]; | ||||
env_y[n_points] = env_y[n_points-1]; | env_y[n_points] = env_y[n_points-1]; | ||||
ix = -1; | ix = -1; | ||||
ix2 = 0; | |||||
for(x=0; x<ENV_LEN; x++) | for(x=0; x<ENV_LEN; x++) | ||||
{ | { | ||||
if(x > env_x[ix+4]) | if(x > env_x[ix+4]) | ||||
ix++; | ix++; | ||||
if(x >= env_x[ix2+1]) | |||||
ix2++; | |||||
if(env_lin[ix2] > 0) | |||||
{ | |||||
yy = env_y[ix2] + (env_y[ix2+1] - env_y[ix2]) * (float(x) - env_x[ix2]) / (env_x[ix2+1] - env_x[ix2]); | |||||
y = int(yy * 2.55); | |||||
} | |||||
else | |||||
if(n_points > 3) | if(n_points > 3) | ||||
y = (int)(polint(&env_x[ix],&env_y[ix],4,x) * 2.55); // convert to range 0-255 | y = (int)(polint(&env_x[ix],&env_y[ix],4,x) * 2.55); // convert to range 0-255 | ||||
else | else |
// LANG=vi | // LANG=vi | ||||
p = &phoneme_list[final_stressed]; | p = &phoneme_list[final_stressed]; | ||||
if(p->tone_ph == 0) | if(p->tone_ph == 0) | ||||
p->tone_ph = LookupPh("7"); // change tone 1 to falling tone at end of clause | |||||
p->tone_ph = LookupPh("7"); // change default tone (tone 1) to falling tone at end of clause | |||||
} | } | ||||
int embedded_ix = 0; | int embedded_ix = 0; | ||||
int min_drop; | int min_drop; | ||||
int emphasized; | int emphasized; | ||||
int tone_mod; | |||||
unsigned char *pitch_env=NULL; | unsigned char *pitch_env=NULL; | ||||
for(ix=1; ix<n_phoneme_list; ix++) | for(ix=1; ix<n_phoneme_list; ix++) | ||||
length_mod = (length_mod * len)/128; | length_mod = (length_mod * len)/128; | ||||
if(p->tone_ph != 0) | |||||
{ | |||||
if((tone_mod = phoneme_tab[p->tone_ph]->std_length) > 0) | |||||
{ | |||||
// a tone phoneme specifies a percentage change to the length | |||||
length_mod = (length_mod * tone_mod) / 100; | |||||
} | |||||
} | |||||
if(end_of_clause == 2) | if(end_of_clause == 2) | ||||
{ | { | ||||
// this is the last syllable in the clause, lengthen it - more for short vowels | // this is the last syllable in the clause, lengthen it - more for short vowels |
case L('t','a'): // Tamil | case L('t','a'): // Tamil | ||||
case L('m','l'): // Malayalam | case L('m','l'): // Malayalam | ||||
case L('k','n'): // Kannada | case L('k','n'): // Kannada | ||||
case L('m','r'): // Marathi | |||||
{ | { | ||||
static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230}; | static const short stress_lengths_ta[8] = {200, 200, 210, 210, 0, 0, 230, 230}; | ||||
static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 }; | static const unsigned char stress_amps_ta[8] = {18,18, 18,18, 20,20, 22,22 }; | ||||
tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable | tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable | ||||
tr->letter_bits_offset = OFFSET_TAMIL; | tr->letter_bits_offset = OFFSET_TAMIL; | ||||
if(name2 == L('m','r')) | |||||
{ | |||||
tr->letter_bits_offset = OFFSET_DEVANAGARI; | |||||
} | |||||
else | |||||
if(name2 == L('m','l')) | if(name2 == L('m','l')) | ||||
{ | { | ||||
tr->letter_bits_offset = OFFSET_MALAYALAM; | tr->letter_bits_offset = OFFSET_MALAYALAM; | ||||
tr->letter_groups[0] = vowels_vi; | tr->letter_groups[0] = vowels_vi; | ||||
tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches() | tr->langopts.tone_language = 1; // Tone language, use CalcPitches_Tone() rather than CalcPitches() | ||||
tr->langopts.unstressed_wd1 = 2; | tr->langopts.unstressed_wd1 = 2; | ||||
tr->langopts.numbers = 0x0049; | |||||
tr->langopts.numbers = 0x0049 + 0x8000; | |||||
} | } | ||||
break; | break; |
// amplitude envelope is only used for creaky voice effect on certain vowels/tones | // amplitude envelope is only used for creaky voice effect on certain vowels/tones | ||||
if((ix = amp_ix>>8) > 127) ix = 127; | if((ix = amp_ix>>8) > 127) ix = 127; | ||||
amp = amplitude_env[ix]; | amp = amplitude_env[ix]; | ||||
amplitude2 = (amplitude2 * amp)/255; | |||||
amplitude2 = (amplitude2 * amp)/128; | |||||
// if(amp < 255) | // if(amp < 255) | ||||
// modulation_type = 7; | // modulation_type = 7; | ||||
} | } |