百度合成语音接口,文字内容长度限制,纯汉字不得超过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,文字长度限制问题相关推荐

  1. 【Qbot】6.讯飞文字转语音Api使用/VITS派蒙复读机实现

    该项目计划长期进行维护更新,欢迎star:https://github.com/zstar1003/Qbot 前言 看完流浪地球2之后,萌生了一个想法:我想给机器人完整的一生.作为一个完整的机器人,声 ...

  2. TextToSpeech文字转语音、文字转音频文件并播放

    TextToSpeech文字转语音.文字转音频文件并播放 前段时间遇到了语音读网页的需求,特地在网上找了一些资料.学习完毕后跟大家分享一下.这里是我从项目中抽取出来的代码,大家应该也基本能看清楚流程了 ...

  3. 微信小程序调用百度文字转语音API

    文字转语音,这里接入的是百度的https://ai.baidu.com/docs#/TTS-API/top里面有详细的介绍怎么去申请.不多说什么 直接效果已解决ios播放没有语音的bug,已经亲测魅族 ...

  4. 百度AI开发者语音转文字python实现

    笔记本上有file convert 可以实现不同文件格式之间的转换. 可以通过ffmpeg处理视频. OCR可以图片转文字. 网络上也有文字转语音的软件推荐. cpdf, pdftk可以实现pdf的分 ...

  5. 讯飞语音api 文字转语音生成MP3遇到的bug

    项目场景: 最近做前端我遇到一个令人头疼的bug,请教了我们工作室的前端大佬也没能解决根本问题,最后发现是后端的问题,而且还挺难发现的.因为这个bug花了我不少时间,我也不能让自己头发白掉所以就记录一 ...

  6. html识别文字转语音,万能君工具箱v1.8 - 基于百度AI实现语音转文字/文字转语音/文字识别OCR/翻译...

    一.需求分析 1.音频转文字:目前市面上的音频转文字大多收费.音频转文字的需求是:上传一段音频,直接识别成文字,对于会议记录的比较好使,注意不是实时的语音识别. 2.文字转语音:转的语音不要太生硬. ...

  7. 百度飞浆-语音转文字、语音识别使用过程的问题

    前面讲述了安装时遇到的坑,这次记录使用过程遇到的问题. 首先说下整个脚本的运行过程. 先是将音频文件转化为wav格式,因为转文字时要求这个格式,再获取文件时长,并将文件分段为45秒的临时音频小文件,遍 ...

  8. 【PC工具】更新文字转语音、文字文本朗读工具,语音朗读软件,TTS语音合成...

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天在群里嫖到一个在线的文字转语音(TTS)工具,不敢独享拿来分享.上次分享的文字转 ...

  9. python离线文字转语音_python文字转语音

    python文字转语音 发布时间:2018-05-28 20:33, 浏览次数:382 , 标签: python 你觉得将文字转成语音需要写多少行代码才能完成? 我用了7行,你呢? #coding:u ...

  10. python语音转文字软件_python编写语音转文字软件|语音转文字工具免费版下载(语音批量转换文字) v2.0 最新版_数码资源网...

    没有专业的工具怎么能够将语音转换为文字呢?小编为大家提供了语音转文字工具免费版,一款通过Python编写语音转文字软件.用户通过使用语音转文字工具免费版,可以将语音批量转换文字,而且操作也是非常的简单 ...

最新文章

  1. 一遍记住Java常用的八种排序算法与代码实现
  2. spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
  3. 《Objective-c》-(description方法)
  4. Linux 上 docker 安装 oracle-xe-11g
  5. QT环境配置:QT5.8.0与VS2013环境配置
  6. [数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用
  7. try...catch...finally java
  8. pandas读取csv文件的指定列
  9. git的使用学习(五)git的分支管理
  10. html语言中glyphicon,Bootstrap字体图标无法正常显示的解决方法
  11. Apache服务安全加固及Apache优化
  12. 多功能数字钟c语言单片机PPT,单片机多功能数字时钟设计电路大全(五款单片机多功能数字时钟设计电路)...
  13. 国内语料库建设一览表
  14. android camera API1调用camera HAL3流程学习总结
  15. linux命令mysql启动,linux中mysql启动服务命令
  16. ubuntu服务器登桌面,Ubuntu Server安装桌面环境实现图形化访问 | 聂扬帆博客
  17. Java计算文章多少字_java计算中文字数的代码实例
  18. Go语言slice详解
  19. jvm 内存查看与分析工具
  20. 没有测试实践就没有发言权

热门文章

  1. 攻防世界mfw解题wp
  2. 专科学校查重严格还是不严格?
  3. 路由器限制计算机访问,路由器如何禁止设备访问指定网站?
  4. JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序
  5. 通过 Github Actions 部署 Mkdocs 文档
  6. (离散)证明:单射 满射 同态 同构 的证明框架
  7. 开源工具利器之基于主机的IDS:Wazuh
  8. oracle数据库内存结构pga/sga/uga做比较分析
  9. 如何编写一个自己的网站
  10. 微信Hook最佳实践-WechatHook