@minto-ai/xunfei-tts
是一款强大的讯飞TTS
文本转语音库,它能够高效、精准地将文本内容转换为语音输出,为开发者提供便捷、灵活的语音合成解决方案。
特点
- 灵活参数配置:支持对语速、音量、音高等关键参数进行灵活调整,满足多样化的语音合成需求。
- 简化配置流程:既可以使用默认参数快速启动,也能通过部分参数覆盖的方式,根据具体场景定制配置,极大简化了配置流程。
- 实时语音转换 :借助
WebSocket
通信技术,实现文本到语音的实时转换,让语音输出与文本输入几乎同步,提升用户体验。 - 非阻塞处理:支持Web Worker技术,能够在后台进行音频数据的转换处理,不会阻塞主线程,确保应用的流畅运行。
安装
使用 pnpm
进行安装,只需在终端中运行以下命令:
bash
pnpm install @minto-ai/xunfei-tts
使用方法
引入库
在项目中引入 @minto-ai/xunfei-tts
库,示例代码如下:
javascript
import xunfeiTts from '@minto-ai/xunfei-tts'
配置系统参数
在使用之前,需要配置必要的系统参数,这些参数可在讯飞开放平台申请获取。以下是配置示例:
javascript
/**
* 平台系统配置
*/
const systemConfig = {
// 在平台申请的密钥信息
API_SECRET: 'your_api_secret',
// 在平台申请的APPID信息
APPID: 'your_appid',
// 在平台申请的API_KEY信息
API_KEY: 'your_api_key'
}
// 配置系统参数
xunfeiTts.config(systemConfig)
创建实例
您可以选择使用默认的 ttsOptions
,或者提供部分参数来覆盖默认设置。详细配置可参考讯飞TTS文档。
javascript
/**
* 业务参数
*/
const ttsOptions = {
aue: 'raw',
sfl: 1,
auf: 'audio/L16;rate=16000',
speed: 50,
vcn: 'xiaoyan',
volume: 50,
pitch: 55,
bgs: 0,
tte: 'UTF8',
reg: '2',
rdn: '0'
}
// 创建mtTts实例
const ttsInstance = xunfeiTts.create(ttsOptions)
可用方法
发送文本并播放
使用 send
方法将待转换的文本发送给语音合成系统并播放语音。
javascript
ttsInstance.send('你好呀。', {
isLastBatch: true
})
参数说明
text (string)
:需要转换为语音的文本内容。options (Partial<SendOptions>)
:发送文本时的配置选项。isLastBatch (boolean)
:指定当前文本是否为最后一批数据。
终止应用执行
使用 finish
方法终止TTS
转换和语音播放操作。
javascript
ttsInstance.finish()
应用钩子
应用钩子事件允许您在特定时刻执行自定义逻辑,增强应用的灵活性和可扩展性。
appCreate
当应用和所有的处理器被创建初始化时触发该事件。
javascript
ttsInstance.on('appCreate', () => {
console.log('应用和处理器已创建初始化')
})
appActive
当应用被激活时触发该事件。
javascript
ttsInstance.on('appActive', () => {
console.log('应用已激活')
})
appStart
当第一个处理器进入运行状态,即有一条源数据进入第一个处理器时触发该事件。
javascript
ttsInstance.on('appStart', () => {
console.log('第一个处理器进入运行状态')
})
audioFirstStart
当音频首次播放时触发该事件。
javascript
ttsInstance.on('audioFirstStart', () => {
console.log('音频首次播放')
})
appFinish
当应用被停止时触发该事件。
javascript
ttsInstance.on('appFinish', () => {
console.log('应用已停止')
})
例子
javascript
import xunfeiTts from '@minto-ai/xunfei-tts'
xunfeiTts.config({
APPID: '****',
API_SECRET: '****',
API_KEY: '****',
})
const ttsInstance = xunfeiTts.create({
aue: 'raw',
sfl: 1,
auf: 'audio/L16;rate=16000',
vcn: 'x4_lingxiaoying_em_v2',
speed: 60,
volume: 50,
pitch: 55,
bgs: 0,
tte: 'UTF8',
reg: '2',
rdn: '0',
})
ttsInstance
.on('appActive', () => {
console.log('appActive')
})
.on('appFinish', () => {
console.log('appFinish')
})
.on('appStart', () => {
console.log('appStart')
})
.on('audioFirstStart', () => {
console.log('audioFirstStart')
})
const zzButton = document.createElement('button')
zzButton.textContent = '终止'
const jxButton = document.createElement('button')
jxButton.textContent = '继续'
jxButton.onclick = () => {
ttsInstance.finish()
}
jxButton.onclick = () => {
const arrText = [
`你要抱`,
`抱我吗?`,
`我好`,
`喜欢你呀!`,
]
arrText.forEach((item, index) => {
setTimeout(() => {
ttsInstance.send(item, {
isLastBatch: index === arrText.length - 1,
})
}, index * 100)
})
}
document.body.appendChild(jxButton)
document.body.appendChild(zzButton)