当前位置:首页 > 操作系统 > Windows

Java中使用Jacob实现Windows下语音合成并生成音频文件

场景

在服务端根据执行的中文文字内容合成相应的音频文件。

这里推荐一种在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)!

相关教程推荐

其他课程推荐