我正在尝试在我的活动中为Android的语音技术实施文本,但我面临着一个奇怪的错误。从我的代码中听不到任何声音。如果我将其放在oninit方法中,则说话方法才有效,否则它不会说话。

我的代码如下:

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);
         }         
    }
.

奇怪的是,如果我在oninit中放置say方法,它会很好!

我仔细观看了Logcat,这里是结果:

ttsservice.oncreate() TTS是加载 Audiot rack开始了 ttsservice.setLanguage 加载en-US 将语音速率设置为100

然后没有任何反应。

关于上面代码有什么问题的想法?

提前感谢!

有帮助吗?

解决方案

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

如果你“说”按钮单击,你可能会不需要这个,因为用户将花一些时间在按下按钮之前思考,并且初始化将结束。

如果要“说”某些东西即将初始化完成,请使用此代码:

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);
            }
        }
    });
.

其他提示

建议您从主要活动中实现生成的。尝试这个

public class GameOverActivity extends Activity implements TextToSpeech.OnInitListener {

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {

        int result = mTts.setLanguage(Locale.US);
        // Try this someday for some interesting results.
        // int result mTts.setLanguage(Locale.FRANCE);
        if (result == TextToSpeech.LANG_MISSING_DATA ||
                result == TextToSpeech.LANG_NOT_SUPPORTED) {
            // Lanuage data is missing or the language is not supported.
            //Log.e(TAG, "Language is not available.");
        } else {
            // Check the documentation for other possible result codes.
            // For example, the language may be available for the locale,
            // but not for the specified country and variant.

            // The TTS engine has been successfully initialized.
            // Allow the user to press the button for the app to speak again.
            // mAgainButton.setEnabled(true);
            // Greet the user.
            //sayHello();
        }
    } else {
        // Initialization failed.

    }

}

private TextToSpeech mTts;
}
.

好吧,这个问题的另一个原因可能是你的TTS引擎,有时在三星手机中默认的TTS引擎是三星引擎,这不适用于像波斯语那样的某种语言(我不是对波斯文文本的意思,即使你是'重新尝试阅读英文文本,它仍然不起作用,这是奇怪的,但它发生了)。 为了解决它,您所要做的就是在代码上设置TTS引擎(或手动选择Setting -> Language input -> Text to speech -> Google Text-to-speech

我与文本到语音有一个问题是,如果它安装到SD卡,那么它不会在USB插入时工作。因此,您可能会尝试从USB拔下测试设备,并查看该问题是否解决了问题。

您可能尝试的另一件事是踩到程序并查看您是否在事故中以任何方式更改文本到语音对象。在代码的谈话部分上设置一个断点,并查看Talker对象中的所有变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top