From c67608b8270b108277fbbe243303bc7950bf1ba9 Mon Sep 17 00:00:00 2001 From: shengchanzhe <179998674@qq.com> Date: Fri, 13 Oct 2023 09:46:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/chat/components/Message/index.vue | 45 +++++++++++++++++---- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/src/views/chat/components/Message/index.vue b/src/views/chat/components/Message/index.vue index 6f595d5..eb3da9b 100644 --- a/src/views/chat/components/Message/index.vue +++ b/src/views/chat/components/Message/index.vue @@ -91,12 +91,14 @@ async function handleCopy() { message.error('复制失败') } } - +const playStatus = ref('end') let playing = 0 +let sok = false async function radioPlay() { console.log('播放', props.mp3) - audioElements = [] + audioElements.length = 0 const socket = new WebSocket('wss://chat.lihaink.cn/zhanti/tts') + sok = true const promise = () => { return new Promise((resolve, reject) => { @@ -111,14 +113,21 @@ async function radioPlay() { await promise() + socket.onerror = (event: any) => { sok = false; console.log('连接错误事件: ', event) } + // 监听WebSocket关闭事件 socket.onclose = (event: any) => { console.log('连接已关闭: ', event) + sok = false } + // socket.send(JSON.stringify({ + // data: '快。科。技0月12。日消息。不宣而发的。华为Mate 60在上架官方商城后。直到现在都处于一机难求的状态。由于Mate 60系列的爆火。华为也是将明年的预计手机出货量翻倍到了7000万台。', + // })) socket.send(JSON.stringify({ - data: '快。科。技0月12。日消息。不宣而发的。华为Mate 60在上架官方商城后。直到现在都处于一机难求的状态。由于Mate 60系列的爆火。华为也是将明年的预计手机出货量翻倍到了7000万台。', + data: props.text, })) + playStatus.value = 'playing' let i = 0 // 监听WebSocket接收消息事件 socket.onmessage = (event: any) => { @@ -154,6 +163,7 @@ const onAudioEnd = (index: any) => { playFlag = true audioElements[playing].play() } + else { playStatus.value = 'end' } } // 创建音频对象的数组 const audioElements = reactive([]) @@ -164,15 +174,27 @@ const playAudio = (playIndex: any) => { } watch(() => audioElements.length, (newVal, oldVal) => { - if (newVal > playing && playFlag == false && newVal > 0) + if (playStatus.value == 'pause') + return + if (newVal > playing && playFlag == false && newVal > 0) { audioElements[playing].play() + playStatus.value = 'playing' + } }) +let pauseIndex = -1 // 暂停音频 const pauseAudio = () => { + pauseIndex = playing + 0 + playStatus.value = 'pause' for (let i = 0; i < audioElements.length; i++) audioElements[i].pause() } +const noPauseAudio = () => { + playStatus.value = 'playing' + audioElements[pauseIndex].play() + pauseIndex = -1 +}