我正在尝试在我的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
然后没有任何反应。
有关上述代码有什么问题的想法吗?
提前致谢!
答案 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上拔下测试设备,看看是否能解决问题。
您可能尝试的另一件事是逐步完成该程序,看看您是否在意外时以任何方式改变了您的文本到语音对象。在代码的谈话部分设置一个断点,并查看谈话者对象中的所有变量。