Cool-Admin-Node
后台管理系统开发、Api接口开发
Cool-Admin-Node
后台管理系统开发、Api接口开发
Cool-Admin-Java
后台管理系统开发、Api接口开发
Cool-Admin-Vue
后台管理系统开发前端
Cool Uni
移动端基于 uni-app 的跨端开发框架
Cool Team(即将推出)
Ai多智能体团队协作完成任务
技术指导
提供专业的技术指导服务
定制开发
外包,承接各类软件开发
低价云服务器
特价、低价的云服务器
发布帖子
寻求帮助或分享知识
发布插件
分享您的插件
Cool-Admin-Node
Cool-Admin-Java
Cool-Admin-Vue
Cool Uni
Cool Team(即将推出)
技术指导
定制开发
低价云服务器
发布帖子
发布插件
豆包大模型实时语音合成
这是一个语音合成插件,基于字节跳动火山引擎的语音合成服务,支持一次性合成和流式合成两种模式。
本插件提供了三种语音合成方式:
调用插件的时候需要用到标识,标识是唯一的,不能重复,建议使用英文。对应插件 plugin.json
中的 key
字段
{
"appid": "your_app_id",
"token": "your_token",
"cluster": "volcano_tts"
}
下面是插件提供的一些方法:
一次性合成(HTTP方式)
/**
* 一次性合成
* @param req 请求参数
*/
async once(req: {
text: string; // 要合成的文本
voiceType: string; // 发音人,[列表](https://www.volcengine.com/docs/6561/1257544)
encoding?: "pcm" | "ogg_opus" | "mp3" | "wav"; // 音频编码格式
speedRatio?: number; // 语速,默认1.0
volumeRatio?: number; // 音量,默认1.0
pitchRatio?: number; // 音调,默认1.0
textType?: string; // 文本类型
uid?: string; // 用户ID
})
一次性合成(WebSocket方式),支持实时音频块回调
/**
* 一次性合成,流式返回
* @param req 请求参数
* @param onData 音频数据回调
*/
async onceStream(
req: {
text: string; // 要合成的文本
voiceType: string; // 发音人,[列表](https://www.volcengine.com/docs/6561/1257544)
encoding?: "pcm" | "ogg_opus" | "mp3"; // 音频编码格式
speedRatio?: number; // 语速,默认1.0
volumeRatio?: number; // 音量,默认1.0
pitchRatio?: number; // 音调,默认1.0
textType?: string; // 文本类型
uid?: string; // 用户ID
},
onData?: (data: Buffer, isFinal: boolean) => void // 音频数据回调
)
双向流式合成,支持实时输入文本并获取合成音频
/**
* 双向流式合成
* @param req 请求参数
* @param onData 音频数据回调
* @param onEnd 合成结束回调
*/
async stream(
req: {
voiceType: string; // 发音人,[列表](https://www.volcengine.com/docs/6561/1257544)
encoding?: "pcm" | "ogg_opus" | "mp3"; // 音频编码格式
uid?: string; // 用户ID
audioParams?: {
format?: "mp3" | "ogg_opus" | "pcm"; // 音频编码格式
sample_rate?: 8000 | 16000 | 22050 | 24000 | 32000 | 44100 | 48000; // 采样率
speech_rate?: number; // 语速,取值范围[-50,100],100代表2.0倍速,-50代表0.5倍数
pitch_rate?: number; // 音调,取值范围[-12,12],12代表高音,-12代表低音
enable_timestamp?: boolean; // 是否开启时间戳
}
},
onData?: (data: Buffer) => void, // 音频数据回调
onEnd?: (data: Buffer) => void // 合成结束回调
)
@Inject()
pluginService: PluginService;
// 获取插件实例
const instance = await this.pluginService.getInstance('tts');
// 一次性合成(HTTP)
const audioBuffer = await instance.once({
text: '你好,世界!',
voiceType: 'zh_female_wanwanxiaohe_moon_bigtts',
encoding: 'mp3'
});
fs.writeFileSync('test.mp3', audioBuffer);
// 一次性合成(WebSocket)
const audioBuffer = await instance.onceStream({
text: '你好,世界!',
voiceType: 'zh_female_wanwanxiaohe_moon_bigtts',
encoding: 'mp3'
}, (chunk, isFinal) => {
console.log(`收到音频块:${chunk.length}字节`, isFinal);
});
fs.writeFileSync('test.mp3', audioBuffer);
// 双向流式合成
const client = await instance.stream(
{
voiceType: "zh_female_wanwanxiaohe_moon_bigtts",
encoding: 'mp3',
audioParams: {
format: 'mp3',
sample_rate: 24000,
speech_rate: 0, // 正常语速
pitch_rate: 0 // 正常音调
}
},
(chunk) => {
// 可以在此处播放声音
console.log(`收到音频块:${chunk.length}字节`);
},
(chunk) => {
console.log('合成结束');
fs.writeFileSync('test.mp3', audioBuffer);
}
);
// 这边可以一边输入一边合成,场景:大模型输出文本,边输出边播放
await client.sendText('第一句话');
await client.sendText('第二句话');
// 结束合成
client.end();