10

我正在尝试在我的 Activity 中实现 android 的文本到语音技术,但我遇到了一个奇怪的错误。从我的代码中,我听不到任何声音。speak 方法只有在我将它放在 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);
         }         
    }

奇怪的是,如果我将 say 方法放在 onInit 中,它就可以正常工作!

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

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

然后什么也没有发生。

知道上面的代码有什么问题吗?

提前致谢!

4

4 回答 4

17

在查看代码几个小时后,我注意到问题在于 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);
            }
        }
    });
于 2012-03-15T09:00:50.527 回答
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;
}
于 2016-05-19T05:52:18.733 回答
2

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

于 2017-01-18T16:42:33.243 回答
0

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

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

于 2012-03-12T14:26:53.010 回答