From 05732f87f21ac3742d54efb557db603647834d45 Mon Sep 17 00:00:00 2001 From: ifeif <36729028+ifeif@users.noreply.github.com> Date: Tue, 16 May 2023 14:15:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=AF=AD=E9=9F=B3?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E8=BD=AC=E6=96=87=E6=9C=AC=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chat.js | 106 ++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 52 deletions(-) diff --git a/apps/chat.js b/apps/chat.js index a59fb92..5473396 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -1156,69 +1156,71 @@ export class chatgpt extends plugin { this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`) } } - let wav - if (Config.ttsMode === 'vits-uma-genshin-honkai' && Config.ttsSpace && ttsResponse.length <= Config.ttsAutoFallbackThreshold) { - if (Config.autoJapanese && (_.isEmpty(Config.baiduTranslateAppId) || _.isEmpty(Config.baiduTranslateSecret))) { - await this.reply('请检查翻译配置是否正确。') - return false - } - if (Config.autoJapanese) { + if(ttsResponse.length <= Config.ttsAutoFallbackThreshold) { + let wav + if (Config.ttsMode === 'vits-uma-genshin-honkai' && Config.ttsSpace) { + if (Config.autoJapanese && (_.isEmpty(Config.baiduTranslateAppId) || _.isEmpty(Config.baiduTranslateSecret))) { + await this.reply('请检查翻译配置是否正确。') + return false + } + if (Config.autoJapanese) { + try { + const translate = new Translate({ + appid: Config.baiduTranslateAppId, + secret: Config.baiduTranslateSecret + }) + ttsResponse = await translate(ttsResponse, '日') + } catch (err) { + logger.error(err) + await this.reply(err.message + '\n将使用原始文本合成语音...') + } + } try { - const translate = new Translate({ - appid: Config.baiduTranslateAppId, - secret: Config.baiduTranslateSecret - }) - ttsResponse = await translate(ttsResponse, '日') + wav = await generateAudio(ttsResponse, speaker, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)') } catch (err) { logger.error(err) - await this.reply(err.message + '\n将使用原始文本合成语音...') + await this.reply('合成语音发生错误~') } + } else if (Config.ttsMode === 'azure' && Config.azureTTSKey) { + let ssml = AzureTTS.generateSsml(ttsResponse, { + speaker, + emotion, + emotionDegree + }) + wav = await AzureTTS.generateAudio(ttsResponse, { + speaker + }, await ssml) + } else if (Config.ttsMode === 'voicevox' && Config.voicevoxSpace) { + wav = await VoiceVoxTTS.generateAudio(ttsResponse, { + speaker + }) + } else { + await this.reply('你没有配置转语音API哦') } try { - wav = await generateAudio(ttsResponse, speaker, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)') - } catch (err) { - logger.error(err) - await this.reply('合成语音发生错误~') - } - } else if (Config.ttsMode === 'azure' && Config.azureTTSKey) { - let ssml = AzureTTS.generateSsml(ttsResponse, { - speaker, - emotion, - emotionDegree - }) - wav = await AzureTTS.generateAudio(ttsResponse, { - speaker - }, await ssml) - } else if (Config.ttsMode === 'voicevox' && Config.voicevoxSpace) { - wav = await VoiceVoxTTS.generateAudio(ttsResponse, { - speaker - }) - } else if (!Config.ttsSpace && !Config.azureTTSKey && !Config.voicevoxSpace) { - await this.reply('你没有配置转语音API哦') - } - try { - try { - let sendable = await uploadRecord(wav, Config.ttsMode) - if (sendable) { - await e.reply(sendable) - } else { - // 如果合成失败,尝试使用ffmpeg合成 + try { + let sendable = await uploadRecord(wav, Config.ttsMode) + if (sendable) { + await e.reply(sendable) + } else { + // 如果合成失败,尝试使用ffmpeg合成 + await e.reply(segment.record(wav)) + } + } catch (err) { + logger.error(err) await e.reply(segment.record(wav)) } } catch (err) { logger.error(err) - await e.reply(segment.record(wav)) + await this.reply('合成语音发生错误~') } - } catch (err) { - logger.error(err) - await this.reply('合成语音发生错误~') - } - if (Config.ttsMode === 'azure' && Config.azureTTSKey) { - // 清理文件 - try { - fs.unlinkSync(wav) - } catch (err) { - logger.warn(err) + if (Config.ttsMode === 'azure' && Config.azureTTSKey) { + // 清理文件 + try { + fs.unlinkSync(wav) + } catch (err) { + logger.warn(err) + } } } } else if (userSetting.usePicture || (Config.autoUsePicture && response.length > Config.autoUsePictureThreshold)) {