精华内容
下载资源
问答
  • 1、java文字语音输出,该资源中,包括jacob-1.19.jar、demo、微软TTS语音修复助手、Microsoft Lili语音引擎.zip。 2、整理出了在项目中遇见的坑,如...
  • java实现文字语音文件和朗读功能,还要下载jacob-1.17-M2.rar文件。将jacob.jar导入java项目中,64bit就将jacob-1.18-x64.dll放入System32目录下;32bit就将jacob-1.18-x86.dll放入System32目录下。
  • java 简单文字语音

    2016-10-20 21:28:30
    java简单文字语音开发包,仅限于window下,不支持多线程,windows X64 可能没有声音. 开始的时候,可以运行一下: java -jar speech.jar 来看看是否支持.
  • Java文字语音,亲测有效,工具类,使用jacob,里面包含jar包
  • 使用JAVA实现语音朗读一段文本

    千次阅读 2018-01-31 18:50:26
    需求要用JAVA去调用windows自带的语音引擎去朗读一段文字,网上资料少得可怜,把百度和bing都翻遍了,总算找到一段代码,而且朗读起来还有感情色彩(win7测试),不过多音字还是暂时没解决。 需要做的工作: 1、...

    需求要用JAVA去调用windows自带的语音引擎去朗读一段文字,网上资料少得可怜,把百度和bing都翻遍了,总算找到一段代码,而且朗读起来还有感情色彩(win7测试),不过多音字还是暂时没解决。
    需要做的工作:

    1、下载jacob-1.17-M2.rar (内含demo示例)
    rar地址:http://download.csdn.net/download/cjava_math/10234098

    2、解压jacob-1.17-M2.rar

    3、向工程里导入jacob.jar

    4、将jacob-1.17-M2-x86.dll拷贝到jdk的bin目录和windows/system32目录

    5、源代码如下

    public static void main(String[] args) throws IOException {
        // ?? 这个Sapi.SpVoice是需要安装什么东西吗,感觉平白无故就来了
        ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");
        // Dispatch是做什么的?
        Dispatch sapo = sap.getObject();
        try {
    
            // 音量 0-100
            sap.setProperty("Volume", new Variant(100));
            // 语音朗读速度 -10 到 +10
            sap.setProperty("Rate", new Variant(-2));
    
            Variant defalutVoice = sap.getProperty("Voice");
    
            Dispatch dispdefaultVoice = defalutVoice.toDispatch();
            Variant allVoices = Dispatch.call(sapo, "GetVoices");
            Dispatch dispVoices = allVoices.toDispatch();
    
            Dispatch setvoice = Dispatch.call(dispVoices, "Item", new Variant(1)).toDispatch();
            ActiveXComponent voiceActivex = new ActiveXComponent(dispdefaultVoice);
            ActiveXComponent setvoiceActivex = new ActiveXComponent(setvoice);
    
            Variant item = Dispatch.call(setvoiceActivex, "GetDescription");
            // 执行朗读
            Dispatch.call(sapo, "Speak", new Variant("曾小明小朋友,早上好"));
    
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sapo.safeRelease();
            sap.safeRelease();
        }
        }
    
    															有其他更强大的技术,欢迎讨论!
    
    展开全文
  • 在本篇文章里小编给大家整理了关于java简单实现用语音读txt文档的详细方法总结,有需要的朋友们参考下。最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也...

    在本篇文章里小编给大家整理了关于java简单实现用语音读txt文档的详细方法总结,有需要的朋友们参考下。

    最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也很简单,都不需要安装什么环境,直接新建txt文件,输入一些简单的vbs读文本的代码,然后将新建的文件后缀改为.vbs,然后双击一下就可以有效果了。。。。

    于是我就想啊,java行不行呢?查了一些资料,还真的行,我就将我试验的过程说一下,就当作娱乐娱乐!

    1.依赖

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

    com.hynnet

    jacob

    1.18

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

    c2db39dd2716d7b1683969b1dd881a1a.png

    2e6ae13f716bf0ec3ed098b9b1b7da8b.png

    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进行语音识别,那么我们要先去申请一下权限,不然会一直报错(这个地方卡了好久,最后终于被我查出来为什么报错了。。。),链接:http://ai.baidu.com/

    d399722957601f9eaeb200c42a615a1b.png

    然后会让你登录一下,直接用qq登录就行;

    29a96b72666cd922b20f81cb64bf902e.png

    a02667dbc91e1b3b9ee7f9fbd5209ad8.png

    601a045f98bea46fafbfb76cce9f4c7a.png

    创建完毕之后查看一下应用详情:

    0ec6cbd755ccb4603cf999d3b2140466.png

    4.2.代码实现

    做了这么多是操作就是为了得到这三个字符串,现在我们还要导入百度语音的依赖:

    com.baidu.aip

    java-sdk

    4.4.1

    org.json

    json

    20160810

    桌面上记事本中的内容:

    d6548aab995051d8d6e4d960fb82e7e2.png

    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;

    }

    }

    }

    输出的音频文件:

    b0149fcec15835223980cf9af02a32ef.png

    5.总结

    感觉还是有点儿意思的,没事的时候用java玩一玩这些东西就当是打发时间!总是看一些框架原理啊什么的,时间长了也是比较无聊的,可以挖掘一下java的其他功能也不错!

    展开全文
  • Java jacobjar 文字语音,64和32都支持 Java jacobjar 文字语音,64和32都支持
  • 语音交互的需求场景越来越多,很多开发者都想做一款把语音转换成文字的游戏或者应用,这需要用到语音识别技术,这里会对如何使用完全免费的百度语音开放平台来快速开发,拥有高大上的语音识别技术的应用。...

    🍅 Java学习路线:搬砖工逆袭Java架构师

    🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

    🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

    🍅 欢迎点赞 👍 收藏 ⭐留言 📝  

    一、基本介绍

    语音交互的需求场景越来越多,很多开发者都想做一款把语音转换成文字的游戏或者应用,这需要用到语音识别技术,这里会对如何使用完全免费的百度语音开放平台来快速开发,拥有高大上的语音识别技术的应用。

    二、引入jar包

    下载jacob-1.18.zip
    并导入jacob.jar、json-20160810.jar、log4j-1.2.17.jar
    将解压后的文件中jacob-1.18-x64.dll复制到对应的JDK中(我的是C:Program FilesJavajdk1.8.0_152jrein)

    三、代码实例

    1、工具类,ConnUtil

    展开全文
  • Java文字语音功能实现

    千次阅读 多人点赞 2020-06-03 17:08:29
    我会写出两种不同方式的文字语音demo,直接copy走用,节省开发时间 1.百度文字语音,特点:大厂的API肯定好用,功能不少,这个如果是企业开发,推荐使用,需要收费的,可以直接申请账号注册,有appid 等参数,...

    也许,有些时候,你需要这个需求呢,来上代码

    我会写出两种不同方式的文字转语音demo,直接copy走用,节省开发时间

    git项目下载地址

    1.直接使用jdk的 jacob,效果还不错,特点:免费的
    2.百度文字转语音,特点:大厂的API肯定好用,功能不少,这个如果是企业开发,推荐使用,需要收费的,可以直接申请账号注册,有appid 等参数,配置好直接用

    项目demo,需要的去git下载吧
    在这里插入图片描述

    需要下载jacob-1.18,网上一堆
    项目中引入pom文件

    
    		<!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 -->
    		<dependency>
    			<groupId>com.hynnet</groupId>
    			<artifactId>jacob</artifactId>
    			<version>1.18</version>
    		</dependency>
    

    1.java合成方法

    package com.jourwon.httpclient.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    
    public class Test {
    
    	/**
    	 * 语音转文字并播放
    	 * 
    	 * @param txt
    	 */
    	public static void textToSpeech(String text) {
    		ActiveXComponent ax = null;
    		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(-2));
    			// 执行朗读
    			Dispatch.call(spVoice, "Speak", new Variant(text));
    
    			// 下面是构建文件流把生成语音文件
    
    			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("./text.mp3"), 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(text));
    
    			// 关闭输出文件
    			Dispatch.call(spFileStream, "Close");
    			Dispatch.putRef(spVoice, "AudioOutputStream", null);
    
    			spAudioFormat.safeRelease();
    			spFileStream.safeRelease();
    			spVoice.safeRelease();
    			ax.safeRelease();
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void main(String[] args) {
    		String s = "当月亮和太阳处于地球两侧,并且月亮和太阳的黄经相差180度时,从地球上看,此时的月亮最圆,称之为“满月”";
    		textToSpeech(s);
    		File file = new File("result.mp3"); // 打开mp3文件即可播放
    		String fileName = "Operator.doc".toString(); // 文件的默认保存名
    		// 读到流中
    		try {
    			InputStream inStream = new FileInputStream("c:/Operator.doc");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} // 文件的存放路径
    	}
    
    }
    

    2.百度语音合成方法

    package com.jourwon.httpclient.util;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class TtsMain {
    
    	public static void main(String[] args) throws Exception {
    		(new TtsMain()).run();
    	}
    
    	// 填写申请百度语音申请的appkey 申请地址:百度AI开放平台
    	private final String appKey = "自己申请";
    
    	// 填写申请百度语音申请的APP SECRET
    	private final String secretKey = "自己申请";
    
    	// text 的内容为"欢迎使用百度语音合成"的urlencode,utf-8 编码
    	private final String text = "百度百科是百度公司推出的一部内容开放、自由的网络百科全书。";
    	// 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
    	private final int per = 0;
    	// 语速,取值0-9,默认为5中语速
    	private final int spd = 5;
    	// 音调,取值0-9,默认为5中语调
    	private final int pit = 5;
    	// 音量,取值0-9,默认为5中音量
    	private final int vol = 5;
    	// 调用地址
    	public final String url = "https://tsn.baidu.com/text2audio";
    	// 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
    	private String cuid = "0322java";
    
    	private void run() throws Exception {
    		TokenHolder holder = new TokenHolder(appKey, secretKey, TokenHolder.ASR_SCOPE);
    		holder.resfresh();
    		String token = holder.getToken();
    
    		String url2 = url + "?tex=" + ConnUtil.urlEncode(text);
    		url2 += "&per=" + per;
    		url2 += "&spd=" + spd;
    		url2 += "&pit=" + pit;
    		url2 += "&vol=" + vol;
    		url2 += "&cuid=" + cuid;
    		url2 += "&tok=" + token;
    		url2 += "&lan=zh&ctp=1";
    		HttpURLConnection conn = (HttpURLConnection) new URL(url2).openConnection();
    		conn.setConnectTimeout(5000);
    		String contentType = conn.getContentType();
    		if (contentType.contains("mp3")) {
    			byte[] bytes = ConnUtil.getResponseBytes(conn);
    			// 存在项目根目录下,去文件夹点击可以播放
    			File file = new File("result.mp3");
    			FileOutputStream os = new FileOutputStream(file);
    			os.write(bytes);
    			os.close();
    			System.out.println("mp3 file write to " + file.getAbsolutePath());
    		} else {
    			System.err.println("ERROR: content-type= " + contentType);
    			String res = ConnUtil.getResponseString(conn);
    			System.err.println(res);
    		}
    	}
    }
    

    //工具类

    package com.jourwon.httpclient.util;
    
    import org.json.JSONObject;
    
    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    /**
     * token的获取类 将apiKey和secretKey换取token,注意有效期保存在expiresAt
     */
    public class TokenHolder {
    
    	public static final String ASR_SCOPE = "audio_voice_assistant_get";
    
    	public static final String TTS_SCOPE = "audio_tts_post";
    
    	/**
    	 * url , Token的url,http可以改为https
    	 */
    	private static final String url = "http://openapi.baidu.com/oauth/2.0/token";
    
    	/**
    	 * asr的权限 scope 是 "audio_voice_assistant_get" tts 的权限 scope 是
    	 * "audio_tts_post"
    	 */
    	private String scope;
    
    	/**
    	 * 网页上申请语音识别应用获取的apiKey
    	 */
    	private String apiKey;
    
    	/**
    	 * 网页上申请语音识别应用获取的secretKey
    	 */
    	private String secretKey;
    
    	/**
    	 * 保存访问接口获取的token
    	 */
    	private String token;
    
    	/**
    	 * 当前的时间戳,毫秒
    	 */
    	private long expiresAt;
    
    	/**
    	 * @param apiKey
    	 *            网页上申请语音识别应用获取的apiKey
    	 * @param secretKey
    	 *            网页上申请语音识别应用获取的secretKey
    	 */
    	public TokenHolder(String apiKey, String secretKey, String scope) {
    		this.apiKey = apiKey;
    		this.secretKey = secretKey;
    		this.scope = scope;
    	}
    
    	/**
    	 * 获取token,refresh 方法后调用有效
    	 *
    	 * @return
    	 */
    	public String getToken() {
    		return token;
    	}
    
    	/**
    	 * 获取过期时间,refresh 方法后调用有效
    	 *
    	 * @return
    	 */
    	public long getExpiresAt() {
    		return expiresAt;
    	}
    
    	/**
    	 * 获取token
    	 *
    	 * @return
    	 * @throws IOException
    	 *             http请求错误
    	 * @throws DemoException
    	 *             http接口返回不是 200, access_token未获取
    	 */
    	public void resfresh() throws Exception {
    		String getTokenURL = url + "?grant_type=client_credentials" + "&client_id=" + ConnUtil.urlEncode(apiKey)
    				+ "&client_secret=" + ConnUtil.urlEncode(secretKey);
    
    		// 打印的url出来放到浏览器内可以复现
    		System.out.println("token url:" + getTokenURL);
    
    		URL url = new URL(getTokenURL);
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		conn.setConnectTimeout(5000);
    		String result = ConnUtil.getResponseString(conn);
    		System.out.println("Token result json:" + result);
    		parseJson(result);
    	}
    
    	/**
    	 * @param result
    	 *            token接口获得的result
    	 * @throws DemoException
    	 */
    	private void parseJson(String result) throws Exception {
    		JSONObject json = new JSONObject(result);
    		if (!json.has("access_token")) {
    			// 返回没有access_token字段
    			throw new DemoException("access_token not obtained, " + result);
    		}
    		if (!json.has("scope")) {
    			// 返回没有scope字段
    			throw new DemoException("scopenot obtained, " + result);
    		}
    		if (!json.getString("scope").contains(scope)) {
    			throw new DemoException("scope not exist, " + scope + "," + result);
    		}
    		token = json.getString("access_token");
    		expiresAt = System.currentTimeMillis() + json.getLong("expires_in") * 1000;
    	}
    }
    

    //异常处理

    package com.jourwon.httpclient.util;
    
    public class DemoException extends Exception {
    	public DemoException(String message) {
    		super(message);
    	}
    }
    

    //util相关类

    package com.jourwon.httpclient.util;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URLEncoder;
    
    /**
     * 与连接相关的Util类
     */
    public class ConnUtil {
    
    	/**
    	 * UrlEncode, UTF-8 编码
    	 *
    	 * @param str
    	 *            原始字符串
    	 * @return
    	 */
    	public static String urlEncode(String str) {
    		String result = null;
    		try {
    			result = URLEncoder.encode(str, "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	/**
    	 * 从HttpURLConnection 获取返回的字符串
    	 *
    	 * @param conn
    	 * @return
    	 * @throws IOException
    	 * @throws DemoException
    	 */
    	public static String getResponseString(HttpURLConnection conn) throws IOException, DemoException {
    		return new String(getResponseBytes(conn));
    	}
    
    	/**
    	 * 从HttpURLConnection 获取返回的bytes 注意 HttpURLConnection自身问题,
    	 * 400类错误,会直接抛出异常。不能获取conn.getInputStream();
    	 *
    	 * @param conn
    	 * @return
    	 * @throws IOException
    	 *             http请求错误
    	 * @throws DemoException
    	 *             http 的状态码不是 200
    	 */
    	public static byte[] getResponseBytes(HttpURLConnection conn) throws IOException, DemoException {
    		int responseCode = conn.getResponseCode();
    		if (responseCode != 200) {
    			System.err.println("http 请求返回的状态码错误,期望200, 当前是 " + responseCode);
    			if (responseCode == 401) {
    				System.err.println("可能是appkey appSecret 填错");
    			}
    			throw new DemoException("http response code is" + responseCode);
    		}
    
    		InputStream inputStream = conn.getInputStream();
    		byte[] result = getInputStreamContent(inputStream);
    		return result;
    	}
    
    	/**
    	 * 将InputStream内的内容全部读取,作为bytes返回
    	 *
    	 * @param is
    	 * @return
    	 * @throws IOException
    	 * @see InputStream.read()
    	 */
    	public static byte[] getInputStreamContent(InputStream is) throws IOException {
    		byte[] b = new byte[1024];
    		// 定义一个输出流存储接收到的数据
    		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    		// 开始接收数据
    		int len = 0;
    		while (true) {
    			len = is.read(b);
    			if (len == -1) {
    				// 数据读完
    				break;
    			}
    			byteArrayOutputStream.write(b, 0, len);
    		}
    		return byteArrayOutputStream.toByteArray();
    	}
    }
    

    //http工具类

    package com.jourwon.httpclient.util;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpDelete;
    import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.client.methods.HttpRequestBase;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import com.jourwon.httpclient.pojo.HttpClientResult;
    
    /**
     * Description: httpClient工具类
     * 
     * @author JourWon
     * @date Created on 2018年4月19日
     */
    public class HttpClientUtils {
    
    	// 编码格式。发送编码格式统一用UTF-8
    	private static final String ENCODING = "UTF-8";
    	
    	// 设置连接超时时间,单位毫秒。
    	private static final int CONNECT_TIMEOUT = 6000;
    	
    	// 请求获取数据的超时时间(即响应时间),单位毫秒。
    	private static final int SOCKET_TIMEOUT = 6000;
    
    	/**
    	 * 发送get请求;不带请求头和请求参数
    	 * 
    	 * @param url 请求地址
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doGet(String url) throws Exception {
    		return doGet(url, null, null);
    	}
    	
    	/**
    	 * 发送get请求;带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 请求参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doGet(String url, Map<String, String> params) throws Exception {
    		return doGet(url, null, params);
    	}
    
    	/**
    	 * 发送get请求;带请求头和请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param headers 请求头集合
    	 * @param params 请求参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doGet(String url, Map<String, String> headers, Map<String, String> params) throws Exception {
    		// 创建httpClient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    
    		// 创建访问的地址
    		URIBuilder uriBuilder = new URIBuilder(url);
    		if (params != null) {
    			Set<Entry<String, String>> entrySet = params.entrySet();
    			for (Entry<String, String> entry : entrySet) {
    				uriBuilder.setParameter(entry.getKey(), entry.getValue());
    			}
    		}
    
    		// 创建http对象
    		HttpGet httpGet = new HttpGet(uriBuilder.build());
    		/**
    		 * setConnectTimeout:设置连接超时时间,单位毫秒。
    		 * setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection
    		 * 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
    		 * setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
    		 */
    		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
    		httpGet.setConfig(requestConfig);
    		
    		// 设置请求头
    		packageHeader(headers, httpGet);
    
    		// 创建httpResponse对象
    		CloseableHttpResponse httpResponse = null;
    
    		try {
    			// 执行请求并获得响应结果
    			return getHttpClientResult(httpResponse, httpClient, httpGet);
    		} finally {
    			// 释放资源
    			release(httpResponse, httpClient);
    		}
    	}
    
    	/**
    	 * 发送post请求;不带请求头和请求参数
    	 * 
    	 * @param url 请求地址
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doPost(String url) throws Exception {
    		return doPost(url, null, null);
    	}
    	
    	/**
    	 * 发送post请求;带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doPost(String url, Map<String, String> params) throws Exception {
    		return doPost(url, null, params);
    	}
    
    	/**
    	 * 发送post请求;带请求头和请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param headers 请求头集合
    	 * @param params 请求参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doPost(String url, Map<String, String> headers, Map<String, String> params) throws Exception {
    		// 创建httpClient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    
    		// 创建http对象
    		HttpPost httpPost = new HttpPost(url);
    		/**
    		 * setConnectTimeout:设置连接超时时间,单位毫秒。
    		 * setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection
    		 * 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
    		 * setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
    		 */
    		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
    		httpPost.setConfig(requestConfig);
    		// 设置请求头
    		/*httpPost.setHeader("Cookie", "");
    		httpPost.setHeader("Connection", "keep-alive");
    		httpPost.setHeader("Accept", "application/json");
    		httpPost.setHeader("Accept-Language", "zh-CN,zh;q=0.9");
    		httpPost.setHeader("Accept-Encoding", "gzip, deflate, br");
    		httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");*/
    		packageHeader(headers, httpPost);
    		
    		// 封装请求参数
    		packageParam(params, httpPost);
    
    		// 创建httpResponse对象
    		CloseableHttpResponse httpResponse = null;
    
    		try {
    			// 执行请求并获得响应结果
    			return getHttpClientResult(httpResponse, httpClient, httpPost);
    		} finally {
    			// 释放资源
    			release(httpResponse, httpClient);
    		}
    	}
    
    	/**
    	 * 发送put请求;不带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doPut(String url) throws Exception {
    		return doPut(url);
    	}
    
    	/**
    	 * 发送put请求;带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doPut(String url, Map<String, String> params) throws Exception {
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		HttpPut httpPut = new HttpPut(url);
    		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
    		httpPut.setConfig(requestConfig);
    		
    		packageParam(params, httpPut);
    
    		CloseableHttpResponse httpResponse = null;
    
    		try {
    			return getHttpClientResult(httpResponse, httpClient, httpPut);
    		} finally {
    			release(httpResponse, httpClient);
    		}
    	}
    
    	/**
    	 * 发送delete请求;不带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doDelete(String url) throws Exception {
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		HttpDelete httpDelete = new HttpDelete(url);
    		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
    		httpDelete.setConfig(requestConfig);
    
    		CloseableHttpResponse httpResponse = null;
    		try {
    			return getHttpClientResult(httpResponse, httpClient, httpDelete);
    		} finally {
    			release(httpResponse, httpClient);
    		}
    	}
    
    	/**
    	 * 发送delete请求;带请求参数
    	 * 
    	 * @param url 请求地址
    	 * @param params 参数集合
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult doDelete(String url, Map<String, String> params) throws Exception {
    		if (params == null) {
    			params = new HashMap<String, String>();
    		}
    
    		params.put("_method", "delete");
    		return doPost(url, params);
    	}
    	
    	/**
    	 * Description: 封装请求头
    	 * @param params
    	 * @param httpMethod
    	 */
    	public static void packageHeader(Map<String, String> params, HttpRequestBase httpMethod) {
    		// 封装请求头
    		if (params != null) {
    			Set<Entry<String, String>> entrySet = params.entrySet();
    			for (Entry<String, String> entry : entrySet) {
    				// 设置到请求头到HttpRequestBase对象中
    				httpMethod.setHeader(entry.getKey(), entry.getValue());
    			}
    		}
    	}
    
    	/**
    	 * Description: 封装请求参数
    	 * 
    	 * @param params
    	 * @param httpMethod
    	 * @throws UnsupportedEncodingException
    	 */
    	public static void packageParam(Map<String, String> params, HttpEntityEnclosingRequestBase httpMethod)
    			throws UnsupportedEncodingException {
    		// 封装请求参数
    		if (params != null) {
    			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    			Set<Entry<String, String>> entrySet = params.entrySet();
    			for (Entry<String, String> entry : entrySet) {
    				nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
    			}
    
    			// 设置到请求的http对象中
    			httpMethod.setEntity(new UrlEncodedFormEntity(nvps, ENCODING));
    		}
    	}
    
    	/**
    	 * Description: 获得响应结果
    	 * 
    	 * @param httpResponse
    	 * @param httpClient
    	 * @param httpMethod
    	 * @return
    	 * @throws Exception
    	 */
    	public static HttpClientResult getHttpClientResult(CloseableHttpResponse httpResponse,
    			CloseableHttpClient httpClient, HttpRequestBase httpMethod) throws Exception {
    		// 执行请求
    		httpResponse = httpClient.execute(httpMethod);
    
    		// 获取返回结果
    		if (httpResponse != null && httpResponse.getStatusLine() != null) {
    			String content = "";
    			if (httpResponse.getEntity() != null) {
    				content = EntityUtils.toString(httpResponse.getEntity(), ENCODING);
    			}
    			return new HttpClientResult(httpResponse.getStatusLine().getStatusCode(), content);
    		}
    		return new HttpClientResult(HttpStatus.SC_INTERNAL_SERVER_ERROR);
    	}
    
    	/**
    	 * Description: 释放资源
    	 * 
    	 * @param httpResponse
    	 * @param httpClient
    	 * @throws IOException
    	 */
    	public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {
    		// 释放资源
    		if (httpResponse != null) {
    			httpResponse.close();
    		}
    		if (httpClient != null) {
    			httpClient.close();
    		}
    	}
    
    }
    
    
    展开全文
  • 1. 下载资源jacob将.dll文件添加到jre下的bin文件夹下64位操作系统选择jacob-1.18-x64.dll文件32位操作系统选择jacob-1.18-x86.dll链接:https://pan.baidu.com/s/1bppqj07 密码:hdcvMSTTSSpeech.javaimport ...
  • java 实现文字语音功能并同时生成语音文件 demo

    千次阅读 热门讨论 2019-11-29 16:02:04
    文字语音功能并同时生成语音文件 这个demo实现的是 你传输一个字符串对象 程序把你传输的对象里的字符串 转成一个可语音文件 并且会在你本机出来 !!!如果没有出来请首先检查你电脑的声音是否已经...
  • 基于android的离线语音识别,实现没有网络的情况下把语音转换成文字信息。 对程序内容进行了简化,内容简单明了,容易看懂。 包含了离线语音需要的所有离线包 speechapp.java文件第22行修改成自己在讯飞网站申请的id...
  • /** * 文字语音测试 jdk */ @RestController public class VoiceDemo { public static void main(String[] args) { textToSpeech("支付宝到账100.00元"); //textToSpeech("拿错文件,赶紧放回,不然揍你"); } ...
  • java使用jacob语言实现阅读文字文字语音 实现文字语音也需要一些支持,jdk默认是不支持的,因此在jdk中引入支持的文件,也是我们后面jar调用的程序。 大家都知道jdk是java编译运行时的环境,也就是为我们运行...
  • Java实现文字语音

    千次阅读 2018-11-07 22:30:00
    // 数据完 break; } byteArrayOutputStream.write(b, 0, len); } return byteArrayOutputStream.toByteArray(); } } package baidu.restapi.common; import org.json.JSONObject; import java.io....
  • jacob允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库。它可运行在x86和支持32位和64位Java虚拟机 X64的环境。
  • 文字生成语音采用的是jacob项目 github:jacob download:jar包下载 下载的jar包后里面有个x86,x64dll,和jar包同目录即可 第一步:maven引入: <!-- ...
  • Java实现简单的语音朗读

    万次阅读 热门讨论 2018-01-10 17:08:12
    实验三 利用微软的speech sdk或Java speech api(jsapi)等实现简单的语音(中英文均可)朗读,最好能够实现简单的识别(6学时) 基本要求: 实现简单的语音朗读 bonus: 实现简单的识别 硬件:耳机(音箱);麦克风...
  • 导入jar包下载jacob-1.18.zip并导入jacob.jar、json-20160810.jar、log4j-1.2.17.jar将解压后的文件中jacob-1.18-x64.dll复制到对应的JDK中(我的是C:\Program Files\Java\jdk1.8.0_152\jre\bin)代码实例package ...
  • 标题我有一篇文章写得是Windows... * 文字语音 */ @RequestMapping(value = "/textToSpeech", method = RequestMethod.POST) public ResultInfo textToSpeech(@RequestBody JSONObject json) { ResultInfo re
  • Java实现文本转语音 1. 首先需要导入jacob.jar的jar包 jar包下载地址 2.编写测试代码 import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import java....
  • 语音合成 JAVA SDK

    2021-03-06 18:15:49
    语音合成 Java SDK一、SDK描述京东AI为满足TTS相关产品的快速接入,在REST API的基础上对各种平台和语言进行封装,大大降低客户接入的难度。现已发布的平台及语言有:C/C++,Java,Android,IOS,Python, H5等,已...
  • 使用java实现语音朗读

    千次阅读 2018-05-04 10:45:14
    import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import com.jacob.activeX.ActiveXComponent; import ...
  • 一个基于Java的粤语发音TTS,文字语音.
  • java-tts一个基于Java的粤语发音TTS,文字语音,通过web访问音频流方式输出。安装你的Java环境你可以很简单的使用它,初次尝试的时候你可以建立一个如下的 src\org\lib\speech\test\Test.java文件来测试:import ...
  • java语音朗读实例。TTS调用实例

    热门讨论 2011-11-29 10:39:23
    java+tts读文字语音功能模块~java调用TTS的实例
  • Android文字语音(TTS)

    千次阅读 2020-04-04 00:28:05
    这篇文章介绍了如何在Android中使用文字语音(TTS) 。 找不到说明如何使用它的帖子并不常见,并且它是Android的一部分,内容不多。 我认为TTS非常有趣,因为它可以为应用程序添加一些不错的功能。 文字语音是...
  • springboot整合jacob实现文字语音 前期准备 在实现这个功能前,得先做几步准备 1。去官网下载jar包和dll文件 2。把下载的dll文件放入到jdk的bin目录下 3。把下载下的jar包打到maven仓库中 4。pom引入打好的依赖 1....
  • 科大讯飞平台语音文字互转简单介绍

    万次阅读 多人点赞 2016-12-10 21:33:45
    在这边分享中主要是使用java平台介绍科大讯飞中的在线语音合成功能(包括语音文字文字语音)。  首先大家下载该功能的SDK.下载前必须要首先注册一个科大讯飞平台的账户。并在控制台中创建一个与之对应的java...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,557
精华内容 1,422
关键字:

java语音读文字

java 订阅