《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)
相关推荐
一 乐9 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕9 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫9 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo10 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo11 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq11 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴11 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq12 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
anyup13 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
BBBBBAAAAAi13 小时前
Claude Code安装记录
开发语言·前端·javascript