本篇內(nèi)容介紹了“java怎么實現(xiàn)用語音讀txt文檔”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
站在用戶的角度思考問題,與客戶深入溝通,找到鐘山網(wǎng)站設計與鐘山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋鐘山地區(qū)。1.依賴
隨便新建一個maven項目,導入依賴
<dependency> <groupId>com.hynnet</groupId> <artifactId>jacob</artifactId> <version>1.18</version></dependency>
只導入依賴還不行,還要導入一個.dll文件,百度云鏈接:鏈接:/tupian/20230522/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.輸出音頻文件
按理說到上面已經(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(); //設置音頻流格式 Dispatch.put(spAudioFormat, "Type", new Variant(22)); //設置文件輸出流格式 Dispatch.putRef(spFileStream, "Format", spAudioFormat); //調(diào)用輸出 文件流打開方法,在指定位置輸出一個.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)); //關(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來讀文本
又按理說到上面應該就差不多了,但是我總是感覺電腦自帶的語音庫聲音不好聽,我要用百度AI的那個比較可愛的聲音,我還是去查了查資料,居然可以,而且很容易!
4.1.申請一下百度語音api權(quán)限
由于我們是要去調(diào)用百度的api進行語音識別,那么我們要先去申請一下權(quán)限,不然會一直報錯(這個地方卡了好久,最后終于被我查出來為什么報錯了。。。),鏈接:/tupian/20230522/error.html><!--百度語音播報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 { //設置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); // 可選:設置網(wǎng)絡連接參數(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");//音調(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); //服務器返回的內(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; } } }
“java怎么實現(xiàn)用語音讀txt文檔”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
文章題目:java怎么實現(xiàn)用語音讀txt文檔-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://aaarwkj.com/article32/gjesc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、Google、網(wǎng)站維護、虛擬主機、用戶體驗、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容