当前位置: 首页 > news >正文

使用百度语音技术实现文字转语音

使用百度语音技术实现文字转语音

SpringBoot+Vue前后端分离项目

调用api接口需要使用AK和SK生成AccessToken,生成getAccessToken的接口有跨域限制,所以统一的由后端处理了

部分参数在控制台->语音技术->在线调试里面能找到

Controller

@RestController
@RequestMapping("/tts")
public class BaiDuTTSController {@PostMapping("/baidu/{infoId}")public ResponseEntity<byte[]> info2Audio(@PathVariable("infoId") String infoId, HttpServletResponse response){// todo 通过infoId查询待转换的文字,字数小于60和大于60时使用的方法不一样,这里还没优化String text = "你好百度";byte[] audioBytes = new byte[0];try {audioBytes = getAudioFromService(text);} catch (Exception e) {e.printStackTrace();}if (audioBytes != null) {return ResponseEntity.ok().contentType(MediaType.valueOf("audio/wav")) // 或者是audio/wav等,根据你的音频格式.body(audioBytes);} else {// 返回错误响应return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}}// 获取响应字节public  byte[] getAudioFromService( String text)throws Exception{String url = "https://tsn.baidu.com/text2audio";String requestBody = "tex=" + text + "&tok=" + getAccessToken() + "&cuid=这里要替换=5&pit=5&vol=5&per=1&aue=3";HttpResponse response = HttpRequest.post(url).contentType("application/x-www-form-urlencoded").body(requestBody).header("Accept", "*/*").execute();// 处理响应if (response.isOk()) {return response.bodyBytes();}throw new RuntimeException("获取音频错误,请联系管理员");}/*** 从用户的AK,SK生成鉴权签名(Access Token)** @return 鉴权签名(Access Token)* @throws IOException IO异常*/static String getAccessToken() throws IOException {String AK = "你的AK";String SK = "你的SK";String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + AK + "&client_secret=" + SK;String postResult = HttpUtil.post(url, "");if (StrUtil.isBlank(postResult)){throw new RuntimeException("响应体为空");}JSONObject jsonObject = JSONUtil.parseObj(postResult);String accessToken = jsonObject.getStr("access_token");if (StrUtil.isBlank(accessToken)){throw new RuntimeException("accessToken为空");}return accessToken;}}

VUE

// 音频展示   
<el-col :span="8"><audio :src="audioSrc" v-if="audioSrc" controls>您的浏览器不支持音频播放。</audio>
</el-col>
// methods// 语音播报的函数handleSpeak(id) {baiduTTS(id).then(res =>{console.log(res.headers)console.log(res)// 这里注意是res还是res.data,看你后台怎么封装的this.audioSrc   = URL.createObjectURL(new Blob([res],{type:"audio/wav"}));})},
// 发送请求的js
import request from '@/utils/request'export async function baiduTTS(id) {return request({url: '/tts/baidu/' + id,method: 'post',responseType: "blob"})
}

参考

前端使用百度 TTS(语音合成)非常详细 - 掘金 (juejin.cn)

image-20240304164623514

ChatGPT:

image-20240304170256340

问题

this.audioSrc   = URL.createObjectURL(new Blob([res],{type:"audio/wav"}));

这一行代码出错(准确的是URL.createObjectURL)

安装/升级下core-js解决(yarn add core-js)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue学习(一)初识Vue、事件
  • Spring Boot集成Spring Batch快速入门Demo
  • 秒懂LINUX之初识命令(下)
  • 基于torch-pruning库对resnet18在cifar100数据集上进行剪枝实验
  • 【数据分享】2013-2022年我国省市县三级的逐月SO2数据(excel\shp格式\免费获取)
  • 华为1000人校园实验记录
  • Kafka Producer之ACKS应答机制
  • 泛型新理解
  • 数组算法--基本查找
  • 在vs code中用npm run serve运行项目报错
  • STM32之九:ADC模数转换器
  • 文献阅读:tidyomics 生态系统:增强组学数据分析
  • Guns v7.3.0:基于 Vue3、Antdv 和 TypeScript 打造的开箱即用型前端框架
  • Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)
  • Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017年终总结、随想
  • Android组件 - 收藏集 - 掘金
  • Docker入门(二) - Dockerfile
  • Idea+maven+scala构建包并在spark on yarn 运行
  • ng6--错误信息小结(持续更新)
  • PermissionScope Swift4 兼容问题
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Redis 中的布隆过滤器
  • vue-loader 源码解析系列之 selector
  • 百度地图API标注+时间轴组件
  • 关于springcloud Gateway中的限流
  • 记录:CentOS7.2配置LNMP环境记录
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用agvtool更改app version/build
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (分布式缓存)Redis持久化
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (算法)Game
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .dwp和.webpart的区别
  • .equals()到底是什么意思?
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • :中兴通讯为何成功
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [Android] Amazon 的 android 音视频开发文档