引言

在项目中,我们需要实现文本转语音(TTS)功能,为了满足对响应速度的要求,我们选用了科大讯飞提供的API服务,并将生成的音频文件存储到Cloudflare R2对象存储中。
 
为什么选择科大讯飞TTS API
科大讯飞作为国内领先的语音技术提供商,其TTS服务具有以下优势:
  • 提供10500次免费请求,完全满足项目实训需求
  • 支持多种声音选择(虽然免费版声音比较"AI感")
  • 提供稳定可靠的Websocket接口
  • 文档详细,接入方便
 

实现步骤

申请API并配置认证信息

首先需要在科大讯飞开放平台完成实名认证并开通服务,获取以下关键信息:
  • App ID
  • API Key
  • API Secret
将这些信息配置在application.yml中:

实现TTS服务核心代码

TtsController类
TtsService类
核心服务类TtsService主要完成以下功能:
  • 构建鉴权URL:通过API Key和Secret生成带有鉴权信息的请求URL
  • 建立Websocket连接:使用OkHttpClient建立与讯飞服务的连接
  • 发送请求数据:构造包含文本和配置参数的JSON请求
  • 处理响应:接收音频数据并保存
部分代码参考了官方提供的java版本demo,但根据项目做出了修改
  1. 首先先将配置参数注入:
通过Spring的@Value注解从配置文件注入科大讯飞API所需的认证参数和默认配置。
  1. 核心处理方法
这是TTS转换的入口方法,主要完成:文件名生成、鉴权URL构建和WebSocket连接准备。
  1. WebSocket连接处理(核心交互逻辑)
这部分实现了与讯飞API的核心交互:
  • onOpen:连接建立后发送TTS请求参数
  • onMessage:接收并处理音频数据片段
  • 音频接收完成后上传到R2存储
 
  1. 鉴权URL生成方法
这部分是官方demo提供的
  1. ByteArrayMultipartFile 实现
 

测试

使用apifox测试接口,返回符合预期
notion image
 

总结

通过科大讯飞TTS API和Cloudflare R2对象存储,我们实现了完整的文本转语音服务流程。
讯飞免费版的声音确实比较"AI感",缺乏真人感,而有真人感的贵到离谱,小小项目实训不值得啊不值得啊,准备去寻找其他模型了…如果不行,再到时候免费考虑试用付费声音吧…
notion image
 
Loading...
Rainnn
Rainnn
bling bling ⭐
Latest posts
操作系统笔记
2025-6-28
课程学习及考试经验分享 (大二)
2025-6-28
在Docker中使用redis
2025-6-28
数值计算
2025-6-28
MongoDB 新版本安装
2025-6-28
自定义注解@CustomParam
2025-6-28
Announcement
wakuwaku!
你竟然发现了这里!!
创作不易,获取加🔒文章密码/试读文章,请微信关注公众号 Code & Cookies
notion image