java 文本转语音开发
文本转语音,我这里会用到讯飞的SDK。讯飞官网,此链接直接进入他们的服务页面。
注册一个账号,然后添加一个应用,会得到一个appid,程序里会用到。
然后下载他们的SDK,会用到里面的这些文件。
这里提一下我项目的名称,可能看着有点奇怪,为什么取个名字叫spider。这是因为这个项目是我前几天刚写的爬虫爬了一下各个手机号段的归属地,我捡了下懒,就直接在这里面开整了。
接着来,看阅读文档中的这一段。
这里,可以看到会生成一个pcm文件。pcm文件并不是你最终想要的音频文件,它不能播放,你需要把它转成wav格式音频文件。pcm文件是一个记录语音脉冲编码的文件,至于它跟wav的关系与区别,我在网上看了下,说的不是太通俗易懂,也不是看的太明白,也没深究,因为我觉得这不是重点。如果硬要去理解一下呢,我觉得可以这样类比,就好比java源码与class文件关系区别,系统播放器认识wav,但不认识pcm。虚拟机认识class,但不认识java源码,不知道类比的有没有问题,但我觉得可以先这样类比。
那么如何把pcm转成wav格式的文件呢!?这才是重点
合成监听器有个方法onSynthesizeCompleted,这是监听生成pcm文件后的回调方法。在该方法中调用pcm转wav的方法。
上图中标红的方法是一个比较特殊的方法。作用是向wav文件中写入特定的其需要的头信息。
public byte[] getWAVHeader(long fileLeng, int srate, int channel, int format) {byte[] header = new byte[44];long totalDataLen = fileLeng + 36;long bitrate = srate * channel * format;header[0] = 'R'; header[1] = 'I';header[2] = 'F';header[3] = 'F';header[4] = (byte) (totalDataLen & 0xff);header[5] = (byte) ((totalDataLen >> 8) & 0xff);header[6] = (byte) ((totalDataLen >> 16) & 0xff);header[7] = (byte) ((totalDataLen >> 24) & 0xff);header[8] = 'W';header[9] = 'A';header[10] = 'V';header[11] = 'E';header[12] = 'f'; header[13] = 'm';header[14] = 't';header[15] = ' ';header[16] = (byte) format; header[17] = 0;header[18] = 0;header[19] = 0;header[20] = 1; header[21] = 0;header[22] = (byte) channel; header[23] = 0;header[24] = (byte) (srate & 0xff);header[25] = (byte) ((srate >> 8) & 0xff);header[26] = (byte) ((srate >> 16) & 0xff);header[27] = (byte) ((srate >> 24) & 0xff);header[28] = (byte) ((bitrate / 8) & 0xff);header[29] = (byte) (((bitrate / 8) >> 8) & 0xff);header[30] = (byte) (((bitrate / 8) >> 16) & 0xff);header[31] = (byte) (((bitrate / 8) >> 24) & 0xff);header[32] = (byte) ((channel * format) / 8); header[33] = 0;header[34] = 16; header[35] = 0;header[36] = 'd';header[37] = 'a';header[38] = 't';header[39] = 'a';header[40] = (byte) (fileLeng & 0xff);header[41] = (byte) ((fileLeng >> 8) & 0xff);header[42] = (byte) ((fileLeng >> 16) & 0xff);header[43] = (byte) ((fileLeng >> 24) & 0xff);return header;}
至此,就会在桌面生成一个可以播放的wav格式的音频文件。
有了wav文件就简单了,只需在后台页面添加<video><source></source></video>标签,在source标签中加属性src,路径为你的音频文件就行。不过,指向自己电脑里的文件可能会有问题。我们这项目指向的都是测试环境的文件。
本文的代码会显得有点粗糙,我只是想记录怎么文本转语音,并没有去优化自己的代码。
本文部分参考了这篇博客。
结尾再记录下自己遇到的一个小问题:
因为这个项目本来是我用springboot搭起来弄爬虫的,当时代码里有这一行代码,
因为加了这一行代码,死都没有生成那个pcm文件,又回去看文档,是不是我哪里看漏了,百度别人的博客吧啦吧啦的,结果还是没卵用。对着自己的代码发呆了半天,突然感觉一道灵光照下,感觉就是它的问题,把它注释了,结果就好了。我tm。。。。,容我写两行代码压压惊。最终原因应该就是,还没开始写pcm文件,程序就显示调用退出了。
java 文本转语音开发相关推荐
- java语音读字符串_Android Java文本到语音查看额外的字符串信息
我已经遍历了许多适用于Android的文本到语音示例,但我认为确实很简单,但是我无法终生解决! 我只希望能够查看EXTRA_AVAILABLE_VOICES的输出(例如),该输出根据ArrayList ...
- java文本输入框_Java开发笔记(一百三十九)JavaFX的输入框
循着Swing的旧例,JavaFX仍然提供了三种文本输入框,分别是单行输入框TextField.密码输入框PasswordField.多行输入框TextArea.这些输入框都由抽象类TextInput ...
- java调用espeak_espeak-example Java for windows文本转语音,用 引擎 Other systems 其他 244万源代码下载- www.pudn.com...
文件名称: espeak-example下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 1286 KB 上传时间: 2015-10-04 下载次数: 0 提 供 ...
- 基于Arduino开发板的文本转语音(TTS)转换器
文本转语音(TTS系统)能够将普通文本转换为语音.这种技术使系统能够用人声说出文本.有许多文本转语音转换的例子,例如公共交通公告.客户服务电话.智能手机中的语音助手或一些机器的导航菜单.您甚至可以在M ...
- FastAPI:快速开发一个文本转语音的接口
这段音频就是本文的接口生成的. Python Web 开发方面有一个很重要的环节就是开发接口,开发接口性能最好的工具就是闪电侠 FastAPI[1],正如它的名字一样,是非常快的 API.当然,还有一 ...
- springboot微软文本转语音(texttospeach) java实现微软文本转语音
java实现微软文本转语音(TTS)经验总结 官网地址: https://docs.microsoft.com/zh-cn/azure/cognitive-services/speech-servic ...
- java实现txt文件/文本转语音(全网最详细易懂)
java实现txt文件/文本转语音(全网最详细易懂) 1.下载依赖包 https://github.com/freemansoft/jacob-project/releases 2.将ddl文件放到j ...
- 语音朗读html的源码,网页中文本朗读功能开发实现分享
网页中文本朗读功能开发实现分享 前几天完成了一个需求,在网页中完成鼠标指向哪里,就用语音读出所指的文本.如果是按钮.链接.文本输入框,则还还要给出是什么的提醒.同时针对大段的文本,不能整段的去读,要按 ...
- java通过jacob实现文本转语音修改语音库为男声
因为最近1个项目需求,需要的Java实现1个文本转语音的功能,而且要求是离线版的男声语音,找了很多开源项目,发现基本都是Ç语言写的,集成起来麻烦,所以用了jacob,但是很坑的一点,jacob的TTS ...
最新文章
- python3安装-mac python3 轻松安装教程
- 043_Card卡片
- Leetcode987 二叉树的垂序遍历
- 火焰效果材质实现_利用噪音图制作一个纸张燃烧的效果
- HDOJ杭电2044
- WSFC2008R2跨群集迁移WSFC2012R2
- 利用福禄克网线/光纤测试仪规范测试BICSI标准
- c语言语法格式规范(1)常量的非法与合法
- c#url拼接方法名_C# 从1到Core委托与事件
- IntelliJ 创建main函数、for循环、输出语句快捷键
- linux 清除mysql密码_linux重置mysql密码
- 使用Blazor和SqlTableDependency进行实时HTML页面内容更新
- Java实验9 T6.将对象和数组存储在dat文件中
- docker harbor 域名_docker 安装Harbor
- python学习-实现用户密码登录,输错三次锁定
- jQuery 写的简单打字游戏
- 无线网DNS服务器有错误,关于dns错误的原因和解决办法
- 解决:RN和H5之间通信
- R语言基础数据操作fBasics
- 基于NFS共享存储实现kvm虚拟主机动态迁移
热门文章
- python数据导入与清洗_Python学习之 数据清洗之增删改查
- leaflet实现风场图
- LayUI时间线优化
- P2615 [NOIP2015 提高组] 神奇的幻方
- Springboot垃圾分类管理系统836b7计算机毕业设计-课程设计-期末作业-毕设程序代做
- OFDM峰均比抑制matlab,一种降低OFDM峰均比的解决方法
- c语言中\n,\t,\r,\b的用法和区别
- s32k118CAN通信问题
- php图片生成邀请函,科学网—如何制作邀请函 - 樊晓英的博文
- 手机5g什么时候普及_5G 网络什么时候普及,现在购买 4G 手机划算吗?