導航:首頁 > 編程語言 > java語音朗讀

java語音朗讀

發布時間:2022-08-31 20:10:24

A. 一款手機(山寨版就行),支持java的,有語音朗讀電子書功能的,大概需要多少錢(價格在什麼范圍內)

高仿諾基亞E71,淘寶200左右!
你說的功能都有

B. java手機語音朗讀軟體

國產系類的,貌似很少哦!
建議你去JAVA的論壇看下,有沒有發布

C. JAVA 語音朗讀文本文檔內容

建議這個用C作比較好。JAVA不能生成可執行文件呀。

D. 在java程序中加入語音功能,例如給段字元串「A101」,就能發出聲音,請大家幫幫忙,謝謝

為應用程序加上語音能力有什麼好處呢?粗略地講,是為了趣味,它適合所有注重趣味的應用,比如游戲。當然,從更嚴肅的角度來講,它還涉及到應用的可用性問題。注意,這里我考慮的不僅是可視化界面固有的不足,而且還有這樣一些情形:一些時候,讓雙眼離開當前的工作很不方便,甚至是不合法的。比如,假設有一個帶語音功能的瀏覽器,你就可以在外出散步或開車上班的同時,用聽的方式瀏覽自己喜愛的網站。從目前來看,郵件閱讀器或許是語音技術更實際的應用,在JavaMail API的幫助下,這一切已經可能。郵件閱讀器可以定期地檢查收件箱,然後用語音「You have new mail, would you like me to read it to you?」引起你的注意。按照類似的思路,我們還可以考慮一個帶語音功能的提醒器,把它連接到一個日歷應用:它會及時地提醒你「Don't forget your meeting with the boss in 10 minutes!」。 也許你已經被這些主意吸引,或者有了自己更好的主意,現在讓我們繼續。首先我將介紹如何啟用本文提供的語音引擎,這樣,如果你認為語音引擎的實現細節過於復雜,就可以直接使用它而忽略其實現細節。
一、試用語音引擎 要使用這個語音引擎,你必須在CLASSPATH中加入本文提供的javatalk.jar文件,然後從命令行運行(或者從Java程序調用)com.lotontech.speech.Talker類。如果從命令行運行,則命令為: java com.lotontech.speech.Talker "h|e|l|oo" 如果從Java程序調用,則代碼為: com.lotontech.speech.Talker talker=new com.lotontech.speech.Talker(); talker.sayPhoneWord("h|e|l|oo"); 現在,對於在命令行上(或者調用sayPhoneWord()方法時)提供的「h|e|l|oo」字元串,你或許有所不解。下面我就來解釋一下。 語音引擎的工作原理是把細小的聲音樣本連接起來,每一個樣本都是人的語言發音(英語)的一個最小單位。這些聲音樣本稱為音素(allophone)。每一個因素對應一個、二個或者三個字母。從前面「hello」的語音表示可以看出,一些字母組合的發音顯而易見,還有一些卻不是很明顯: h -- 讀音顯而易見 e -- 讀音顯而易見 l -- 讀音顯而易見,但注意兩個「l」被簡縮成了一個「l」。 OO -- 應該讀作「hello」中的讀音,不應讀作「bot」、「too」中的讀音。 下面是一個有效音素的清單: a : 如cat b : 如cab c : 如cat d : 如dot e : 如bet f : 如frog g : 如frog h : 如hog i : 如pig j : 如jig k : 如keg l : 如leg m : 如met n : 如begin o : 如not p : 如pot r : 如rot s : 如sat t : 如sat u : 如put v : 如have w : 如wet y : 如yet z : 如zoo aa : 如fake ay : 如hay ee : 如bee ii : 如high oo : 如go bb : b的變化形式,重音不同 dd : d的變化形式,重音不同 ggg : g的變化形式,重音不同 hh : h的變化形式,重音不同 ll : l的變化形式,重音不同 nn : n的變化形式,重音不同 rr : r的變化形式,重音不同 tt : t的變化形式,重音不同 yy : y的變化形式,重音不同 ar : 如car aer : 如care ch : 如which ck : 如check ear : 如beer er : 如later err : 如later (長音) ng : 如feeding or : 如law ou : 如zoo ouu : 如zoo (長音) ow : 如cow oy : 如boy sh : 如shut th : 如thing dth : 如this uh : u 的變化形式 wh : 如where zh : 如Asian 人說話的時候,語音在整個句子之內起落變化。語調變化使得語音更自然、更富有感染力,使得問句和陳述句能夠相互區別。請考慮下面兩個句子: It is fake -- f|aa|k Is it fake? -- f|AA|k 也許你已經猜想到,提高語調的方法是使用大寫字母。 以上就是使用該軟體時你需要了解的東西。如果你對其後台實現細節感興趣,請繼續閱讀。
二、實現語音引擎 語音引擎的實現只包括一個類,四個方法。它利用了J2SE 1.3包含的Java Sound API。在這里,我不準備全面地介紹這個API,但你可以通過實例學習它的用法。Java Sound API並不是一個特別復雜的API,代碼中的注釋將告訴你必須了解的知識。 下面是Talker類的基本定義: package com.lotontech.speech; import javax.sound.sampled.*; import java.io.*; import java.util.*; import java.net.*; public class Talker { private SourceDataLine line=null; } 如果從命令行執行Talker,下面的main()方法將作為入口點運行。main()方法獲取第一個命令行參數,然後把它傳遞給sayPhoneWord()方法: /* * 讀出在命令行中指定的表示讀音的字元串 */ public static void main(String args[]) { Talker player=new Talker(); if (args.length>0) player.sayPhoneWord(args[0]); System.exit(0); }
sayPhoneWord()方法既可以通過上面的main()方法調用,也可以在Java程序中直接調用。從表面上看,sayPhoneWord()方法比較復雜,其實並非如此。實際上,它簡單地遍歷所有單詞的語音元素(在輸入字元串中語音元素以「|」分隔),通過一個聲音輸出通道一個元素一個元素地播放出來。為了讓聲音更自然一些,我把每一個聲音樣本的結尾和下一個聲音樣本的開頭合並了起來: /* * 讀出指定的語音字元串 */ public void sayPhoneWord(String word) { // 為上一個聲音構造的模擬byte數組 byte[] previousSound=null; // 把輸入字元串分割成單獨的音素 StringTokenizer st=new StringTokenizer(word,"|",false); while (st.hasMoreTokens()) { // 為音素構造相應的文件名字 String thisPhoneFile=st.nextToken(); thisPhoneFile="/allophones/"+thisPhoneFile+".au"; // 從聲音文件讀取數據 byte[] thisSound=getSound(thisPhoneFile); if (previousSound!=null) { // 如果可能的話,把前一個音素和當前音素合並 int mergeCount=0; if (previousSound.length>=500 && thisSound.length>=500) mergeCount=500; for (int i=0; i { previousSound[previousSound.length-mergeCount+i] =(byte)((previousSound[previousSound.length -mergeCount+i]+thisSound[i])/2); } // 播放前一個音素 playSound(previousSound); // 把經過截短的當前音素作為前一個音素 byte[] newSound=new byte[thisSound.length-mergeCount]; for (int ii=0; ii newSound[ii]=thisSound[ii+mergeCount]; previousSound=newSound; } else previousSound=thisSound; } // 播放最後一個音素,清理聲音通道 playSound(previousSound); drain(); } 在sayPhoneWord()的後面,你可以看到它調用playSound()輸出單個聲音樣本(即一個音素),然後調用drain()清理聲音通道。下面是playSound()的代碼: /* * 該方法播放一個聲音樣本 */ private void playSound(byte[] data) { if (data.length>0) line.write(data, 0, data.length); } 下面是drain()的代碼: /* * 該方法清理聲音通道 */ private void drain() { if (line!=null) line.drain(); try {Thread.sleep(100);} catch (Exception e) {} }
現在回過頭來看sayPhoneWord(),這里還有一個方法我們沒有分析,即getSound()方法。 getSound()方法從一個au文件以位元組數據的形式讀入預先錄制的聲音樣本。要了解讀取數據、轉換音頻格式、初始化聲音輸出行(SouceDataLine)以及構造位元組數據的詳細過程,請參考下面代碼中的注釋: /* * 該方法從文件讀取一個音素, * 並把它轉換成byte數組 */ private byte[] getSound(String fileName) { try { URL url=Talker.class.getResource(fileName); AudioInputStream stream = AudioSystem.getAudioInputStream(url); AudioFormat format = stream.getFormat(); // 把一個ALAW/ULAW聲音轉換成PCM以便回放 if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW)) { AudioFormat tmpFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), format.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true); stream = AudioSystem.getAudioInputStream(tmpFormat, stream); format = tmpFormat; } DataLine.Info info = new DataLine.Info( Clip.class, format, ((int) stream.getFrameLength() * format.getFrameSize())); if (line==null) { // 輸出線還沒有實例化 // 是否能夠找到合適的輸出線類型? DataLine.Info outInfo = new DataLine.Info(SourceDataLine.class, format); if (!AudioSystem.isLineSupported(outInfo)) { System.out.println("不支持匹配" + outInfo + "的輸出線"); throw new Exception("不支持匹配" + outInfo + "的輸出線"); } // 打開輸出線 line = (SourceDataLine) AudioSystem.getLine(outInfo); line.open(format, 50000); line.start(); } int frameSizeInBytes = format.getFrameSize(); int bufferLengthInFrames = line.getBufferSize() / 8; int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes; byte[] data=new byte[bufferLengthInBytes]; // 讀取位元組數據,並計數 int numBytesRead = 0; if ((numBytesRead = stream.read(data)) != -1) { int numBytesRemaining = numBytesRead; } // 把位元組數據切割成合適的大小 byte[] newData=new byte[numBytesRead]; for (int i=0; i newData[i]=data[i]; return newData; } catch (Exception e) { return new byte[0]; } } 這就是全部的代碼,包括注釋在內,一個大約150行代碼的語音合成器。
三、文本-語音轉換 以語音元素的格式指定待朗讀的單詞似乎過於復雜,如果要構造一個能夠朗讀文本(比如Web頁面或Email)的應用,我們希望能夠直接指定原始的文本。 深入分析這個問題之後,我在本文後面的ZIP文件中提供了一個試驗性的文本-語音轉換類。運行這個類,它將顯示出分析結果。文本-語音轉換類可以從命令行執行,如下所示: java com.lotontech.speech.Converter "hello there" 輸出結果類如: hello -> h|e|l|oo there -> dth|aer 如果運行下面這個命令: java com.lotontech.speech.Converter "I like to read JavaWorld" 則輸出結果為: i -> ii like -> l|ii|k to -> t|ouu read -> r|ee|a|d java -> j|a|v|a world -> w|err|l|d 這個轉換類是如何工作的呢?實際上,我的方法相當簡單,轉換過程就是以一定的次序應用一組文本替換規則。例如對於單詞「ant」、「want」、「wanted」、「unwanted」和「unique」,則我們想要應用的替換規則可能依次為: 用「|y|ou|n|ee|k|」替換「*unique*」 用「|w|o|n|t|」替換「*want*」 用「|a|」替換「*a*」 用「|e|」替換「*e*」 用「|d|」替換「*d*」 用「|n|」替換「*n*」 用「|u|」替換「*u*」 用「|t|」替換「*t*」 對於「unwanted」,輸出序列為: unwanted un[|w|o|n|t|]ed (規則2) [|u|][|n|][|w|o|n|t|][|e|][|d|] (規則4、5、6、7) u|n|w|o|n|t|e|d (刪除多餘的符之後) 你將看到包含字母「wont」的單詞和包含字母「ant」的單詞以不同的方式發音,還將看到在特例規則的作用下,「unique」作為一個完整單詞優先於其他規則,從而「unique」這個單詞讀作「y|ou...」而不是「u|n...」。

E. java使用freeTTS,怎麼能讓機器輸出中文語言

FreeTTS可以輸出中文語言過程:
①導入Java 語音API包
②為語音合成器聲明實例變數
③語音合成器的初始化
初始化是FreeTTS應用中關鍵的部分。首先需要建立一個SynthesizerModeDesc 對象,該對象用於指明語音合成器的屬性,包括語音引擎的的名稱、語音引擎的操作模式、支持的語言、語音引擎的運行狀態以及其發音能力等。
④創建語音合成器
創建語言合成器時需要用到Cen t ral 類, 其作用是提供用來訪問所有語音輸入和輸出的能力, 同時也可以定為語言引擎, 根據描述符所定義的屬性集合選擇匹配的引擎, 從而創建語音識別器和語音合成器。語音合成器的創建需使用Central類的createSynthesizer方法,該方法接受一個SynthesizerModeDesc描述符並返回同描述符中所指定屬性相匹配的一個Synthesizer對象,用以實現語音合成。
⑤准備用於朗讀的Synthesizer 對象
該部分通過Synthesizer對象的allocate和resume方法分配語音引擎所需要的資源並取得可用於朗讀的語音合成器。實現較為簡單:speechSynthesizer1allocate();speechSynthesizer1resume();
⑥設置Syn thesizer 對象的屬性
利用getSynthesizerProperties 方法可以獲得Synthesizer對象的屬性,其返回值是與語音合成器相關聯的SynthesizerProperties對象,該對象包含語音合成器的多種屬性, 每種屬性可以通過setProperties方法設置。例如: setSpeakingRate方法可設置speakingRate屬性,實現每分鍾朗讀單詞速率的控制。
⑦事件處理程序設計
speak ingRate 屬性, 實現每分鍾朗讀單詞速率的控制。完成應用程序界面中JButton「讀出號碼」的事件程序設計, 首先通過JComboBox(選擇人名的下拉列表)取得人名(namesArray)的一個索引,該索引與電話號碼索引(numbersArray)保持對應,然後調用Synthesizer對象speakingPlainText方法朗讀整理後的電話號碼字元串。

F. 如何使用文本語音開發包實現語音朗讀功能java方法

有支持Java的中文TTS嗎?android上倒是有個手說TTS,可以搜索到。

我就知道freeTTS支持英文的。

G. JAVA使用Sapi.SpVoice完成語音朗讀,如何選擇語音庫

做語音的話,應該聽說過訊飛吧,可以去了解下訊飛的API

H. 我的手機聯想的P629沒有語音朗讀功能,支持JAVA有沒有JAVA的語音朗讀軟體

沒有語音,不過好像可以安

I. 用java 實現文本語音朗讀

使用這個即可,採納即可。

閱讀全文

與java語音朗讀相關的資料

熱點內容
hpc編譯器論文 瀏覽:813
javac編譯子目錄下所有文件 瀏覽:429
卡友幫幫團是什麼app 瀏覽:241
vnc啟動命令 瀏覽:373
哺乳十電影 瀏覽:629
貴州java編譯器 瀏覽:645
歐美電影免費看平台 瀏覽:286
台灣紅羊影視作品有哪些 瀏覽:906
農行app上怎麼查詢卡號 瀏覽:891
浩天酒道館網是什麼app 瀏覽:212
永久不收費的電影網站 瀏覽:120
兒女傳奇全集目錄 瀏覽:522
文學評論pdf 瀏覽:410
linux源代碼導讀 瀏覽:702
百戰程序員6000集下載 瀏覽:146
蘋果和安卓手機之間怎麼克隆 瀏覽:465
模糊聚類演算法研究 瀏覽:108
寶德伺服器硬碟亮紅燈如何解決 瀏覽:696
androidlibgdx下載 瀏覽:409
聯盟pdf下載 瀏覽:793