Android TTS不说话

时间:2012-03-12 13:47:42

标签: 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);
         }         
    }

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

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

TtsService.OnCreate() TT正在加载 AudioTrack开始了 TTSService.setLanguage 真实地加载了en-US 将语速设置为100

然后没有任何反应。

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

提前致谢!

4 个答案:

答案 0 :(得分: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);
            }
        }
    });

答案 1 :(得分:3)

建议您从主要活动中实施TextToSpeech.OnInitListener。试试这个

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

答案 2 :(得分:1)

这个问题的另一个原因可能是你的TTS引擎,有时在SAMSUNG手机中,默认的TTS引擎是SAMSUNG引擎,它不适用于某些语言,如波斯语(我不是指波斯文,即使你'重新尝试阅读英文文本,它仍然不起作用,这很奇怪,但它发生了)。 为了解决这个问题,您只需在代码上设置TTS引擎(或手动选择Setting -> Language input -> Text to speech -> Google Text-to-speech

答案 3 :(得分:0)

我在文本到语音转换时遇到的一个问题是,如果将它安装到SD卡上,那么当USB插入时它将无法工作。因此,您可以尝试从USB上拔下测试设备,看看是否能解决问题。

您可能尝试的另一件事是逐步完成该程序,看看您是否在意外时以任何方式改变了您的文本到语音对象。在代码的谈话部分设置一个断点,并查看谈话者对象中的所有变量。