溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么實現(xiàn)用語音讀txt文檔

發(fā)布時間:2021-08-19 20:58:23 來源:億速云 閱讀:139 作者:chen 欄目:編程語言

本篇內容介紹了“java怎么實現(xiàn)用語音讀txt文檔”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.依賴

隨便新建一個maven項目,導入依賴

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

只導入依賴還不行,還要導入一個.dll文件,百度云鏈接:鏈接:https://pan.baidu.com/s/1YYYPIoPxrtuyKebJzabhlw 提取碼:s62o ,可以看到有兩個dll文件,由于我的電腦是64位的,于是我將上面那個dll文件復制一份到當前使用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.輸出音頻文件

按理說到上面已經實現(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");   //運行時輸出語音內容   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/

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

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

4.2.代碼實現(xiàn)

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

<!--百度語音播報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>

桌面上記事本中的內容:

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 { //設置APPID/AK/SK,這三個參數(shù)是需要我們去百度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文檔中的數(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ù),就是超時時間   client.setConnectionTimeoutInMillis(2000);   client.setSocketTimeoutInMillis(60000);   // 設置一些可選參數(shù)   HashMap<String, Object> options = new HashMap<String, Object>();   options.put("spd", "5");//語速,取值0-9,默認為5中語速  非必選   options.put("pit", "5");//音調,取值0-9,默認為5中語調  非必選   options.put("per", "4");//發(fā)音人選擇, 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;   }   //生成的音頻數(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ù)輸入的文件路徑,讀取該文件內容返回一個很長的字符串,由于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怎么實現(xiàn)用語音讀txt文檔”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI