gpt4 book ai didi

Android - 文本到语音确定进程结束

转载 作者:行者123 更新时间:2023-11-29 22:41:34 25 4
gpt4 key购买 nike

由于我的文本超过了 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 在每个 Queue 完成后调用。所以如果队列中有更多的部分,onDone 会被调用很多次。我无法确定,最后一个队列何时处理,何时更改按钮。

最佳答案

我想我已经找到了解决方案 - 通过发送不同的 utteranceId

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

在下一个条件 id2 中。然后检查 onDone 的 utteranceId 并根据它更改按钮。

看起来效果很好。

关于Android - 文本到语音确定进程结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59000274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com