diff options
-rw-r--r-- | backends/text-to-speech/linux/linux-text-to-speech.cpp | 4 | ||||
-rw-r--r-- | backends/text-to-speech/windows/windows-text-to-speech.cpp | 6 | ||||
-rw-r--r-- | common/text-to-speech.cpp | 13 | ||||
-rw-r--r-- | common/text-to-speech.h | 2 | ||||
-rw-r--r-- | gui/gui-manager.cpp | 2 | ||||
-rw-r--r-- | gui/options.cpp | 3 |
6 files changed, 19 insertions, 11 deletions
diff --git a/backends/text-to-speech/linux/linux-text-to-speech.cpp b/backends/text-to-speech/linux/linux-text-to-speech.cpp index ccedb6bf6b..5943b69f49 100644 --- a/backends/text-to-speech/linux/linux-text-to-speech.cpp +++ b/backends/text-to-speech/linux/linux-text-to-speech.cpp @@ -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); } diff --git a/backends/text-to-speech/windows/windows-text-to-speech.cpp b/backends/text-to-speech/windows/windows-text-to-speech.cpp index 0e794d7baa..2b405f5553 100644 --- a/backends/text-to-speech/windows/windows-text-to-speech.cpp +++ b/backends/text-to-speech/windows/windows-text-to-speech.cpp @@ -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; } diff --git a/common/text-to-speech.cpp b/common/text-to-speech.cpp index cdfc8ab77f..fa74e53c36 100644 --- a/common/text-to-speech.cpp +++ b/common/text-to-speech.cpp @@ -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 diff --git a/common/text-to-speech.h b/common/text-to-speech.h index 8e86721701..14cbab17a5 100644 --- a/common/text-to-speech.h +++ b/common/text-to-speech.h @@ -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 diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp index 5a39746bad..659d87bef2 100644 --- a/gui/gui-manager.cpp +++ b/gui/gui-manager.cpp @@ -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; diff --git a/gui/options.cpp b/gui/options.cpp index 073d04b0a9..6cf7df0f08 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -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); } |