feat: add synthesis for api3

This commit is contained in:
ikechan8370 2024-05-15 17:24:50 +08:00
parent b76d33d938
commit 1f80758491
2 changed files with 39 additions and 0 deletions

View file

@ -434,6 +434,14 @@ class Core {
await redis.set(`CHATGPT:CONVERSATION_CREATER_ID:${sendMessageResult.conversationId}`, e.sender.user_id)
await redis.set(`CHATGPT:CONVERSATION_CREATER_NICK_NAME:${sendMessageResult.conversationId}`, e.sender.card)
}
(async () => {
let audio = await this.chatGPTApi.synthesis(sendMessageResult)
if (audio) {
await e.reply(segment.record(audio))
}
})().catch(err => {
logger.warn('发送语音失败', err)
})
return sendMessageResult
} else if (use === 'chatglm') {
const cacheOptions = {

View file

@ -164,4 +164,35 @@ export class OfficialChatGPTClient {
return await this.sendMessage(prompt, opts, retry - 1)
}
}
voices = ['ember', 'cove',
'juniper', 'sky', 'breeze'
// '__internal_only_shimmer',
// '__internal_only_santa'
]
async synthesis (opts = {}) {
const { messageId, conversationId } = opts
let url = this._apiReverseUrl.replace('/conversation', '/synthesize')
let randomVoice = this.voices[Math.floor(Math.random() * this.voices.length)]
url = `${url}?message_id=${messageId}&conversation_id=${conversationId}?voice=${randomVoice}`
let res = await fetch(url, {
method: 'GET',
headers: {
accept: 'audio/mpeg',
'x-openai-assistant-app-id': '',
authorization: this._accessToken ? `Bearer ${this._accessToken}` : '',
referer: 'https://chat.openai.com/chat',
library: 'chatgpt-plugin'
}
})
if (res.status !== 200) {
throw new Error(await res.text())
}
if (res.headers.get('content-type') !== 'audio/mpeg') {
throw new Error('invalid content type')
}
let buffer = await res.arrayBuffer()
return Buffer.from(buffer)
}
}