《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)
相关推荐
yinuo1 天前
前端跨页面通讯终极指南⑥:SharedWorker 用法全解析
前端
PineappleCoder1 天前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪1 天前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯1 天前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08951 天前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视1 天前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan1 天前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
JIngJaneIL1 天前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
hashiqimiya1 天前
两个步骤,打包war,tomcat使用war包
java·服务器·前端
零度@1 天前
Java中Map的多种用法
java·前端·python