[英]TTS doesn't speak from a service whereas it does it from an activity in android
[英]Android TTS doesn't speak
我正在尝试在我的活动中实现 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
然后什么也没有发生。
知道上面的代码有什么问题吗?
提前致谢!
在查看代码几个小时后,我注意到问题在于 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);
}
}
});
建议您从主要活动中实现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;
}
这个问题的另一个原因可能是您的 TTS 引擎,有时在 SAMSUNG 手机中,默认 TTS 引擎是 SAMSUNG Engine,它不适用于波斯语等某些语言(我不是指波斯语文本,即使您尝试阅读英文文本,它仍然不起作用,这很奇怪,但它发生了)。 为了解决这个问题,您所要做的就是在您的代码上设置 TTS 引擎(或手动选择Setting -> Language input -> Text to speech -> Google Text-to-speech
)
如果您的目标是 Android 11,您可能还需要将此代码添加到清单文件中以使 TTS 正常工作:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
我遇到的文本转语音的一个问题是,如果它安装到 SD 卡上,那么在插入 USB 时它将无法工作。 因此,您可以尝试从 USB 上拔下您的测试设备,看看是否能解决问题。
您可能会尝试的另一件事是逐步执行程序并查看您是否以任何方式意外更改了文本到语音的对象。 在代码的谈话部分设置一个断点,并查看谈话者对象中的所有变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.