Skip to content

Commit

Permalink
feat(qq): support ntsilk service (#317)
Browse files Browse the repository at this point in the history
  • Loading branch information
ilharp authored Sep 17, 2024
1 parent 6995364 commit c4621a6
Showing 1 changed file with 26 additions and 17 deletions.
43 changes: 26 additions & 17 deletions adapters/qq/src/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -409,27 +409,36 @@ export class QQMessageEncoder<C extends Context = Context> extends MessageEncode
})
this.attachedFile = onlineFile
} else {
const silk = this.bot.ctx.get('silk')
if (!silk) return this.bot.logger.warn('missing silk service, cannot send non-silk audio')
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000]
if (silk.isWav(data) && allowSampleRate.includes(silk.getWavFileInfo(data).fmt.sampleRate)) {
const result = await silk.encode(data, 0)
const ntsilk = this.bot.ctx.get('ntsilk')
if (ntsilk) {
const result = await ntsilk.encode(data)
const onlineFile = await this.sendFile(type, {
src: `data:audio/amr;base64,` + Buffer.from(result.data).toString('base64'),
src: `data:audio/amr;base64,` + result.output.toString('base64'),
})
if (onlineFile) this.attachedFile = onlineFile
} else {
if (!this.bot.ctx.get('ffmpeg')) return this.bot.logger.warn('missing ffmpeg service, cannot send non-silk audio except some wav')
const pcmBuf = await this.bot.ctx.get('ffmpeg')
.builder()
.input(Buffer.from(data))
.outputOption('-ar', '24000', '-ac', '1', '-f', 's16le')
.run('buffer')
const result = await silk.encode(pcmBuf, 24000)
const onlineFile = await this.sendFile(type, {
src: `data:audio/amr;base64,` + Buffer.from(result.data).toString('base64'),
})
if (onlineFile) this.attachedFile = onlineFile
const silk = this.bot.ctx.get('silk')
if (!silk) return this.bot.logger.warn('missing ntsilk/silk service, cannot send non-silk audio')
const allowSampleRate = [8000, 12000, 16000, 24000, 32000, 44100, 48000]
if (silk.isWav(data) && allowSampleRate.includes(silk.getWavFileInfo(data).fmt.sampleRate)) {
const result = await silk.encode(data, 0)
const onlineFile = await this.sendFile(type, {
src: `data:audio/amr;base64,` + Buffer.from(result.data).toString('base64'),
})
if (onlineFile) this.attachedFile = onlineFile
} else {
if (!this.bot.ctx.get('ffmpeg')) return this.bot.logger.warn('missing ffmpeg service, cannot send non-silk audio except some wav')
const pcmBuf = await this.bot.ctx.get('ffmpeg')
.builder()
.input(Buffer.from(data))
.outputOption('-ar', '24000', '-ac', '1', '-f', 's16le')
.run('buffer')
const result = await silk.encode(pcmBuf, 24000)
const onlineFile = await this.sendFile(type, {
src: `data:audio/amr;base64,` + Buffer.from(result.data).toString('base64'),
})
if (onlineFile) this.attachedFile = onlineFile
}
}
}
await this.flush()
Expand Down

0 comments on commit c4621a6

Please sign in to comment.