《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)
相关推荐
LuckyLay42 分钟前
React百日学习计划——Deepseek版
前端·学习·react.js
gxn_mmf1 小时前
典籍知识问答重新生成和消息修改Bug修改
前端·bug
hj10431 小时前
【fastadmin开发实战】在前端页面中使用bootstraptable以及表格中实现文件上传
前端
乌夷1 小时前
axios结合AbortController取消文件上传
开发语言·前端·javascript
晓晓莺歌1 小时前
图片的require问题
前端
码农黛兮_462 小时前
CSS3 基础知识、原理及与CSS的区别
前端·css·css3
水银嘻嘻2 小时前
web 自动化之 Unittest 四大组件
运维·前端·自动化
(((φ(◎ロ◎;)φ)))牵丝戏安2 小时前
根据输入的数据渲染柱形图
前端·css·css3·js
wuyijysx2 小时前
JavaScript grammar
前端·javascript
溪饱鱼3 小时前
第6章: SEO与交互指标
服务器·前端·microsoft