| @@ -1,6 +1,5 @@ | |||
| name Vietnamese (Northern) | |||
| language vi | |||
| gender male | |||
| words 1 | |||
| pitch 80 118 | |||
| @@ -2,7 +2,6 @@ name Vietnamese (Central) | |||
| language vi-vn-x-central | |||
| phonemes vi-hue | |||
| dictrules 1 | |||
| gender male | |||
| words 1 | |||
| pitch 82 118 //80 118 | |||
| @@ -2,7 +2,6 @@ name Vietnamese (Southern) | |||
| language vi-vn-x-south | |||
| phonemes vi-sgn | |||
| dictrules 2 | |||
| gender male | |||
| words 1 | |||
| pitch 82 118 //80 118 | |||
| @@ -1,5 +1,4 @@ | |||
| name Esperanto | |||
| language eo | |||
| gender male | |||
| apostrophe 2 | |||
| @@ -1,6 +1,5 @@ | |||
| name Lingua Franca Nova | |||
| language lfn | |||
| gender male | |||
| phonemes base2 | |||
| l_unpronouncable 0 | |||
| @@ -1,6 +1,5 @@ | |||
| name Nahuatl (Classical) | |||
| language nci | |||
| gender male | |||
| intonation 3 | |||
| stressrule 2 | |||
| @@ -1,4 +1,2 @@ | |||
| name Lithuanian | |||
| language lt | |||
| gender male | |||
| @@ -1,6 +1,5 @@ | |||
| name Latvian | |||
| language lv | |||
| gender male | |||
| maintainer Valdis Vitolins <[email protected]> | |||
| status mature | |||
| words 0 2 | |||
| @@ -1,5 +1,4 @@ | |||
| name Swahili | |||
| language sw | |||
| gender male | |||
| status testing | |||
| @@ -1,5 +1,4 @@ | |||
| name Setswana | |||
| language tn | |||
| gender male | |||
| status testing | |||
| @@ -1,5 +1,4 @@ | |||
| name Welsh | |||
| language cy | |||
| gender male | |||
| intonation 4 | |||
| @@ -1,6 +1,5 @@ | |||
| name Malayalam | |||
| language ml | |||
| gender male | |||
| intonation 2 | |||
| //consonants 80 | |||
| @@ -1,6 +1,5 @@ | |||
| name Tamil | |||
| language ta | |||
| gender male | |||
| intonation 2 | |||
| consonants 80 | |||
| @@ -1,7 +1,4 @@ | |||
| name Danish | |||
| language da | |||
| gender male | |||
| tunes s2 c2 q2 e2 | |||
| @@ -1,4 +1,2 @@ | |||
| name Icelandic | |||
| language is | |||
| gender male | |||
| @@ -1,6 +1,5 @@ | |||
| name Norwegian | |||
| language no | |||
| language nb | |||
| gender male | |||
| intonation 4 | |||
| @@ -1,4 +1,2 @@ | |||
| name Swedish | |||
| language sv | |||
| gender male | |||
| @@ -1,6 +1,5 @@ | |||
| name Afrikaans | |||
| language af | |||
| gender male | |||
| maintainer Christo de Klerk <[email protected]> | |||
| status mature | |||
| @@ -1,5 +1,2 @@ | |||
| name German | |||
| language de | |||
| gender male | |||
| @@ -1,7 +1,6 @@ | |||
| name English (Great Britain) | |||
| language en-gb 2 | |||
| language en 2 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -1,7 +1,6 @@ | |||
| name English (Caribbean) | |||
| language en-029 | |||
| language en 10 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -1,7 +1,6 @@ | |||
| name English (Scotland) | |||
| language en-gb-scotland | |||
| language en 4 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -2,7 +2,6 @@ name English (Lancaster) | |||
| language en-gb-x-gbclan | |||
| language en-gb 3 | |||
| language en 5 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -14,5 +13,3 @@ stressLength 160 150 180 180 220 220 290 290 | |||
| replace 00 i@3 i@ | |||
| replace 03 N n | |||
| replace 03 i I2 | |||
| @@ -2,7 +2,6 @@ name English (West Midlands) | |||
| language en-gb-x-gbcwmd | |||
| language en-gb 9 | |||
| language en 9 | |||
| gender male | |||
| phonemes en-wm | |||
| @@ -2,7 +2,6 @@ name English (Received Pronunciation) | |||
| language en-gb-x-rp | |||
| language en-gb 4 | |||
| language en 5 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -1,7 +1,6 @@ | |||
| name English (America) | |||
| language en-us 2 | |||
| language en 3 | |||
| gender male | |||
| maintainer Reece H. Dunn <[email protected]> | |||
| status mature | |||
| @@ -15,4 +14,3 @@ stressAmp 17 16 19 19 19 19 21 19 | |||
| replace 03 I i | |||
| replace 03 I2 i | |||
| @@ -1,3 +1,2 @@ | |||
| name Dutch | |||
| language nl | |||
| gender male | |||
| @@ -1,5 +1,2 @@ | |||
| name Greek (Modern) | |||
| language el | |||
| gender male | |||
| @@ -1,8 +1,6 @@ | |||
| name Greek (Ancient) | |||
| language grc | |||
| gender male | |||
| stressLength 170 170 190 190 0 0 230 240 | |||
| dictrules 1 | |||
| words 3 | |||
| @@ -1,3 +1,2 @@ | |||
| name Bengali | |||
| language bn | |||
| gender male | |||
| @@ -1,3 +1,2 @@ | |||
| name Hindi | |||
| language hi | |||
| gender male | |||
| @@ -1,5 +1,4 @@ | |||
| name Nepali | |||
| language ne | |||
| gender male | |||
| dictrules 1 | |||
| @@ -1,3 +1,2 @@ | |||
| name Armenian (East Armenia) | |||
| language hy | |||
| gender male | |||
| @@ -1,7 +1,6 @@ | |||
| name Armenian (West Armenia) | |||
| language hy-arevmda | |||
| language hy 8 | |||
| gender male | |||
| dictrules 1 | |||
| @@ -19,4 +18,3 @@ replace 00 tS dZ | |||
| replace 00 k g | |||
| replace 00 R2 R // ?? | |||
| @@ -1,6 +1,5 @@ | |||
| name Albanian | |||
| language sq | |||
| gender male | |||
| // add this line to remove 'ë' at the end of words | |||
| // replace 00 @/ NULL | |||
| @@ -1,6 +1,5 @@ | |||
| name Kurdish | |||
| language ku | |||
| gender male | |||
| //words 1 48 | |||
| @@ -1,6 +1,5 @@ | |||
| name Latin | |||
| language la | |||
| gender male | |||
| stressrule 2 33 0 2 | |||
| // rule=penultimate | |||
| // flags=0100001 (no automatic secondary stress + don't stres monosyllables) | |||
| @@ -1,6 +1,5 @@ | |||
| name Japanese | |||
| language jp | |||
| phonemes jp | |||
| gender male | |||
| intonation 4 | |||
| @@ -1,6 +1,5 @@ | |||
| name Korean | |||
| language ko | |||
| gender male | |||
| pitch 80 118 | |||
| intonation 2 | |||
| @@ -1,6 +1,5 @@ | |||
| name Indonesian | |||
| language id | |||
| gender male | |||
| stressLength 160 200 180 180 0 0 220 240 | |||
| stressAmp 16 18 18 18 0 0 22 21 | |||
| @@ -1,7 +1,6 @@ | |||
| // Last updated: 14 October 2010, Jason Ong ([email protected]) | |||
| name Malay | |||
| language ms | |||
| gender male | |||
| phonemes id | |||
| translator id | |||
| @@ -1,3 +1,2 @@ | |||
| name Aragonese | |||
| language an | |||
| gender male | |||
| @@ -1,4 +1,2 @@ | |||
| name Catalan | |||
| language ca | |||
| gender male | |||
| @@ -1,5 +1,4 @@ | |||
| name Spanish (Spain) | |||
| language es | |||
| gender male | |||
| dictrules 1 | |||
| tunes s6 c6 q6 e6 | |||
| @@ -2,7 +2,6 @@ name Spanish (Latin America) | |||
| language es-419 | |||
| language es-mx 6 | |||
| language es 6 | |||
| gender male | |||
| phonemes es-la | |||
| dictrules 2 | |||
| @@ -1,7 +1,6 @@ | |||
| name French (France) | |||
| language fr-fr | |||
| language fr | |||
| gender male | |||
| dictrules 1 | |||
| tunes s3 c3 q3 e3 | |||
| @@ -1,7 +1,6 @@ | |||
| name French (Belgium) | |||
| language fr-be | |||
| language fr 8 | |||
| gender male | |||
| dictrules 2 | |||
| tunes s3 c3 q3 e3 | |||
| @@ -1,9 +1,7 @@ | |||
| name Italian | |||
| language it | |||
| gender male | |||
| maintainer Christian Leo M <[email protected]> | |||
| status mature | |||
| tunes s4 c4 q4 e4 | |||
| @@ -1,7 +1,6 @@ | |||
| name Portuguese (Brazil) | |||
| language pt-br | |||
| language pt | |||
| gender male | |||
| dictrules 2 | |||
| stressLength 200 115 230 230 0 0 250 270 | |||
| @@ -1,7 +1,6 @@ | |||
| name Portuguese (Portugal) | |||
| language pt-pt | |||
| language pt 6 | |||
| gender male | |||
| phonemes pt-pt | |||
| dictrules 1 | |||
| @@ -1,3 +1,2 @@ | |||
| name Romanian | |||
| language ro | |||
| gender male | |||
| @@ -1,7 +1,6 @@ | |||
| name Arabic | |||
| language ar | |||
| phonemes ar | |||
| gender male | |||
| pitch 160 120 | |||
| roughness 0 | |||
| speed 70 | |||
| @@ -1,6 +1,5 @@ | |||
| name Chinese (Mandarin) | |||
| language zh | |||
| gender male | |||
| words 1 | |||
| pitch 80 118 | |||
| @@ -6,7 +6,6 @@ language zhy | |||
| translator zhy | |||
| phonemes zhy | |||
| dictionary zhy | |||
| gender male | |||
| // interpret English letters as 1=English words, 2=jyutping | |||
| dictrules 1 | |||
| @@ -1,4 +1,2 @@ | |||
| name Turkish | |||
| language tr | |||
| gender male | |||
| @@ -1,3 +1,2 @@ | |||
| name Tatar | |||
| language tt | |||
| gender male | |||
| @@ -1,4 +1,2 @@ | |||
| name Finnish | |||
| language fi | |||
| gender male | |||
| @@ -1,6 +1,5 @@ | |||
| name Hungarian | |||
| language hu | |||
| gender male | |||
| option bracket 0 0 | |||
| pitch 81 117 | |||
| @@ -2,7 +2,6 @@ name Bosnian | |||
| language bs | |||
| phonemes hr | |||
| dictionary hbs | |||
| gender male | |||
| pitch 81 120 | |||
| formant 0 100 100 100 | |||
| @@ -1,4 +1,2 @@ | |||
| name Czech | |||
| language cs | |||
| gender male | |||
| @@ -1,7 +1,6 @@ | |||
| name Croatian | |||
| language hr | |||
| language hbs | |||
| gender male | |||
| dictionary hbs | |||
| @@ -1,4 +1,2 @@ | |||
| name Macedonian | |||
| language mk | |||
| gender male | |||
| @@ -1,5 +1,4 @@ | |||
| name Polish | |||
| language pl | |||
| gender male | |||
| intonation 2 | |||
| @@ -1,6 +1,5 @@ | |||
| name Russian | |||
| language ru | |||
| gender male | |||
| replace 03 a a# | |||
| @@ -1,4 +1,2 @@ | |||
| name Slovak | |||
| language sk | |||
| gender male | |||
| @@ -1,6 +1,5 @@ | |||
| name Serbian | |||
| language sr | |||
| gender male | |||
| dictionary hbs | |||
| // attributes towards !variant3 pitch 80 120 | |||
| @@ -265,7 +265,7 @@ void ReadTonePoints(char *string, int *tone_pts) | |||
| &tone_pts[8], &tone_pts[9]); | |||
| } | |||
| static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname) | |||
| static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname, int is_language_file) | |||
| { | |||
| // Read a Voice file, allocate a VOICE_DATA and set data from the | |||
| // file's language, gender, name lines | |||
| @@ -320,6 +320,8 @@ static espeak_VOICE *ReadVoiceFile(FILE *f_in, const char *fname) | |||
| break; | |||
| case V_GENDER: | |||
| sscanf(p, "%s %d", vgender, &age); | |||
| if (is_language_file) | |||
| fprintf(stderr, "Error (%s): gender attribute specified on a language file\n", fname); | |||
| break; | |||
| case V_VARIANTS: | |||
| sscanf(p, "%d", &n_variants); | |||
| @@ -1389,7 +1391,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found) | |||
| return vp->identifier; | |||
| } | |||
| static void GetVoices(const char *path, int len_path_voices) | |||
| static void GetVoices(const char *path, int len_path_voices, int is_language_file) | |||
| { | |||
| FILE *f_voice; | |||
| espeak_VOICE *voice_data; | |||
| @@ -1416,14 +1418,14 @@ static void GetVoices(const char *path, int len_path_voices) | |||
| if (ftype == -EISDIR) { | |||
| // a sub-directory | |||
| GetVoices(fname, len_path_voices); | |||
| GetVoices(fname, len_path_voices, is_language_file); | |||
| } else if (ftype > 0) { | |||
| // a regular file, add it to the voices list | |||
| if ((f_voice = fopen(fname, "r")) == NULL) | |||
| continue; | |||
| // pass voice file name within the voices directory | |||
| voice_data = ReadVoiceFile(f_voice, fname+len_path_voices); | |||
| voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, is_language_file); | |||
| fclose(f_voice); | |||
| if (voice_data != NULL) | |||
| @@ -1452,14 +1454,14 @@ static void GetVoices(const char *path, int len_path_voices) | |||
| if (ftype == -EISDIR) { | |||
| // a sub-directory | |||
| GetVoices(fname, len_path_voices); | |||
| GetVoices(fname, len_path_voices, is_language_file); | |||
| } else if (ftype > 0) { | |||
| // a regular file, add it to the voices list | |||
| if ((f_voice = fopen(fname, "r")) == NULL) | |||
| continue; | |||
| // pass voice file name within the voices directory | |||
| voice_data = ReadVoiceFile(f_voice, fname+len_path_voices); | |||
| voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, is_language_file); | |||
| fclose(f_voice); | |||
| if (voice_data != NULL) | |||
| @@ -1567,10 +1569,10 @@ ESPEAK_API const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec) | |||
| FreeVoiceList(); | |||
| sprintf(path_voices, "%s%cvoices", path_home, PATHSEP); | |||
| GetVoices(path_voices, strlen(path_voices)+1); | |||
| GetVoices(path_voices, strlen(path_voices)+1, 0); | |||
| sprintf(path_voices, "%s%clang", path_home, PATHSEP); | |||
| GetVoices(path_voices, strlen(path_voices)+1); | |||
| GetVoices(path_voices, strlen(path_voices)+1, 1); | |||
| voices_list[n_voices_list] = NULL; // voices list terminator | |||
| espeak_VOICE **new_voices = (espeak_VOICE **)realloc(voices, sizeof(espeak_VOICE *)*(n_voices_list+1)); | |||