I am setting my TextToSpeech to use a particular language (English - UK), using the locale "en_GB". But it always uses my devices default language. Is there no way to set it programmatically? I have downloaded the files required for the language and when I change my TTS's default language to 'English - UK' it works but when the default is different the programmatic approach does not work. I have scoured the web to my best but am unable to resolve this issue.
String ttsEngine = "com.google.android.tts";
txt2Speech = new TextToSpeech(this, this, ttsEngine);
//Locale ttsLocale = new Locale("eng", "GBR");
txt2Speech.setLanguage(new Locale("en_GB"));
Tried several methods, but none are working. Can I not set my TTS's language programmatically?
Thank You
EDIT: In response to 'A Honey Bustard'
Other Code:
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener
My onInit()
public void onInit(int status) {
// TODO Auto-generated method stub
}
Also I'm calling .setLanguage()
in my onCreate()
, as soon as my TextToSpeech
is initialized. Is that correct? Also I'm only calling it once. It is not required to call it every time right? Also I'm testing on a GS7
You need to set the language once the Text to Speech Engine has initialised correctly.
public void onInit(int status) {
switch (status) {
case SUCCESS:
// Set the language here
break;
case ERROR:
// Something went wrong. You can't set the language
break;
}
}
That should do it.
Try the second Constructor from Locale that takes two Strings like this :
txt2Speech.setLanguage(new Locale("en", "GB"));
EDIT :
Yes it is usually ok to do instantiate it in onCreate, and it usually only needs and should be done once.
All I can do is show you my working code, I am setting the default language after instantiating in onCreate() :
textToSpeech = new TextToSpeech(getApplicationContext(), this);
textToSpeech.setLanguage(Locale.getDefault());
In my app there are buttons in which you can change the language, which trigger this code (case British English) :
textToSpeech.setLanguage(new Locale("en", "GB"));
Maybe it is not available somehow , there are some checks you can validate if the language and country is available. You might find your error there.
if (textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_COUNTRY_AVAILABLE
&& textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_AVAILABLE)
should return true.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With