百度文字转语音Api,文字长度限制问题
百度合成语音接口,文字内容长度限制,纯汉字不得超过2048个(不包含任何其他字符,否则报错)
百度语音合成接口使用,就不再累赘,去参考这个博主的文章
https://blog.csdn.net/belonghuang157405/article/details/81707858
2048个汉字不够用?那我就自己封装一个语音Util类,该类将字符串的文字长度进行一个判断,如果超出2000个字的内容,我就对内容进行分割。
分别发送多个请求去获取已转成的语音内容,再拼接成一整串MP3语音文件,该Util类判断文字长度最长支持6000个汉字,如需加长,请自行改装。
package com.shinemi.realiart.util;import static com.shinemi.realiart.util.ServletUtil.sendGet;import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.shinemi.common.bean.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;import java.util.HashMap;@Component
public class SpeechUtil {private final static String API_KEY = "你自己百度账号里的API_KEY";private final static String SECRET_KEY = "你自己百度账号里的SECRET_KEY";private final static String TOKEN_URL = "https://openapi.baidu.com/oauth/2.0/token";private final static String AUDIO_URL = "http://tsn.baidu.com/text2audio";private final static int OUT_TIME = 2160000;private static AipSpeech client;@Autowiredprivate RedisUtil ru;public String getAccessToken() {String param = "grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;String at = sendGet(TOKEN_URL, param);JSONObject jToken = JSON.parseObject(at);String token = jToken.getString("access_token");ru.putString("speech_token", token, OUT_TIME);return token;}public String getToken() {String token = ru.getString("speech_token");if (token == null)token = getAccessToken();return token;}/*** 单例 懒加载模式 返回实例* @return*/public static AipSpeech getInstance(){if (client==null){synchronized (AipSpeech.class){if (client==null) {client = new AipSpeech(Constants.BaiDu_APP_ID, Constants.BaiDu_API_KEY, Constants.BaiDu_SECRET_KEY);}}}return client;}public SpeechUtil() {}/*** 根据内容长度作出对应处理,并返回拼接好的音频字节数据数组* @param content* @return*/public byte[] speechSynthesizer(String content){Integer contentLength = content.length(); //获取文字内容长度if (contentLength <= 2000)return requestBaiduSpeechCloud(content);// 内容字数大于两千,小于四千,从字符中间开始分割内容一次,获取到两段内容并转成语音,将语音合并为一条语音。if (contentLength >= 2000 && contentLength <= 4000){String substring01 = content.substring(0, (contentLength - 1) / 2); //获取前段内容String substring02 = content.substring((contentLength - 1) / 2); //获取后段内容//请求百度云Api 语音合成接口byte[] bytes01 = requestBaiduSpeechCloud(substring01);byte[] bytes02 = requestBaiduSpeechCloud(substring02);//拼接两段byte数组内容byte[] data = new byte[bytes01.length + bytes02.length];System.arraycopy(bytes01, 0, data, 0, bytes01.length);System.arraycopy(bytes02, 0, data, bytes01.length, bytes02.length);return data;}// 内容字数大于四千,小于六千,从字符内容平均分割内容两次,获取到三段内容并转成语音,将语音合并为一条语音。if (contentLength > 4000 && contentLength <= 6000){String substring01 = content.substring(0, contentLength / 3);String substring02 = content.substring(contentLength / 3, 2 * contentLength / 3);String substring03 = content.substring(2 * contentLength / 3);//请求百度云Api 语音合成接口byte[] bytes01 = requestBaiduSpeechCloud(substring01);byte[] bytes02 = requestBaiduSpeechCloud(substring02);byte[] bytes03 = requestBaiduSpeechCloud(substring03);//拼接两段byte数组内容byte[] data = new byte[bytes01.length + bytes02.length + bytes03.length];System.arraycopy(bytes01, 0, data, 0, bytes01.length);System.arraycopy(bytes02, 0, data, bytes01.length, bytes02.length);System.arraycopy(bytes03, 0, data, bytes01.length + bytes02.length, bytes03.length);return data;}return null;}/*** 请求百度云Api 语音合成接口* content 文字内容长度限制,纯汉字不得超过2048个(不包含任何字符,否则报错)* @param content* @return*/public byte[] requestBaiduSpeechCloud(String content){// 初始化一个AipSpeechclient = getInstance();/* //可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);*/// 设置可选参数HashMap<String, Object> options = new HashMap<String, Object>();
// options.put("vol", "4"); //vol (String 音量,取值0-15,默认为5中音量)options.put("spd", "4"); //spd (String 语速,取值0-9,默认为5中语速)options.put("pit", "5"); //pit (String 音调,取值0-9,默认为5中语调)//per (String 发音人选择, 基础音库:0为度小美,1为度小宇,3为度逍遥,4为度丫丫,默认为普通女)//精品音库:5为度小娇,103为度米朵,106为度博文,110为度小童,111为度小萌,默认为基础音库的度小美options.put("per", "0");/* //可选:设置代理服务器地址, http和socket二选一,或者均不设置client.setHttpProxy("proxy_host", proxy_port); // 设置http代理client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理*/// 调用百度云语音合成请求接口TtsResponse res = client.synthesis(content, "zh", 1, options);byte[] data = res.getData();org.json.JSONObject res1 = res.getResult();return data;}
}
测试将合成语音文件写出本地
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@Slf4j
public class SpeechDemoTest {@Testpublic void test02(){String content = "Hello, mother fucker, Deal lay low mo chao hey. 你好,靓仔,你妈妈说你超级帅。";//使用工具类请求语音合成方法,返回byte字节。byte[] data = speechUtil.speechSynthesizer(content);//创建文件对象,将字节数组写出路径到 电脑本地桌面(自行修改路径),生成的文件叫做 datatata.mp3"File file = new File("/Users/edz/Desktop/", "datatata.mp3");if (data != null) {try {if (!file.exists()) { //如果文件不存在则新建文件file.createNewFile();}FileOutputStream fileOutputStream = new FileOutputStream(file);fileOutputStream.write(data);fileOutputStream.close();System.out.println("语音合成 成功!");} catch (IOException e) {e.printStackTrace();}}}}
百度文字转语音Api,文字长度限制问题相关推荐
- 【Qbot】6.讯飞文字转语音Api使用/VITS派蒙复读机实现
该项目计划长期进行维护更新,欢迎star:https://github.com/zstar1003/Qbot 前言 看完流浪地球2之后,萌生了一个想法:我想给机器人完整的一生.作为一个完整的机器人,声 ...
- TextToSpeech文字转语音、文字转音频文件并播放
TextToSpeech文字转语音.文字转音频文件并播放 前段时间遇到了语音读网页的需求,特地在网上找了一些资料.学习完毕后跟大家分享一下.这里是我从项目中抽取出来的代码,大家应该也基本能看清楚流程了 ...
- 微信小程序调用百度文字转语音API
文字转语音,这里接入的是百度的https://ai.baidu.com/docs#/TTS-API/top里面有详细的介绍怎么去申请.不多说什么 直接效果已解决ios播放没有语音的bug,已经亲测魅族 ...
- 百度AI开发者语音转文字python实现
笔记本上有file convert 可以实现不同文件格式之间的转换. 可以通过ffmpeg处理视频. OCR可以图片转文字. 网络上也有文字转语音的软件推荐. cpdf, pdftk可以实现pdf的分 ...
- 讯飞语音api 文字转语音生成MP3遇到的bug
项目场景: 最近做前端我遇到一个令人头疼的bug,请教了我们工作室的前端大佬也没能解决根本问题,最后发现是后端的问题,而且还挺难发现的.因为这个bug花了我不少时间,我也不能让自己头发白掉所以就记录一 ...
- html识别文字转语音,万能君工具箱v1.8 - 基于百度AI实现语音转文字/文字转语音/文字识别OCR/翻译...
一.需求分析 1.音频转文字:目前市面上的音频转文字大多收费.音频转文字的需求是:上传一段音频,直接识别成文字,对于会议记录的比较好使,注意不是实时的语音识别. 2.文字转语音:转的语音不要太生硬. ...
- 百度飞浆-语音转文字、语音识别使用过程的问题
前面讲述了安装时遇到的坑,这次记录使用过程遇到的问题. 首先说下整个脚本的运行过程. 先是将音频文件转化为wav格式,因为转文字时要求这个格式,再获取文件时长,并将文件分段为45秒的临时音频小文件,遍 ...
- 【PC工具】更新文字转语音、文字文本朗读工具,语音朗读软件,TTS语音合成...
公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天在群里嫖到一个在线的文字转语音(TTS)工具,不敢独享拿来分享.上次分享的文字转 ...
- python离线文字转语音_python文字转语音
python文字转语音 发布时间:2018-05-28 20:33, 浏览次数:382 , 标签: python 你觉得将文字转成语音需要写多少行代码才能完成? 我用了7行,你呢? #coding:u ...
- python语音转文字软件_python编写语音转文字软件|语音转文字工具免费版下载(语音批量转换文字) v2.0 最新版_数码资源网...
没有专业的工具怎么能够将语音转换为文字呢?小编为大家提供了语音转文字工具免费版,一款通过Python编写语音转文字软件.用户通过使用语音转文字工具免费版,可以将语音批量转换文字,而且操作也是非常的简单 ...
最新文章
- 一遍记住Java常用的八种排序算法与代码实现
- spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
- 《Objective-c》-(description方法)
- Linux 上 docker 安装 oracle-xe-11g
- QT环境配置:QT5.8.0与VS2013环境配置
- [数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用
- try...catch...finally java
- pandas读取csv文件的指定列
- git的使用学习(五)git的分支管理
- html语言中glyphicon,Bootstrap字体图标无法正常显示的解决方法
- Apache服务安全加固及Apache优化
- 多功能数字钟c语言单片机PPT,单片机多功能数字时钟设计电路大全(五款单片机多功能数字时钟设计电路)...
- 国内语料库建设一览表
- android camera API1调用camera HAL3流程学习总结
- linux命令mysql启动,linux中mysql启动服务命令
- ubuntu服务器登桌面,Ubuntu Server安装桌面环境实现图形化访问 | 聂扬帆博客
- Java计算文章多少字_java计算中文字数的代码实例
- Go语言slice详解
- jvm 内存查看与分析工具
- 没有测试实践就没有发言权