因为工作需要,所以找了一下文本转语音这方面的资料,jacob和百度AI都有优缺点,jacob不需要联网,但是转换后的语音样式没有,百度AI的语音的样式多,但是需要联网。
如果是条件可以的话,用百度AI的语音合成比较好,毕竟百度的AI智能确实强大,但是需要注册账号才能使用
1 jacob的离线文本转化语音输出
以下是jacob的jar包和dll文件下载地址
链接: https://pan.baidu.com/s/13TR-z5Op8WOJlDGyk7S4ng 密码: 2j42
jdk64位: jacob-1.17-M2-x64.dll
jdk32位: jacob-1.17-M2-x86.dll
1.1 首先先把jar包放在项目的lib目录下,然后把dll文件放到你的jdk目录下的bin目录下
1.2 以下代码就能把文本转换成语音播放出来,并生成语音文件在指定位置
package com.sinosoft.jacob.jacob;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* @author lijunming
* @date 2018/7/11 下午3:16
*/
public class JacobStreamTask {
public static void main(String[] args) {
ActiveXComponent ax = null;
String str="我是人工智能AI";
try {
ax = new ActiveXComponent("Sapi.SpVoice");
//运行时输出语音内容
Dispatch spVoice = ax.getObject();
// 音量 0-100
ax.setProperty("Volume", new Variant(100));
// 语音朗读速度 -10 到 +10
ax.setProperty("Rate", new Variant(-3));
// 执行朗读
Dispatch.call(spVoice, "Speak", new Variant(str));
//下面是构建文件流把生成语音文件
ax = new ActiveXComponent("Sapi.SpFileStream");
Dispatch spFileStream = ax.getObject();
ax = new ActiveXComponent("Sapi.SpAudioFormat");
Dispatch spAudioFormat = ax.getObject();
//设置音频流格式
Dispatch.put(spAudioFormat, "Type", new Variant(22));
//设置文件输出流格式
Dispatch.putRef(spFileStream, "Format", spAudioFormat);
//调用输出 文件流打开方法,创建一个.wav文件
Dispatch.call(spFileStream, "Open", new Variant("E:\\test.wav"), new Variant(3), new Variant(true));
//设置声音对象的音频输出流为输出文件对象
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
//设置音量 0到100
Dispatch.put(spVoice, "Volume", new Variant(100));
//设置朗读速度
Dispatch.put(spVoice, "Rate", new Variant(-2));
//开始朗读
Dispatch.call(spVoice, "Speak", new Variant(str));
//关闭输出文件
Dispatch.call(spFileStream, "Close");
Dispatch.putRef(spVoice, "AudioOutputStream", null);
spAudioFormat.safeRelease();
spFileStream.safeRelease();
spVoice.safeRelease();
ax.safeRelease();
} catch (Exception e) {
e.printStackTrace();
}
}
} 如果需要更改默认的语音库,请看我的这篇文章
https://blog.csdn.net/ming19951224/article/details/81046488
2.百度AI在线的文本转换音频文件
2.1 首先用maven引入百度ai文本转语音的依赖包
<!--百度语音播报sdk-->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency> 2.2 配置以下代码就能够把文本转换成mp3.文件
package com.sinosoft.speech.baidu;
import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import org.json.JSONObject;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.HashMap;
/**
* @author lijunming
* @date 2018/7/11 上午9:10
*/
public class Sample {
//设置APPID/AK/SK
public static final String APP_ID = ";
public static final String API_KEY = "";
public static final String SECRET_KEY = "";
public static void main(String[] args) {
synthesis("你好!,我是百度AI智能");
}
public static void synthesis(String str) {
AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 可选:设置代理服务器地址, http和socket二选一,或者均不设置
// client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
// client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
// 可选:设置log4j日志输出格式,若不设置,则使用默认配置
// 也可以直接通过jvm启动参数设置此环境变量
System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
// 设置可选参数
HashMap<String, Object> options = new HashMap<String, Object>();
options.put("spd", "5");//语速,取值0-9,默认为5中语速 非必选
options.put("pit", "5");//音调,取值0-9,默认为5中语调 非必选
options.put("per", "4");//发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女 非必选
TtsResponse res = client.synthesis(str, "zh", 1, options);
JSONObject result = res.getResult(); //服务器返回的内容,合成成功时为null,失败时包含error_no等信息
if (!StringUtils.isEmpty(result)) {
System.out.printf("error:" + result.toString());
return;
}
byte[] data = res.getData(); //生成的音频数据
JSONObject res1 = res.getResult();
if (data != null) {
try {
Util.writeBytesToFileSystem(data, "output.mp3");
} catch (IOException e) {
e.printStackTrace();
}
}
if (res1 != null) {
System.out.println(res1.toString(2));
}
}
} 这个就是文本转成语音的mp3文件,打开就能播放了。
本文标题:jacob离线语音合成和百度AI在线语音合成
本文链接:https://blog.quwenai.cn/post/2253.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。





还没有评论,来说两句吧...