diff --git a/espeak-data/voices/mb/mb-de5 b/espeak-data/voices/mb/mb-de5 index 147d290b..569f9d05 100755 --- a/espeak-data/voices/mb/mb-de5 +++ b/espeak-data/voices/mb/mb-de5 @@ -3,5 +3,8 @@ language de 7 gender female pitch 140 220 -mbrola de5 de5_phtrans +mbrola de5 de6_phtrans 22050 +// avoid glottal stops. de5 assumes [?] between pause and vowel +replace 00 _! _ +replace 00 _| _ diff --git a/espeak-data/voices/mb/mb-de5-en b/espeak-data/voices/mb/mb-de5-en index 77ed4f96..91120087 100755 --- a/espeak-data/voices/mb/mb-de5-en +++ b/espeak-data/voices/mb/mb-de5-en @@ -3,5 +3,5 @@ language en gender female pitch 140 220 -mbrola de5 de5_phtrans +mbrola de5 de5_phtrans 22050 diff --git a/espeak-data/voices/mb/mb-de6 b/espeak-data/voices/mb/mb-de6 index 70b7ba09..35a4a3fc 100644 --- a/espeak-data/voices/mb/mb-de6 +++ b/espeak-data/voices/mb/mb-de6 @@ -2,5 +2,5 @@ name german-mbrola-6 language de 6 gender male -mbrola de6 de5_phtrans +mbrola de6 de6_phtrans 22050 diff --git a/espeak-data/voices/mb/mb-de7 b/espeak-data/voices/mb/mb-de7 index 52b5a695..aa80edaa 100755 --- a/espeak-data/voices/mb/mb-de7 +++ b/espeak-data/voices/mb/mb-de7 @@ -3,5 +3,5 @@ language de 7 gender female pitch 140 220 -mbrola de7 de5_phtrans +mbrola de7 de6_phtrans 22050 diff --git a/phsource/mbrola/de5 b/phsource/mbrola/de6 similarity index 96% rename from phsource/mbrola/de5 rename to phsource/mbrola/de6 index 2033475a..54aa54e9 100644 --- a/phsource/mbrola/de5 +++ b/phsource/mbrola/de6 @@ -21,8 +21,8 @@ 0 Y: NULL 0 2: 0 OI NULL 0 OY 0 3 NULL 0 6 -//0 _! NULL 0 ? -0 _| NULL 0 ? +0 _| VWL 0 ? +0 _! VWL 0 ? 0 pF NULL 0 pf 0 r NULL 0 R diff --git a/src/phonemelist.cpp b/src/phonemelist.cpp index 76e2b4b3..ddc53943 100755 --- a/src/phonemelist.cpp +++ b/src/phonemelist.cpp @@ -590,7 +590,7 @@ void Translator::MakePhonemeList(int post_pause, int start_sentence) phlist[ix].length = 0; phlist[ix].sourceix=0; phlist[ix].synthflags = 0; - phlist[ix++].ph = phoneme_tab[phonPAUSE_VSHORT]; + phlist[ix++].ph = phoneme_tab[phonPAUSE_SHORT]; n_phoneme_list = ix; } // end of MakePhonemeList diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index 13ca2317..c8fd80cb 100755 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -110,8 +110,8 @@ int mbrola_control = 0; -espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans) -{//======================================================================== +espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate) +{//=================================================================================== // Load a phoneme name translation table from espeak-data/mbrola int size; @@ -137,7 +137,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans) setNoError_MBR(1); // don't stop on phoneme errors #else - mb_handle = mbrolib_init( 22050 ); + mb_handle = mbrolib_init(srate); mbrolib_parameter m_parameters; if(mb_handle == NULL) @@ -176,11 +176,14 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans) #endif // USE_MBROLA_LIB option_quiet = 1; - samplerate = 16000; + samplerate = srate; + if(srate == 22050) + SetParameter(espeakVOICETYPE,0,0); + else + SetParameter(espeakVOICETYPE,1,0); strcpy(mbrola_name,mbrola_voice); - SetParameter(espeakVOICETYPE,1,0); return(EE_OK); -} +} // end of LoadMbrolaTable int GetMbrName(PHONEME_LIST *plist, PHONEME_TAB *ph, PHONEME_TAB *ph_prev, PHONEME_TAB *ph_next, int *name2, int *split, int *control) diff --git a/src/synthdata.cpp b/src/synthdata.cpp index b59eae7d..7335ea00 100755 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.29.06 11.Sep.07"; +const char *version_string = "1.29.07 17.Sep.07"; const int version_phdata = 0x012901; int option_device_number = -1; diff --git a/src/synthesize.h b/src/synthesize.h index 4e605b53..ca15d442 100755 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -268,7 +268,7 @@ extern SOUND_ICON soundicon_tab[N_SOUNDICON_TAB]; espeak_ERROR SetVoiceByName(const char *name); espeak_ERROR SetVoiceByProperties(espeak_VOICE *voice_selector); -espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans); +espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int srate); void SetParameter(int parameter, int value, int relative); void MbrolaTranslate(PHONEME_LIST *plist, int n_phonemes, FILE *f_mbrola); int MbrolaSynth(char *p_mbrola); diff --git a/src/voices.cpp b/src/voices.cpp index 12fa1a3f..ece8191c 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -386,7 +386,7 @@ SetToneAdjust(voice,tone_points); n_replace_phonemes = 0; option_tone1 = 0; option_quiet = 0; - LoadMbrolaTable(NULL,NULL); + LoadMbrolaTable(NULL,NULL,0); } } // end of VoiceReset @@ -817,11 +817,13 @@ voice_t *LoadVoice(const char *vname, int control) case V_MBROLA: { + int srate = 16000; char name[40]; char phtrans[40]; + phtrans[0] = 0; - sscanf(p,"%s %s",name,phtrans); - LoadMbrolaTable(name,phtrans); + sscanf(p,"%s %s %d",name,phtrans,&srate); + LoadMbrolaTable(name,phtrans,srate); } break;