Search code examples
androidtext-to-speech

How can I get Text To Speech to read a foreign language?


When I check which languages are available Thai (th)is available butit doesn't read the text

@SuppressLint("NewApi")
private void speak() {
    if(tts!=null && tts.isSpeaking()){
        tts.stop();
    }else{
        tts = new TextToSpeech(this, this);
        tts.setLanguage(Locale.forLanguageTag("th"));       //tts.getAvailableLanguages().;
        tts.setSpeechRate(0.7f);
    }
}

@Override
public void onInit(int status) {

    tts.speak("ซึ่งมีระยะทางส่วนใหญ่เป็น ทางหลวงแผ่นดินหมายเลข (สายบางนา - หาดเล็ก) เป็นเส้นทางคมนาคมหลักเส้นหนึ่งของประเทศไทย ", TextToSpeech.QUEUE_FLUSH, null);

}

Solution

  • Edit your code like this:

    @SuppressLint("NewApi")
    private void speak() {
        if(tts!=null && tts.isSpeaking()) {
            tts.stop();
        }else{
            tts = new TextToSpeech(this, this);
        }
    }
    
    @Override public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            int res = tts.setLanguage("th_TH");
            //tts.getAvailableLanguages().;
            tts.setSpeechRate(0.7f);
    
            if (res >= TextToSpeech.LANG_AVAILABLE) {
                tts.speak("ซึ่งมีระยะทางส่วนใหญ่เป็น ทางหลวงแผ่นดินหมายเลข (สายบางนา - หาดเล็ก) เป็นเส้นทางคมนาคมหลักเส้นหนึ่งของประเทศไทย ", TextToSpeech.QUEUE_FLUSH, null);
        }
    }
    

    Because TextToSpeech instance is created asynchronously, so you can hear synthesis result when you control your tts after onInit() method was done.