更改按钮背景,直到tts停止说话

时间:2013-11-06 16:57:22

标签: android text-to-speech

我有一个按钮(播放图标作为背景),开始阅读一些文字(文字转语音)。

我想在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();

                    }

3 个答案:

答案 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用户。