我有一个按钮(播放图标作为背景),开始阅读一些文字(文字转语音)。
我想在tts讲话时改变我的按钮背景(使用停止图标)。 然后,当它停止说话时,我想将按钮背景重置为第一个(播放图标)。
我正在尝试使用线程,但我没有得到愿望结果..
请点击按钮点击监听器上的代码:
if (tts.isSpeaking()) {
tts.stop();
btn4.setBackgroundResource(R.drawable.sound_icon);
} else {
Thread splashTread = new Thread() {
@Override
public void run() {
try {
while (tts.isSpeaking()) {
sleep(100);
btn4.setBackgroundResource(R.drawable.stop_icon);
}
} catch (Exception e) {
// do nothing
} finally {
btn4.setBackgroundResource(R.drawable.sound_icon);
}
}
};
if (myText.equals("")) {
speech("No text");
splashTread.start();
} else {
speech(myText);
splashTread.start();
}
答案 0 :(得分:1)
所以我从未使用过TTS,但是非常快速的搜索带给我回调:onutterancecompleted
还要检查帖子:How to know when TTS is finished?
看起来你有一个回调,当tts开始时,onInit()你可以改变背景,另一个,onutterancecompleted你可以恢复背景。
告诉我它是否有效,我会利用我的业余时间。
答案 1 :(得分:1)
这是检查讲话结束时的一种相当糟糕的方式。相反,您应该使用setOnUtteranceProgressListener
来检查语音何时结束。您的代码可能非常简单:
if (tts.isSpeaking()) {
tts.stop();
btn4.setBackgroundResource(R.drawable.sound_icon);
} else {
tts.setOnUtteranceProgressListener(new OnUtteranceProgressListener() {
public onDone(String utteranceId) {
btn4.setBackgroundResource(R.drawable.sound_icon);
}
void onError(String utteranceId) {
btn4.setBackgroundResource(R.drawable.stop_icon);
}
void onStart(String utteranceId) { }
});
if (myText.equals("")) {
speech("No text");
}
else {
speech(myText);
}
}
答案 2 :(得分:1)
例如,您可能希望在myTextView完成合成之后更改背景
ashMap<String, String> myHashAlarm = new HashMap();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
String.valueOf(AudioManager.STREAM_ALARM));
mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
mTts.speak(myText2, TextToSpeech.QUEUE_ADD, myHashAlarm);
我们将使用一个可选参数来标记我们想要识别的话语。我们还需要确保我们的活动实现
TextToSpeech.OnUtteranceCompletedListener interface:
mTts.setOnUtteranceCompletedListener(this);
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
String.valueOf(AudioManager.STREAM_ALARM));
mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
"end of message");
// myHashAlarm now contains two optional parameters
mTts.speak(myText2, TextToSpeech.QUEUE_ADD, myHashAlarm);
活动会收到有关监听器实现完成情况的通知:
public void onUtteranceCompleted(String uttId) {
if (uttId == "end of message") {
// Do your work here
btn4.setBackgroundResource(R.drawable.stop_icon);
}
}
完成后, HashMap
用于wake up
用户。