TTS: Fix language setting.
This commit is contained in:
parent
94d17b1853
commit
b9d3c84db4
6 changed files with 19 additions and 11 deletions
|
@ -330,8 +330,8 @@ void SpeechDispatcherManager::setVolume(unsigned volume) {
|
|||
void SpeechDispatcherManager::setLanguage(Common::String language) {
|
||||
if (_speechState == BROKEN)
|
||||
return;
|
||||
spd_set_language(_connection, language.c_str());
|
||||
_ttsState->_language = language;
|
||||
Common::TextToSpeechManager::setLanguage(language);
|
||||
spd_set_language(_connection, _ttsState->_language.c_str());
|
||||
setVoice(_ttsState->_activeVoice);
|
||||
}
|
||||
|
||||
|
|
|
@ -338,9 +338,7 @@ void WindowsTextToSpeechManager::setVolume(unsigned volume) {
|
|||
}
|
||||
|
||||
void WindowsTextToSpeechManager::setLanguage(Common::String language) {
|
||||
if (language == "C")
|
||||
language = "en";
|
||||
_ttsState->_language = language;
|
||||
Common::TextToSpeechManager::setLanguage(language);
|
||||
updateVoices();
|
||||
setVoice(0);
|
||||
}
|
||||
|
@ -471,7 +469,7 @@ void WindowsTextToSpeechManager::updateVoices() {
|
|||
|
||||
if (_ttsState->_availableVoices.empty()) {
|
||||
_speechState = NO_VOICE;
|
||||
warning("No voice is available");
|
||||
warning("No voice is available for language: %s", _ttsState->_language.c_str());
|
||||
} else if (_speechState == NO_VOICE)
|
||||
_speechState = READY;
|
||||
}
|
||||
|
|
|
@ -145,5 +145,18 @@ Array<int> TextToSpeechManager::getVoiceIndicesByGender(TTSVoice::Gender gender)
|
|||
return results;
|
||||
}
|
||||
|
||||
void TextToSpeechManager::setLanguage(Common::String language) {
|
||||
if (language == "C")
|
||||
language = "en";
|
||||
// The speech manager uses the ISO 639-1 for language codes (2 letter code)
|
||||
// if we get a longer language string, just take the first 2 letters from that
|
||||
// if it won't be a valid language code, the Manager just won't find any voice
|
||||
// for it. This way a code like (en_GB) can also be passed to this.
|
||||
if (language.size() > 2) {
|
||||
language.erase(2, Common::String::npos);
|
||||
}
|
||||
_ttsState->_language = language;
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -271,7 +271,7 @@ public:
|
|||
* because voices are usually language specific and so it is set to some platform
|
||||
* specific default after switching languages.
|
||||
*/
|
||||
virtual void setLanguage(String language) { _ttsState->_language = language; }
|
||||
virtual void setLanguage(String language);
|
||||
|
||||
/**
|
||||
* Returns the current speech language
|
||||
|
|
|
@ -638,8 +638,6 @@ void GuiManager::initTextToSpeech() {
|
|||
Common::String currentLanguage = TransMan.getCurrentLanguage();
|
||||
if (currentLanguage == "C")
|
||||
currentLanguage = "en";
|
||||
else
|
||||
currentLanguage.setChar('\0', 2);
|
||||
ttsMan->setLanguage(currentLanguage);
|
||||
#endif
|
||||
int volume = (ConfMan.getInt("speech_volume", "scummvm") * 100) / 256;
|
||||
|
|
|
@ -2158,8 +2158,7 @@ void GlobalOptionsDialog::apply() {
|
|||
if (newLang == "C")
|
||||
ttsMan->setLanguage("en");
|
||||
else {
|
||||
Common::String guiLang(newLang.c_str(), 2);
|
||||
ttsMan->setLanguage(guiLang);
|
||||
ttsMan->setLanguage(newLang);
|
||||
}
|
||||
_ttsVoiceSelectionPopUp->setSelectedTag(0);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue