fix: 语音云转码完善file和url模式。

This commit is contained in:
ikechan8370 2023-04-22 18:07:46 +08:00
parent 49d8dce984
commit 7ae248e5c4
3 changed files with 43 additions and 22 deletions

View file

@ -29,7 +29,7 @@ import { convertFaces } from '../utils/face.js'
import uploadRecord from '../utils/uploadRecord.js'
import { SlackClaudeClient } from '../utils/slack/slackClient.js'
import { ChatgptManagement } from './management.js'
import {getPromptByName} from "../utils/prompts.js";
import { getPromptByName } from '../utils/prompts.js'
try {
await import('keyv')
} catch (err) {
@ -620,7 +620,7 @@ export class chatgpt extends plugin {
logger.info('chatgpt闭嘴中不予理会')
return false
}
//获取用户配置
// 获取用户配置
const userData = await getUserData(e.user_id)
const use = (userData.mode === 'default' ? null : userData.mode) || await redis.get('CHATGPT:USE') || 'api'
// 自动化插件本月已发送xx条消息更新太快由于延迟和缓存问题导致不同客户端不一样at文本和获取的card不一致。因此单独处理一下
@ -918,19 +918,20 @@ export class chatgpt extends plugin {
if (Config.ttsSpace && ttsResponse.length <= Config.ttsAutoFallbackThreshold) {
try {
let wav = await generateAudio(ttsResponse, speaker, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)')
try {
let sendable = await uploadRecord(wav)
if (sendable) {
await e.reply(sendable)
} else {
//如果合成失败尝试使用ffmpeg合成
await e.reply(segment.record(wav))
}
} catch (err) {
logger.error(err)
try {
let sendable = await uploadRecord(wav)
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 this.reply('合成语音发生错误~')
}
} else if (!Config.ttsSpace) {

View file

@ -102,7 +102,7 @@ const defaultConfig = {
slackClaudeEnableGlobalPreset: true,
slackClaudeGlobalPreset: '',
slackClaudeSpecifiedChannel: '',
cloudTranscode: '',
cloudTranscode: 'https://silk.201666.xyz',
cloudMode: 'url',
version: 'v2.5.6'
}

View file

@ -1,6 +1,6 @@
// import Contactable, { core } from 'oicq'
import querystring from 'querystring'
import fetch from 'node-fetch'
import fetch, { File } from 'node-fetch'
import fs from 'fs'
import os from 'os'
import util from 'util'
@ -41,17 +41,25 @@ async function uploadRecord (recordUrl) {
method: 'GET',
headers: {
'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 12; MI 9 Build/SKQ1.211230.001)'
},
}
})
if (Config.cloudMode === 'file') {
const file = await response.blob()
const blob = await response.blob()
const arrayBuffer = await blob.arrayBuffer()
const buffer = Buffer.from(arrayBuffer)
const formData = new FormData()
formData.append('file', file)
formData.append('file', new File([buffer], 'audio.wav'))
const resultres = await fetch(`${Config.cloudTranscode}/audio`, {
method: 'POST',
body: formData
})
result = await resultres.json()
let t = await resultres.text()
try {
result = JSON.parse(t)
} catch (e) {
logger.error(t)
throw e
}
} else {
const buf = Buffer.from(await response.arrayBuffer())
const resultres = await fetch(`${Config.cloudTranscode}/audio`, {
@ -59,9 +67,15 @@ async function uploadRecord (recordUrl) {
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({recordBuffer: buf})
body: JSON.stringify({ recordBuffer: buf })
})
result = await resultres.json()
let t = await resultres.text()
try {
result = JSON.parse(t)
} catch (e) {
logger.error(t)
throw e
}
}
} else {
const resultres = await fetch(`${Config.cloudTranscode}/audio`, {
@ -69,9 +83,15 @@ async function uploadRecord (recordUrl) {
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({recordUrl: recordUrl})
body: JSON.stringify({ recordUrl })
})
result = await resultres.json()
let t = await resultres.text()
try {
result = JSON.parse(t)
} catch (e) {
logger.error(t)
throw e
}
}
if (result.error) {
logger.error('云转码API报错' + result.error)