效果图
什么是 STT 和 TTS?
为什么要使用 SST + TTS 如果用户直接输入音频, 的 API 中并没有直接使用语音和 GPT 进行对话的功能。
所需依赖实现语音转文字(STT)
前面说到了, 中不存在这种 API,但是提供了一个 机器人,支持将音频流转化为文本,也就是 STT。
实现如下返回的 text 就是识别的语音内容
const {
data: { text: prompt },
} = await openai.createTranscription(
fs.createReadStream(fileName),
"whisper-1"
);
实现文字转语音(TTS)
目前只提供了 STT,如果需要返回给用户一个音频的话。就需要用到国内的 科大讯飞 每天有 5.05w 次免费的 TTS。
如果你有国外信用卡,可以考虑使用微软推出 Azure,很多电报机器人就是用的它来开发的,免费使用 12个月。
所以在这里还是使用科大讯飞的 TTS
文字生成音频文件
音频没有直接返回流,而是直接生成一个音频返回文件路径给前端播放。
回复音频存放在 chat-audio//audio 中
先在 讯飞TTS 中获取需要的 keys
const tts = promisify(require("./utils/tts"));
// 环境变量
require("dotenv").config();
// 生成音频
const generateAudio = (text) => {
return new Promise((resolve, reject) => {
const auth = {
app_id: process.env.TTS_APP_ID,
app_skey: process.env.TTS_API_SECRET,
app_akey: process.env.TTS_API_KEY
};
// 讯飞 api 参数配置
const business = {
aue: "lame",
sfl: 1,
speed: 50,
pitch: 50,
volume: 100,
bgs: 0,
};
const id = new Date().getTime()
// 存储文件的路径
const file = path.resolve(__dirname, `client/audio/${id}.m4a`);
try {
// 执行请求
tts(auth, business, text, file).then((res) => {
// 返回静态文件地址
resolve(`audio/${id}.m4a`)
});
} catch (e) {
reject(e)
}
})
};
封装好的讯飞的语音包 TTS,放在 仓库 里面。这里就不展示出来了
调用 STT & TTS音频对话接口
通过 api/audio,让客户端调用此方法
app.use(fileUpload());
app.post("api/audio", async (req, res) => {
// 没有上传音频抛出异常
if (!req.files) return res.status(400).send({ message: "缺少参数", error: true });
const file = req.files.file;
// 存放用户上传的文件
const fileName = "audio.m4a";
file.mv(fileName, async (err) => {
if (err) {
return res.status(500).send(err);
}
// 使用ChatGPT 的 STT 机器人(Whisper)
const {
data: { text: prompt },
} = await openai.createTranscription(
fs.createReadStream(fileName),
"whisper-1"
);
console.log("解析的音频内容是>>>", prompt);
// 判断用户上传音频是否存在内容
if (!prompt.trim().length)
return res.send({ message: "未识别到语音内容", error: true });
// 将转用户提问的文本内容,去调用 ChatGPT 的回复
const chatReply = await handleIssueReply(prompt);
// 将 ChatGPT 的回复通过 TTS 转化为语音
const content = await generateAudio(chatReply);
console.log("生成的音频是>>>", content);
res.send([
{ type: "system", content, chatReply, infoType: "audio", playStatus: false },
]);
});
});
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...