UNPKG

@minto-ai/xunfei-tts

Version:

借助“讯飞在线语音合成API”实现浏览器端“文本转语音

183 lines (133 loc) 3.31 kB
# 安装 使用 `pnpm` 进行安装 ```bash pnpm install @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) ``` ## 创建应用实例 详细配置可参考[讯飞TTS文档](https://www.xfyun.cn/doc/tts/online_tts/API.html#%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E6%B5%81%E7%A8%8B) ```javascript /** * 业务参数 */ const ttsOptions = { // 音色 vcn: 'xiaoyan', } // 创建mtTts应用实例 const ttsInstance = xunfeiTts.create(ttsOptions) ``` ## 可用方法 ### 激活应用 可以发送文本进行语音播放 ```javascript ttsInstance.start() ``` ### 发送文本 ```javascript ttsInstance.send('你好呀。') ``` ### 结束应用 通知应用发送文本已经结束,但是不会销毁应用,剩余的文本将会继续播放。 ```javascript ttsInstance.end() ``` ### 销毁应用 应用播放结束,应用将会被销毁。剩余的文本将会停止播放。 ```javascript ttsInstance.finish() ``` #### 调整音量 ```javascript // 静音 ttsInstance.setVolume(0) // 恢复音量 ttsInstance.setVolume(1) ``` ## 应用钩子 ### `audioFirstStart` ```javascript ttsInstance.on('audioFirstStart', () => { console.log('音频首次播放') }) ``` ### `appFinish` ```javascript ttsInstance.on('appFinish', () => { console.log('应用已销毁') }) ``` # 示例代码 ```javascript import xunfeiTts from '@minto-ai/xunfei-tts/src/index' xunfeiTts.config({ APPID: '****', API_SECRET: '****', API_KEY: '****', }) const ttsInstance = xunfeiTts.create() ttsInstance .on('appFinish', () => { console.log('appFinish') }) .on('audioFirstStart', () => { console.log('audioFirstStart') }) const zzButton = document.createElement('button') zzButton.textContent = '终止' const jxButton = document.createElement('button') jxButton.textContent = '继续' let timer = null zzButton.onclick = () => { ttsInstance.finish() clearTimeout(timer) } jxButton.onclick = () => { clearTimeout(timer) const arrText = [ `你要抱`, `抱我吗?`, `我好`, `喜欢你呀!`, ] ttsInstance.start() let index = 0 timer = setInterval(() => { ttsInstance.send(arrText[index]) index += 1 if (index === arrText.length) { ttsInstance.end() clearInterval(timer) } }, 500) } document.body.appendChild(jxButton) document.body.appendChild(zzButton) ``` # 开发思路 ## 串行处理器 ![](https://img-1304256198.cos.ap-chengdu.myqcloud.com/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20(16).jpg) ## 串行处理器 ![](https://img-1304256198.cos.ap-chengdu.myqcloud.com/image/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%20(17).jpg)