From d9ce5e4ce7f30f8b59447676a5063891d4d4f557 Mon Sep 17 00:00:00 2001 From: funshine Date: Tue, 15 Apr 2025 10:55:00 +0800 Subject: [PATCH 1/3] fix audio test page websocket disconn --- .../test/abbreviated_version/app.js | 10 +++- main/xiaozhi-server/test/test_page.html | 56 ++++++++++++------- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/main/xiaozhi-server/test/abbreviated_version/app.js b/main/xiaozhi-server/test/abbreviated_version/app.js index 59b75625..b2286524 100644 --- a/main/xiaozhi-server/test/abbreviated_version/app.js +++ b/main/xiaozhi-server/test/abbreviated_version/app.js @@ -992,7 +992,9 @@ function connectToServer() { if(connectButton.id === "connectButton") { connectButton.textContent = '断开'; - connectButton.onclick = disconnectFromServer; + // connectButton.onclick = disconnectFromServer; + connectButton.removeEventListener("click", connectToServer); + connectButton.addEventListener("click", disconnectFromServer); } if(messageInput.id === "messageInput") { @@ -1011,7 +1013,9 @@ function connectToServer() { if(connectButton.id === "connectButton") { connectButton.textContent = '连接'; - connectButton.onclick = connectToServer; + // connectButton.onclick = connectToServer; + connectButton.removeEventListener("click", disconnectFromServer); + connectButton.addEventListener("click", connectToServer); } if(messageInput.id === "messageInput") { @@ -1175,7 +1179,7 @@ function updateStatus(message, type = 'info') { // 处理文本消息 function handleTextMessage(message) { if (message.type === 'hello') { - console.log(`服务器回应:${message.message}`); + console.log(`服务器回应:${JSON.stringify(message, null, 2)}`); } else if (message.type === 'tts') { // TTS状态消息 if (message.state === 'start') { diff --git a/main/xiaozhi-server/test/test_page.html b/main/xiaozhi-server/test/test_page.html index 2735fb5a..35dd57ef 100644 --- a/main/xiaozhi-server/test/test_page.html +++ b/main/xiaozhi-server/test/test_page.html @@ -475,22 +475,36 @@ // 日志函数 function log(message, type = 'info') { - const logEntry = document.createElement('div'); - logEntry.className = `log-entry log-${type}`; - logEntry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`; - if (type === 'error') { - logEntry.style.color = 'red'; - } else if (type === 'debug') { - logEntry.style.color = 'gray'; - return; - } else if (type === 'warning') { - logEntry.style.color = 'orange'; - } else if (type === 'success') { - logEntry.style.color = 'green'; - } else { - logEntry.style.color = 'black'; - } - logContainer.appendChild(logEntry); + // 将消息按换行符分割成多行 + const lines = message.split('\n'); + const now = new Date(); + // const timestamp = `[${now.toLocaleTimeString()}] `; + const timestamp = `[${now.toLocaleTimeString()}.${now.getMilliseconds().toString().padStart(3, '0')}] `; + // 为每一行创建日志条目 + lines.forEach((line, index) => { + const logEntry = document.createElement('div'); + logEntry.className = `log-entry log-${type}`; + // 如果是第一条日志,显示时间戳 + const prefix = index === 0 ? timestamp : ' '.repeat(timestamp.length); + logEntry.textContent = `${prefix}${line}`; + // logEntry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`; + // logEntry.style 保留起始的空格 + logEntry.style.whiteSpace = 'pre'; + if (type === 'error') { + logEntry.style.color = 'red'; + } else if (type === 'debug') { + logEntry.style.color = 'gray'; + return; + } else if (type === 'warning') { + logEntry.style.color = 'orange'; + } else if (type === 'success') { + logEntry.style.color = 'green'; + } else { + logEntry.style.color = 'black'; + } + logContainer.appendChild(logEntry); + }); + logContainer.scrollTop = logContainer.scrollHeight; } @@ -1153,7 +1167,9 @@ await sendHelloMessage(); connectButton.textContent = '断开'; - connectButton.onclick = disconnectFromServer; + connectButton.removeEventListener('click', connectToServer); + connectButton.addEventListener('click', disconnectFromServer); + // connectButton.onclick = disconnectFromServer; messageInput.disabled = false; sendTextButton.disabled = false; @@ -1169,7 +1185,9 @@ connectionStatus.style.color = 'red'; connectButton.textContent = '连接'; - connectButton.onclick = connectToServer; + connectButton.removeEventListener('click', disconnectFromServer); + connectButton.addEventListener('click', connectToServer); + // connectButton.onclick = connectToServer; messageInput.disabled = true; sendTextButton.disabled = true; recordButton.disabled = true; @@ -1189,7 +1207,7 @@ const message = JSON.parse(event.data); if (message.type === 'hello') { - log(`服务器回应:${message.message}`, 'info'); + log(`服务器回应:${JSON.stringify(message, null, 2)}`, 'success'); } else if (message.type === 'tts') { // TTS状态消息 if (message.state === 'start') { From 466a0245a9109677566bd76091c8b5e47b196f93 Mon Sep 17 00:00:00 2001 From: funshine Date: Tue, 15 Apr 2025 15:28:02 +0800 Subject: [PATCH 2/3] add default value for siliconflow tts speed --- main/xiaozhi-server/core/providers/tts/siliconflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/xiaozhi-server/core/providers/tts/siliconflow.py b/main/xiaozhi-server/core/providers/tts/siliconflow.py index be6b9e2a..b2f564cc 100644 --- a/main/xiaozhi-server/core/providers/tts/siliconflow.py +++ b/main/xiaozhi-server/core/providers/tts/siliconflow.py @@ -16,7 +16,7 @@ class TTSProvider(TTSProviderBase): self.voice = config.get("voice") self.response_format = config.get("response_format") self.sample_rate = config.get("sample_rate") - self.speed = float(config.get("speed")) + self.speed = float(config.get("speed", 1.0)) self.gain = config.get("gain") self.host = "api.siliconflow.cn" From ee83cea11c082232d7edaacde9176062f02b1f44 Mon Sep 17 00:00:00 2001 From: funshine Date: Tue, 15 Apr 2025 15:51:36 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3CosyVoiceSiliconflow?= =?UTF-8?q?=E9=9F=B3=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/db/changelog/202504151547.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 main/manager-api/src/main/resources/db/changelog/202504151547.sql diff --git a/main/manager-api/src/main/resources/db/changelog/202504151547.sql b/main/manager-api/src/main/resources/db/changelog/202504151547.sql new file mode 100644 index 00000000..e48a077c --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/202504151547.sql @@ -0,0 +1,4 @@ +-- 修正CosyVoiceSiliconflow音色 +delete from `ai_tts_voice` where tts_model_id = 'TTS_CosyVoiceSiliconflow'; +INSERT INTO `ai_tts_voice` VALUES ('TTS_CosyVoiceSiliconflow0001', 'TTS_CosyVoiceSiliconflow', 'CosyVoice男声', 'FunAudioLLM/CosyVoice2-0.5B:alex', '中文', 'https://example.com/cosyvoice/alex.mp3', NULL, 6, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_CosyVoiceSiliconflow0002', 'TTS_CosyVoiceSiliconflow', 'CosyVoice女声', 'FunAudioLLM/CosyVoice2-0.5B:bella', '中文', 'https://example.com/cosyvoice/bella.mp3', NULL, 6, NULL, NULL, NULL, NULL); \ No newline at end of file