场景
在服务端根据执行的中文文字内容合成相应的音频文件。
这里推荐一种在Windows下调用jacob.dll文件实现语音合成。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
首先需要下载jacob的dll文件和jar包。
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/13188938
下载之后将其解压
然后这里面就会有需要的dll文件和jar包。
首先找到JAVA环境变量配置的JAVA_HOME下的bin目录,这里是
C:Program FilesJavajdk1.8.0_241in
然后将上面的两个dll复制到此路径下

然后打开Eclipse,新建一个Java Project
然后新建lib文件夹,将上面的jar包复制到lib下,然后在src下新建包,包下新建main方法
然后在项目上右键-Build Path -Config Build Path
然后在Libraries中Add JARs 将lib下的jar包添加进来,点击Apply and Close
然后修改main方法如下
<span>package com.badao.jacob;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
</span>
<span>public</span>
<span>class</span>
<span> TTSMain {
</span>
<span>public</span>
<span>static</span>
<span>void</span>
<span> main(String[] args) {
ActiveXComponent ax </span>= <span>null</span><span>;
String str</span>=<span>"</span><span>公众号:霸道的程序猿</span><span>"</span><span>;
</span><span>try</span> { ax = <span>new</span> ActiveXComponent(<span>"</span><span>Sapi.SpVoice</span><span>"</span><span>);
</span><span>//</span><span>运行时输出语音内容</span>
Dispatch spVoice =<span> ax.getObject();
</span><span>//</span><span> 音量 0-100</span>
ax.setProperty(<span>"</span><span>Volume</span><span>"</span>, <span>new</span> Variant(<span>100</span><span>));
</span><span>//</span><span> 语音朗读速度 -10 到 +10</span>
ax.setProperty(<span>"</span><span>Rate</span><span>"</span>, <span>new</span> Variant(-<span>2</span><span>));
</span><span>//</span><span> 执行朗读</span>
Dispatch.call(spVoice, <span>"</span><span>Speak</span><span>"</span>, <span>new</span><span> Variant(str));
</span><span>//</span><span>下面是构建文件流把生成语音文件</span><span>
ax </span>= <span>new</span> ActiveXComponent(<span>"</span><span>Sapi.SpFileStream</span><span>"</span><span>);
Dispatch spFileStream </span>=<span> ax.getObject();
ax </span>= <span>new</span> ActiveXComponent(<span>"</span><span>Sapi.SpAudioFormat</span><span>"</span><span>);
Dispatch spAudioFormat </span>=<span> ax.getObject();
</span><span>//</span><span>设置音频流格式</span>
Dispatch.put(spAudioFormat, <span>"</span><span>Type</span><span>"</span>, <span>new</span> Variant(<span>22</span><span>));
</span><span>//</span><span>设置文件输出流格式</span>
Dispatch.putRef(spFileStream, <span>"</span><span>Format</span><span>"</span><span>, spAudioFormat);
</span><span>//</span><span>调用输出 文件流打开方法,创建一个.wav文件</span>
Dispatch.call(spFileStream, <span>"</span><span>Open</span><span>"</span>, <span>new</span> Variant(<span>"</span><span>D:badao.wav</span><span>"</span>), <span>new</span> Variant(<span>3</span>), <span>new</span> Variant(<span>true</span><span>));
</span><span>//</span><span>设置声音对象的音频输出流为输出文件对象</span>
Dispatch.putRef(spVoice, <span>"</span><span>AudioOutputStream</span><span>"</span><span>, spFileStream);
</span><span>//</span><span>设置音量 0到100</span>
Dispatch.put(spVoice, <span>"</span><span>Volume</span><span>"</span>, <span>new</span> Variant(<span>100</span><span>));
</span><span>//</span><span>设置朗读速度</span>
Dispatch.put(spVoice, <span>"</span><span>Rate</span><span>"</span>, <span>new</span> Variant(-<span>2</span><span>));
</span><span>//</span><span>开始朗读</span>
Dispatch.call(spVoice, <span>"</span><span>Speak</span><span>"</span>, <span>new</span><span> Variant(str));
</span><span>//</span><span>关闭输出文件</span>
Dispatch.call(spFileStream, <span>"</span><span>Close</span><span>"</span><span>);
Dispatch.putRef(spVoice, </span><span>"</span><span>AudioOutputStream</span><span>"</span>, <span>null</span><span>);
spAudioFormat.safeRelease();
spFileStream.safeRelease();
spVoice.safeRelease();
ax.safeRelease();
System.</span><span>out</span>.println(<span>"</span><span>语音合成成功</span><span>"</span><span>);
} </span><span>catch</span><span> (Exception e) { e.printStackTrace();
}
}
}</span>
这里指定生成的音频文件的路径为
D:badao.wav
确保此路径存在,然后在此右键Run AS-Java Application
没有报错并输出成功信息则会在指定路径下生成音频文件。
示例代码下载:
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/13188948
原文:https://www.cnblogs.com/badaoliumangqizhi/p/14037084.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!