最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java簡單實現(xiàn)用語音讀txt文檔方法總結(jié)

 更新時間:2019年06月07日 09:08:26   投稿:laozhang  
在本篇文章里小編給大家整理了關(guān)于java簡單實現(xiàn)用語音讀txt文檔的詳細方法總結(jié),有需要的朋友們參考下。

最近比較無聊,隨便翻著博客,無意中看到了有的人用VBS讀文本內(nèi)容,也就是讀幾句中文,emmm,挺有趣的,實現(xiàn)也很簡單,都不需要安裝什么環(huán)境,直接新建txt文件,輸入一些簡單的vbs讀文本的代碼,然后將新建的文件后綴改為.vbs,然后雙擊一下就可以有效果了。。。。

于是我就想啊,java行不行呢?查了一些資料,還真的行,我就將我試驗的過程說一下,就當(dāng)作娛樂娛樂!

1.依賴

隨便新建一個maven項目,導(dǎo)入依賴

<dependency>
  <groupId>com.hynnet</groupId>
  <artifactId>jacob</artifactId>
  <version>1.18</version>
</dependency>

只導(dǎo)入依賴還不行,還要導(dǎo)入一個.dll文件,百度云鏈接:鏈接:https://pan.baidu.com/s/1YYYPIoPxrtuyKebJzabhlw 提取碼:s62o ,可以看到有兩個dll文件,由于我的電腦是64位的,于是我將上面那個dll文件復(fù)制一份到當(dāng)前使用jdk的bin目錄下

2.java代碼實現(xiàn)

一個很簡單的java代碼實現(xiàn),運行之后就會讀出來了;

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));
    // 執(zhí)行朗讀 
    Dispatch.call(sapo, "Speak", new Variant(str));
    
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    sapo.safeRelease();
    sap.safeRelease();
   }
   
 }

}

3.輸出音頻文件

按理說到上面已經(jīng)實現(xiàn)了功能,但是我還想著能不能把讀的音頻文件該輸出一下呢?查了查資料,居然還真行,代碼如下:

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");

   //運行時輸出語音內(nèi)容
   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));

   //下面是構(gòu)建文件流把生成語音文件

   ax = new ActiveXComponent("Sapi.SpFileStream");
   Dispatch spFileStream = ax.getObject();

   ax = new ActiveXComponent("Sapi.SpAudioFormat");
   Dispatch spAudioFormat = ax.getObject();

   //設(shè)置音頻流格式
   Dispatch.put(spAudioFormat, "Type", new Variant(22));
   //設(shè)置文件輸出流格式
   Dispatch.putRef(spFileStream, "Format", spAudioFormat);
   //調(diào)用輸出 文件流打開方法,在指定位置輸出一個.wav文件
   Dispatch.call(spFileStream, "Open", new Variant(output), new Variant(3), new Variant(true));
   //設(shè)置聲音對象的音頻輸出流為輸出文件對象
   Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
   //設(shè)置音量 0到100
   Dispatch.put(spVoice, "Volume", new Variant(100));
   //設(shè)置朗讀速度
   Dispatch.put(spVoice, "Rate", new Variant(-2));
   //開始朗讀
   Dispatch.call(spVoice, "Speak", new Variant(str));

   //關(guān)閉輸出文件
   Dispatch.call(spFileStream, "Close");
   Dispatch.putRef(spVoice, "AudioOutputStream", null);

   spAudioFormat.safeRelease();
   spFileStream.safeRelease();
   spVoice.safeRelease();
   ax.safeRelease();

   } catch (Exception e) {
    e.printStackTrace();
   }
 
 }

}

直接運行我們就可以聽到朗讀的聲音,而且在指定目錄還可以找到音頻文件;

4.調(diào)用百度AI來讀文本

又按理說到上面應(yīng)該就差不多了,但是我總是感覺電腦自帶的語音庫聲音不好聽,我要用百度AI的那個比較可愛的聲音,我還是去查了查資料,居然可以,而且很容易!

4.1.申請一下百度語音api權(quán)限

由于我們是要去調(diào)用百度的api進行語音識別,那么我們要先去申請一下權(quán)限,不然會一直報錯(這個地方卡了好久,最后終于被我查出來為什么報錯了。。。),鏈接:http://ai.baidu.com/

然后會讓你登錄一下,直接用qq登錄就行;

創(chuàng)建完畢之后查看一下應(yīng)用詳情:

4.2.代碼實現(xiàn)

做了這么多是操作就是為了得到這三個字符串,現(xiàn)在我們還要導(dǎo)入百度語音的依賴:

<!--百度語音播報sdk-->
 <dependency>
  <groupId>com.baidu.aip</groupId>
  <artifactId>java-sdk</artifactId>
  <version>4.4.1</version>
 </dependency>
 
 <!-- https://mvnrepository.com/artifact/org.json/json -->
 <dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20160810</version>
 </dependency>

桌面上記事本中的內(nèi)容:

java代碼實現(xiàn)如下,其實就是利用百度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 {
 //設(shè)置APPID/AK/SK,這三個參數(shù)是需要我們?nèi)グ俣華I平臺申請的(也就是上面說的那三個字符串)
 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) {
  //可以直接輸入字符串也行,內(nèi)容比較多的話還是用txt文檔比較好一點
  //convertMP3("你好!我是百度AI智能,java小新人,很高興和你見面,我們一定能成為很好的朋友的");
  
  
  //調(diào)用readToString方法將一個txt文檔中的數(shù)據(jù)讀取出來變成一個字符串
  String string = readToString(readFile);
  //將這個字符串用百度AI讀一下輸出MP3格式
  convertMP3(string);

 }
  public static void convertMP3(String str) {
   AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
   // 可選:設(shè)置網(wǎng)絡(luò)連接參數(shù),就是超時時間
   client.setConnectionTimeoutInMillis(2000);
   client.setSocketTimeoutInMillis(60000);

   // 設(shè)置一些可選參數(shù)
   HashMap<String, Object> options = new HashMap<String, Object>();
   options.put("spd", "5");//語速,取值0-9,默認為5中語速  非必選
   options.put("pit", "5");//音調(diào),取值0-9,默認為5中語調(diào)  非必選
   options.put("per", "4");//發(fā)音人選擇, 0為女聲,1為男聲,3為情感合成-度逍遙,4為情感合成-度丫丫,默認為普通女 非必選
   
   //百度AI開始讀取傳入的str字符串
   TtsResponse res = client.synthesis(str, "zh", 1, options);
   
   //服務(wù)器返回的內(nèi)容,合成成功時為null,失敗時包含error_no等信息
   JSONObject result = res.getResult(); 
   if (result != null) {
    System.out.printf("error:" + result.toString()+"----------");
    return;
   }
   //生成的音頻數(shù)據(jù)
   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());
   }
  }
  
  //這個方法就是根據(jù)輸入的文件路徑,讀取該文件內(nèi)容返回一個很長的字符串,由于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; 
   } 
  }
 

}

輸出的音頻文件:

5.總結(jié)

感覺還是有點兒意思的,沒事的時候用java玩一玩這些東西就當(dāng)是打發(fā)時間!總是看一些框架原理啊什么的,時間長了也是比較無聊的,可以挖掘一下java的其他功能也不錯!

相關(guān)文章

  • Java 棧和隊列的交互實現(xiàn)

    Java 棧和隊列的交互實現(xiàn)

    棧和隊列都是常用的數(shù)據(jù)結(jié)構(gòu),本文就來介紹一下Java 棧和隊列的交互實現(xiàn),主要包括隊列模擬實現(xiàn)棧及棧模擬實現(xiàn)隊列,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • ?Java數(shù)據(jù)結(jié)構(gòu)的十大排序

    ?Java數(shù)據(jù)結(jié)構(gòu)的十大排序

    這篇文章主要介紹了?Java數(shù)據(jù)結(jié)構(gòu)的十大排序,排序算法分為比較類排序和非比較類排序,具體的內(nèi)容,需要的朋友參考下面思維導(dǎo)圖及文章介紹,希望對你有所幫助
    2022-01-01
  • JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決

    JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決

    這篇文章主要介紹了JSON序列化導(dǎo)致Long類型被搞成Integer的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 有關(guān)tomcat內(nèi)存溢出的完美解決方法

    有關(guān)tomcat內(nèi)存溢出的完美解決方法

    下面小編就為大家?guī)硪黄嘘P(guān)tomcat內(nèi)存溢出的完美解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Java中Url編碼和解碼詳細介紹及使用示例

    Java中Url編碼和解碼詳細介紹及使用示例

    在Java中URL編碼和解碼是處理URL中特殊字符的重要操作,這篇文章主要介紹了Java中Url編碼和解碼詳細介紹及使用示例,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01
  • springboot 事件監(jiān)聽的實現(xiàn)方法

    springboot 事件監(jiān)聽的實現(xiàn)方法

    這篇文章主要介紹了springboot 事件監(jiān)聽的實現(xiàn)方法,并詳細的介紹了四種監(jiān)聽方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Java實現(xiàn)銀行賬戶管理子系統(tǒng)

    Java實現(xiàn)銀行賬戶管理子系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)銀行賬戶管理子系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • springBoot 整合ModBus TCP的詳細過程

    springBoot 整合ModBus TCP的詳細過程

    ModBus是一種串行通信協(xié)議,用于從儀器和控制設(shè)備傳輸信號到主控制器或數(shù)據(jù)采集系統(tǒng),它分為主站和從站,主站獲取和編寫數(shù)據(jù),從站則是設(shè)備,本文給大家介紹springBoot 整合ModBus TCP的詳細過程,感興趣的朋友一起看看吧
    2025-01-01
  • Spring的@Bean和@Autowired組合使用詳解

    Spring的@Bean和@Autowired組合使用詳解

    這篇文章主要介紹了Spring的@Bean和@Autowired組合使用詳解,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次隨后會將這個Bean對象放在自己的IOC容器,需要的朋友可以參考下
    2024-01-01
  • 如何自定義MyBatis攔截器更改表名

    如何自定義MyBatis攔截器更改表名

    自定義MyBatis攔截器可以在方法執(zhí)行前后插入自己的邏輯,這非常有利于擴展和定制 MyBatis 的功能,本篇文章實現(xiàn)自定義一個攔截器去改變要插入或者查詢的數(shù)據(jù)源?,需要的朋友可以參考下
    2023-10-10

最新評論

萝北县| 庆元县| 霍林郭勒市| 淳化县| 大足县| 松原市| 社旗县| 南乐县| 浙江省| 潜山县| 三门峡市| 青河县| 威宁| 江安县| 德兴市| 连云港市| 仁布县| 伊川县| 常州市| 嘉祥县| 南华县| 无锡市| 金乡县| 桑日县| 平阳县| 北宁市| 富锦市| 桐庐县| 新建县| 通道| 灵璧县| 西宁市| 读书| 白朗县| 沙坪坝区| 门头沟区| 江口县| 嘉峪关市| 邯郸市| 洱源县| 张家口市|