|
@@ -379,8 +379,11 @@ const togglePlay = () => {
|
|
|
if (isPlaying.value) {
|
|
if (isPlaying.value) {
|
|
|
// 播放背景音
|
|
// 播放背景音
|
|
|
playBackgroundAudio()
|
|
playBackgroundAudio()
|
|
|
- // 开始播放序列
|
|
|
|
|
- playSequence()
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if(!getIsPlaying() || !conversationInProgress.value){
|
|
|
|
|
+ // 开始播放序列
|
|
|
|
|
+ playSequence()
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
// 暂停所有音频
|
|
// 暂停所有音频
|
|
|
stopAllAudio()
|
|
stopAllAudio()
|
|
@@ -790,14 +793,18 @@ const stopStream = async () => {
|
|
|
// 处理音频播放完成
|
|
// 处理音频播放完成
|
|
|
const handleAudioPlaybackComplete = () => {
|
|
const handleAudioPlaybackComplete = () => {
|
|
|
console.log('智能问答音频播放完成');
|
|
console.log('智能问答音频播放完成');
|
|
|
- // AI回答完成后,如果之前是播放状态,继续播放
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 先清除回调,防止 playNext 内部调用 stopPlayback(false) 时
|
|
|
|
|
+ // 关闭 audioContext 触发 source.onended → processAudioQueue → 再次触发回调,造成二次跳转
|
|
|
|
|
+ setOnPlaybackComplete(null);
|
|
|
|
|
|
|
|
stopAllAudio();
|
|
stopAllAudio();
|
|
|
// 如果处于自动播放状态,继续播放下一条对话
|
|
// 如果处于自动播放状态,继续播放下一条对话
|
|
|
if (isPlaying.value) {
|
|
if (isPlaying.value) {
|
|
|
- if (playNext()) {
|
|
|
|
|
- // 继续自动播放序列
|
|
|
|
|
- playSequence();
|
|
|
|
|
|
|
+ // 恢复回调,供下一条 AI 对话使用
|
|
|
|
|
+ setOnPlaybackComplete(handleAudioPlaybackComplete);
|
|
|
|
|
+ if (playNext(true)) {
|
|
|
|
|
+ // playNext 内部已调用 playDialogueAudio(true),无需再调 playSequence
|
|
|
} else {
|
|
} else {
|
|
|
// 播放完毕
|
|
// 播放完毕
|
|
|
isPlaying.value = false;
|
|
isPlaying.value = false;
|