[Scummvm-git-logs] scummvm master -> b9d3c84db4e10cc0e55e4c2a12e288c17c7e66d2

vyzigold smulumas at gmail.com
Wed Oct 16 19:33:44 CEST 2019


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b9d3c84db4 TTS: Fix language setting.


Commit: b9d3c84db4e10cc0e55e4c2a12e288c17c7e66d2
    https://github.com/scummvm/scummvm/commit/b9d3c84db4e10cc0e55e4c2a12e288c17c7e66d2
Author: Jaromir Wysoglad (jaromirwysoglad at gmail.com)
Date: 2019-10-16T19:30:56+02:00

Commit Message:
TTS: Fix language setting.

Changed paths:
    backends/text-to-speech/linux/linux-text-to-speech.cpp
    backends/text-to-speech/windows/windows-text-to-speech.cpp
    common/text-to-speech.cpp
    common/text-to-speech.h
    gui/gui-manager.cpp
    gui/options.cpp


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 ccedb6b..5943b69 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 0e794d7..2b405f5 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 cdfc8ab..fa74e53 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 8e86721..14cbab1 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 5a39746..659d87b 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 073d04b..6cf7df0 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);
 	}





More information about the Scummvm-git-logs mailing list