Android TTS不说话

Nic*_*ick 7 android text-to-speech google-text-to-speech

我试图在我的Activity中实现android的文本到语音技术,但我面临一个奇怪的错误.从我的代码中我听不到任何声音.只有当我将它放在onInit方法中时,speak方法才有效,否则它就不会说话.

我的代码如下:

public class GameOverActivity extends Activity implements OnInitListener {
private TextToSpeech talker;
....
talker = new TextToSpeech(this, this);  
say("Something",false);
...
   public void onInit(int status) {  
        if (status == TextToSpeech.SUCCESS) {
          talker.setLanguage(Locale.US);
        }
        else if (status == TextToSpeech.ERROR) {
            Toast.makeText(this,"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }

void say(String text, boolean flush) {
         if(flush == true)
         {
        talker.speak(text,TextToSpeech.QUEUE_FLUSH,null);
         }
         if(flush == false)
         {
        talker.speak(text,TextToSpeech.QUEUE_ADD,null);
         }         
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我将say方法放在onInit中,它运行正常!

我仔细观察了logcat,结果如下:

TtsService.OnCreate()TTs正在加载AudioTrack启动TTSService.setLanguage加载en-US将语音速率设置为100

然后没有任何反应.

有关上述代码有什么问题的任何想法?

提前致谢!

Nic*_*ick 13

经过几个小时查看代码后,我注意到问题是TTS引擎初始化需要一些时间.如果初始化未结束,则speak方法调用将失败.

如果你在点击按钮上"说"某些东西,你可能不会需要这个,因为用户在按下按钮之前需要一些时间思考,初始化将结束.

如果您想在初始化完成后"说"某些内容,请使用以下代码:

talker = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int arg0) {
       if(arg0 == TextToSpeech.SUCCESS) 
           {
        talker.setLanguage(Locale.US);
            say(gameover,true);
            say(line,false);
            say(definition_string,false);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)