引入jacob

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

下载DLL 语音库

地址:https://files.cnblogs.com/files/w1441639547/jacob-1.18-x64.rar

把jacob-1.18-x64.dll文件复制到jdk安装位置的bin目录下

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import sun.audio.AudioPlayer;import java.awt.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;public class XinLang {static String url = "http://zhibo.sina.com.cn/api/zhibo/feed?\\%20callback=jQuery0&page=1&page_size=1&zhibo_id=152\\%20&tag_id=0&dire=f&dpc=1&pagesize=1&_=0%20Request%20Method:GET";static final String path = XinLang.class.getResource("/").getPath();public static void main(String[] args) {List<DataInfo> infoList = null;while (true){try {Thread.sleep(1000);List<DataInfo> dataInfos = resultData(url);if(infoList != null && infoList.get(0).getText().equals(dataInfos.get(0).getText())){continue;}infoList = dataInfos ;System.out.println("=========================================================");for(DataInfo dataInfo :dataInfos){System.out.print("["+dataInfo.getTag() + "]");System.out.println(dataInfo.getText());System.out.println(dataInfo.getCrateTime());//System.out.println(dataInfo.getUrl());textToSpeech(dataInfo.getText());}} catch (InterruptedException e) {e.printStackTrace();}}//        String str = "【深高速:拟受让深圳控股湾区发展71.83%权益】深高速公告,为了积极推动国有企业改革,完善国有资产产业布局,公司间接控股股深投控拟将其拥有的深圳控股湾区发展全部71.83%权益转让予公司。";
//        textToSpeech(str);}/***  如果jacob-1.18-x64.dll 放在 jdk目录下的bin文件夹,static 可以注释 *  static 里的代码是初始化 DLL库的*/static {String dll =  path + "jacob-1.18-x64.dll";try {String libpath = System.getProperty("java.library.path");if (libpath == null || libpath.length() == 0) {throw new RuntimeException("java.library.path is null");}//javaBinPath   jdk的bin目录D:\Program Files\Java\jdk1.6.0_11\binString javaBinPath = null;StringTokenizer st = new StringTokenizer(libpath,System.getProperty("path.separator"));if (st.hasMoreElements()) {javaBinPath = st.nextToken();} else {throw new RuntimeException("can not split library path:"+ libpath);}// 把dll文件写入到java.library.path中该dll放在ConvertWord2HM相同目录下,这个可以是你的类名InputStream inputStream = XinLang.class.getResourceAsStream(dll);final File dllFile = new File(dll);if (!dllFile.exists()) {FileOutputStream outputStream = new FileOutputStream(dllFile);byte[] array = new byte[1024];int bytesRead = -1;while ((bytesRead = inputStream.read(array)) != -1) {outputStream.write(array, 0, bytesRead);}outputStream.flush();outputStream.close();}// 动态加载dllSystem.load(dllFile.getPath());// 在虚拟机关闭的时候删除dlldllFile.deleteOnExit();}catch (Throwable e) {throw new RuntimeException("load Convert.dll error!", e);}}public static List<DataInfo> resultData(String url){String data = doGet(url);if(data == null || "".equals(data)){System.out.println("没有结果");return null ;}JSONObject jsonObject = JSON.parseObject(data) ;JSONObject resultJson = jsonObject.getJSONObject("result");JSONObject statusJson = resultJson.getJSONObject("status");if(!"OK".equals(statusJson.getString("msg")) && !"0".equals(statusJson.getString("code"))){System.out.println(resultJson);System.out.println("查询失败");return null;}JSONObject dataJson = resultJson.getJSONObject("data");if( "".equals(dataJson)){System.out.println("data" + dataJson);System.out.println("无结果");return null;}// System.out.println(dataJson.getString("feed"));JSONArray array = dataJson.getJSONObject("feed").getJSONArray("list");List<DataInfo> list = new ArrayList<>();for(int i = 0 ; i< array.size() ; i++){JSONObject listJson = array.getJSONObject(i);DataInfo dataInfo  = new DataInfo();dataInfo.setTag(listJson.getJSONArray("tag").getJSONObject(0).getString("name"));dataInfo.setText(listJson.getString("rich_text"));dataInfo.setCrateTime(listJson.getString("create_time"));dataInfo.setUrl(listJson.getString("docurl"));list.add(dataInfo);}return list;}public static String doGet(String httpurl) {HttpURLConnection connection = null;InputStream is = null;BufferedReader br = null;String result = null;// 返回结果字符串try {// 创建远程url连接对象URL url = new URL(httpurl);// 通过远程url连接对象打开一个连接,强转成httpURLConnection类connection = (HttpURLConnection) url.openConnection();// 设置连接方式:getconnection.setRequestMethod("GET");// 设置连接主机服务器的超时时间:15000毫秒connection.setConnectTimeout(15000);// 设置读取远程返回的数据时间:60000毫秒connection.setReadTimeout(60000);// 发送请求connection.connect();// 通过connection连接,获取输入流if (connection.getResponseCode() == 200) {is = connection.getInputStream();// 封装输入流is,并指定字符集br = new BufferedReader(new InputStreamReader(is, "UTF-8"));// 存放数据StringBuffer sbf = new StringBuffer();String temp = null;while ((temp = br.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 关闭资源if (null != br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}connection.disconnect();// 关闭远程连接}return result;}static class DataInfo {private String text;private String crateTime;private String url;private String tag;public String getText() {return text;}public void setText(String text) {this.text = text;}public String getCrateTime() {return crateTime;}public void setCrateTime(String crateTime) {this.crateTime = crateTime;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getTag() {return tag;}public void setTag(String tag) {this.tag = tag;}}/*** 语音转文字并播放***/public static void textToSpeech(String text) {String pathWav = path +"2926.wav" ;try {AudioPlayer.player.start(new FileInputStream(pathWav));} catch (FileNotFoundException e) {e.printStackTrace();}ActiveXComponent ax = null;try {ax = new ActiveXComponent("Sapi.SpVoice");// 运行时输出语音内容Dispatch spVoice = ax.getObject();// 音量 0-100ax.setProperty("Volume", new Variant(100));// 语音朗读速度 -10 到 +10ax.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.wav"), new Variant(3), new Variant(true));// 设置声音对象的音频输出流为输出文件对象Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);// 设置音量 0到100Dispatch.put(spVoice, "Volume", new Variant(100));// 设置朗读速度Dispatch.put(spVoice, "Rate", new Variant(50));// 开始朗读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();}}
}

Java 监控 7*24小时全球实时财经新闻直播- 语音播报相关推荐

  1. php数值相加_PHP+Redis 有序集合实现 24 小时排行榜实时更新

    php中文网最新课程 每日17点准时技术干货分享 基本介绍 Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个 double 类型的分 ...

  2. php 实时更新内容_PHP+Redis 有序集合实现 24 小时排行榜实时更新

    php中文网最新课程 每日17点准时技术干货分享 基本介绍 Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个 double 类型的分 ...

  3. java 时间是24小时制吗_java时间24小时制

    var minute = 1000 * 60 var hour = minute * 60 var day = hour * 24 例子:当前距1970-1-1多少天 java.util.Date d ...

  4. java 日期格式化 24小时_SimpleDateFormat转换时间,12,24时间格式

    在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的,则使用hh:mm:ss 如果希望格式化时间为24小时制的,则使用HH:mm:ss ...

  5. java时间格式24小时制12小时制

    原文: http://zhoushu126.iteye.com/blog/1407391 Java时间设为二十四小时制和十二小时制的区别: 1) 二十四小时制: "yyyy-MM-dd HH ...

  6. java监控表变化_关于实时监控oracle数据库表数据变化的设计与实现

    近期接受项目需求,需要实时处理oracle数据库中表的数据变化,首先想到的是在程序中创建定时器,轮询表.鉴于程序冗余考虑,百度知:oracle数据库java存储过程.Oracle数据库有执行简单jav ...

  7. 冷链物流运转 3D 可视化监控,助力大数据实时监控

    智慧物流是以信息化为依托并广泛应用物联网.人工智能.大数据.云计算等技术工具,在物流价值链上的 6 项基本环节(运输.仓储.包装.装卸搬运.流通加工.配送)实现系统感知和数据采集的现代综合智能型物流系 ...

  8. 24小时智慧图书馆解决方案,校园智能微型图书馆

    校园24小时智慧图书馆的建设,与学校图书馆总馆之间实现信息实时交互并提供24小时自助服务,24小时智能微型图书馆让学生就近借书.就近阅读,创造良好便利的阅读环境,激发学生阅读需求,营造浓厚的校园阅读文 ...

  9. StompJS+SpeechSynthesis实现前端消息实时语音播报

    前言 前端消息的实时推送我相信很多人不陌生,我们可以想到利用WebSocket,服务端主动向客户端推送数据,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输.其 ...

最新文章

  1. 【Runtime】动态添加方法demo
  2. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 身份验证
  3. .NET Core如何为项目提供高性能解决方案?
  4. 如何测试程序是否_软件开发过程中,如何进行自动化测试?Unit Test 和 UI Test
  5. CountDownLatch,CyclicBarrier和Semaphore
  6. 18-数据持久化-Data Volume
  7. 【leetcode 简单】第一题 两数之和
  8. 少说话多写代码之Python学习009——字典的创建
  9. 小白设计模式:责任链模式
  10. linux驱动怎么判断定时器正在运行,Linux设备驱动编程之定时器
  11. Mysql 5.7 Gtid内部学习(八) Gtid带来的运维改变
  12. 系统编程之文件IO(一)——概述
  13. linux 安装p7zip 支持rar
  14. html打印预览空白,win7系统下使用IE浏览器预览打印页面时显示页面空白
  15. 计算机网络体系结构-虚拟专用网
  16. 四阶行列式直接展开_四阶行列式的完全展开式共有多少项
  17. iOS App上架遇到的错误(ERRORITMS-90096: )
  18. 8月第1周基金排行榜 | TokenInsight
  19. 持续不定期更新:CFDC++之拟一维喷管流动的数值解(2)
  20. 申请HTTPS证书流程

热门文章

  1. 详解知识蒸馏原理和代码
  2. vb程序设计——多态
  3. Python3趣味系列题1------回溯暴力解决数独问题
  4. 组织级过程资产库如何助力CMMI3-5级高效落地?
  5. 百亿私募,白鹭资管 | 2023届校园招聘火热进行中!
  6. STM32F103电压采集proteus仿真
  7. 在ubuntu上启动qq
  8. java期末学习总结
  9. 关于流媒体HLS分割的TS文件不能播放
  10. golang 撤回_如何看待 go 社区部分人对 try proposal 强烈抵制,希望保留现状的态度?...