安卓 - 文本到语音转换确定进程结束



由于我的文本长度超过 TTS 的 4000 个字符限制,我将字符串划分为更多部分,并将这些部分循环添加到 tts 队列中,例如:

int pos = 0;
while(true) {
            String var = "";
            try {
                var = str.substring(pos, 3999);
                pos += 3999;
            } catch(Exception e) {
                var = str.substring(pos, str.length());
                break;
            }
           Bundle params = new Bundle();
        params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "");
            tts.speak(var, TextToSpeech.QUEUE_ADD, params, "myID");
        }

但是这有效,但是在演讲结束后,我需要再次更改停止按钮以进行播放按钮。

我正在 onDone(( 中更改此按钮。

              tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                    @Override
                    public void onDone(String utteranceId) {
                         Log.d("Speak", "TTS finished");

                        runOnUiThread(new Runnable() {
                            public void run() {
                                Button view2 = findViewById(R.id.speech);
                                view2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.play, 0, 0, 0);
                            }
                        });
                         }

                    @Override
                    public void onError(String utteranceId) {
                    }
                    @Override
                    public void onStart(String utteranceId) {
                    }
                });

问题是,onDone 在每个队列完成后调用。因此,如果队列中有更多部分,则会多次调用 onDone。我无法确定何时处理最后一个队列,以便何时更改按钮。

我想我已经找到了一个解决方案 - 通过在

tts.speak(var, TextToSpeech.QUEUE_ADD, params, id1);

在下一个条件 ID2 中。然后签入完成话语 ID 并据此更改按钮。

似乎工作得很好。

最新更新