《npm包》 讯飞TTS文本转语音

@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)
相关推荐
DataFunTalk4 分钟前
开源一个MCP+数据库新玩法,网友直呼Text 2 SQL“有救了!”
前端·后端·算法
cg50178 分钟前
Spring Boot 使用 SMB 协议
java·前端·spring boot·smb
谁还不是一个打工人29 分钟前
vue2实现在屏幕中有一个小机器人可以随意移动
前端·javascript
LTPP32 分钟前
掌握Rust Web开发的未来:Hyperlane框架全方位教程 🎓🔧
前端·后端·github
前端九哥34 分钟前
🌟Vue 3 全局注册组件全攻略(三种常用方式讲透透!)!🌟
前端·vue.js
Dragon Wu39 分钟前
前端 React 弹窗式 滑动验证码实现
前端·javascript·react.js·typescript·前端框架·reactjs
翠莲40 分钟前
vue中使用swiper坑记录
前端·javascript·vue.js
竣子好逑44 分钟前
uniapp 自定义tabbar
前端·uni-app
前端九哥1 小时前
🎯Vue 3 少量全局数据共享的最佳实践(无需 Vuex/Pinia)
前端·vue.js
Struggler2811 小时前
前端如何选取分包策略
前端