Nic*_*ick 7 android text-to-speech google-text-to-speech
我试图在我的Activity中实现android的文本到语音技术,但我面临一个奇怪的错误.从我的代码中我听不到任何声音.只有当我将它放在onInit方法中时,speak方法才有效,否则它就不会说话.
我的代码如下:
Run Code Online (Sandbox Code Playgroud)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
然后没有任何反应.
有关上述代码有什么问题的任何想法?
提前致谢!
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)
| 归档时间: |
|
| 查看次数: |
14530 次 |
| 最近记录: |