资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java怎么实现用语音读txt文档-创新互联

本篇内容介绍了“java怎么实现用语音读txt文档”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

站在用户的角度思考问题,与客户深入沟通,找到钟山网站设计与钟山网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都做网站、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖钟山地区。

1.依赖

随便新建一个maven项目,导入依赖

 com.hynnet  jacob  1.18

只导入依赖还不行,还要导入一个.dll文件,百度云链接:链接:/tupian/20230522/1YYYPIoPxrtuyKebJzabhlw 提取码:s62o ,可以看到有两个dll文件,由于我的电脑是64位的,于是我将上面那个dll文件复制一份到当前使用jdk的bin目录下

2.java代码实现

一个很简单的java代码实现,运行之后就会读出来了;

package com.wyq.day66;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class Speak02 {  //用电脑自带的语音读字符串str public static void main(String[] args) {   String str = "你好,我是java小新人!请叫我最帅的帅锅";      ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");   Dispatch sapo = sap.getObject();   try {    // 音量 0-100    sap.setProperty("Volume", new Variant(100));    // 语音朗读速度 -10 到 +10    sap.setProperty("Rate", new Variant(0));    // 执行朗读     Dispatch.call(sapo, "Speak", new Variant(str));       } catch (Exception e) {    e.printStackTrace();   } finally {    sapo.safeRelease();    sap.safeRelease();   }    }}

3.输出音频文件

按理说到上面已经实现了功能,但是我还想着能不能把读的音频文件该输出一下呢?查了查资料,居然还真行,代码如下:
package com.wyq.day66;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class JavaSpeak { public static void main(String[] args) {  //指定文件音频输出文件位置  String output = "E:\\test.wav";    ActiveXComponent ax = null;  String str="我是java小新人,我要将这段话的音频输出一下";  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(output), 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();   }  }}

直接运行我们就可以听到朗读的声音,而且在指定目录还可以找到音频文件;

4.调用百度AI来读文本

又按理说到上面应该就差不多了,但是我总是感觉电脑自带的语音库声音不好听,我要用百度AI的那个比较可爱的声音,我还是去查了查资料,居然可以,而且很容易!

4.1.申请一下百度语音api权限

由于我们是要去调用百度的api进行语音识别,那么我们要先去申请一下权限,不然会一直报错(这个地方卡了好久,最后终于被我查出来为什么报错了。。。),链接:/tupian/20230522/error.html>   com.baidu.aip  java-sdk  4.4.1      org.json  json  20160810 

桌面上记事本中的内容:

java代码实现如下,其实就是利用百度AI读取我们计算机中的一个txt文档,输出MP3文件保存并到指定位置

package com.wyq.day66;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.HashMap;import org.json.JSONObject;import com.baidu.aip.speech.AipSpeech;import com.baidu.aip.speech.TtsResponse;import com.baidu.aip.util.Util;public class Speak03 { //设置APPID/AK/SK,这三个参数是需要我们去百度AI平台申请的(也就是上面说的那三个字符串) public static final String APP_ID = "16447127"; public static final String API_KEY = "8GO31sOIffR1oll5mPFKgtR9"; public static final String SECRET_KEY = "jWsoNGlfzfRGSQ30****NOxz9ZpjMbc";  //readFile是我们的txt文档,writeFile是输出的MP3格式 public static String readFile = "C:\\Users\\asus\\Desktop\\says.txt"; public static String writeFile = "E:\\output.mp3"; public static void main(String[] args) {  //可以直接输入字符串也行,内容比较多的话还是用txt文档比较好一点  //convertMP3("你好!我是百度AI智能,java小新人,很高兴和你见面,我们一定能成为很好的朋友的");      //调用readToString方法将一个txt文档中的数据读取出来变成一个字符串  String string = readToString(readFile);  //将这个字符串用百度AI读一下输出MP3格式  convertMP3(string); }  public static void convertMP3(String str) {   AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);   // 可选:设置网络连接参数,就是超时时间   client.setConnectionTimeoutInMillis(2000);   client.setSocketTimeoutInMillis(60000);   // 设置一些可选参数   HashMap options = new HashMap();   options.put("spd", "5");//语速,取值0-9,默认为5中语速  非必选   options.put("pit", "5");//音调,取值0-9,默认为5中语调  非必选   options.put("per", "4");//发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女 非必选      //百度AI开始读取传入的str字符串   TtsResponse res = client.synthesis(str, "zh", 1, options);      //服务器返回的内容,合成成功时为null,失败时包含error_no等信息   JSONObject result = res.getResult();    if (result != null) {    System.out.printf("error:" + result.toString()+"----------");    return;   }   //生成的音频数据   byte[] data = res.getData();      JSONObject res1 = res.getResult();   if (data != null) {    try {     //将生成的音频输出到指定位置     Util.writeBytesToFileSystem(data, writeFile);    } catch (IOException e) {     e.printStackTrace();    }   }      if (res1 != null) {    System.out.println(res1.toString());   }  }    //这个方法就是根据输入的文件路径,读取该文件内容返回一个很长的字符串,由于txt是gbk编码,所以我们变成字符串的时候也要用gbk  //其实就是最基本的流操作  public static String readToString(String fileName) {    String encoding = "gbk";    File file = new File(fileName);    Long filelength = file.length();    byte[] filecontent = new byte[filelength.intValue()];       try {     FileInputStream in = new FileInputStream(file);     in.read(filecontent);     in.close();    } catch (FileNotFoundException e) {     e.printStackTrace();    } catch (IOException e) {     e.printStackTrace();    }       try {     return new String(filecontent, encoding);    } catch (UnsupportedEncodingException e) {     System.err.println("The OS does not support " + encoding);     e.printStackTrace();     return null;    }   } }

“java怎么实现用语音读txt文档”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享名称:java怎么实现用语音读txt文档-创新互联
文章分享:http://www.cdkjz.cn/article/gjesc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220