老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

java代碼寫語音播放 java音頻播放

JAVA 實現音頻播放

這個程序只要寫對了音樂文件的URL地址,例如:new URL("file:/C:/tmp/1/Windows Ding.wav");

綏寧ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

就可以播放音樂,除了可以播放.wav格式的音樂,還可以播放.au格式的音樂。

另外,如果你不希望音樂循環播放,你可以去掉audio1.loop();這一語句。

import java.applet.AudioClip;

import java.net.MalformedURLException;

import java.net.URL;

import javax.swing.JFrame;

public class D extends JFrame{

D(){

setSize(200,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

URL codebase=null;

try {

codebase = new URL("file:/C:/tmp/1/Windows Ding.wav");

} catch (MalformedURLException e) {

e.printStackTrace();

}

AudioClip audio1=Applet.newAudioClip(codebase);

audio1.loop();

}

public static void main(String[] args) {

new D();

}

}

java關于播放聲音的代碼的解釋

playCycle(String s)這個是單曲重復播放;play(String s)這個是單曲播放。

/******* part one start *******/

//獲取媒體文件流

AudioInputStream ais = AudioSystem.getAudioInputStream(new File(fileurl));

//獲取文件格式

AudioFormat aif = ais.getFormat();

//這個類不知道是什么,沒用過,在這里應該是對媒體流處理的一個類

SourceDataLine sdl = null;

//這個貌似通過媒體格式,獲取媒體文件的信息

DataLine.Info info = new DataLine.Info(SourceDataLine.class,aif);

//通過媒體文件的信息初始化處理媒體文件的類

sdl = (SourceDataLine)AudioSystem.getLine(info);

//媒體工具類 打開媒體流

sdl.open(aif);

//媒體工具(播放器)開啟

sdl.start();

/******* part one end *******/

/******* part two start ********/

int nByte = 0;

byte[] buffer = new byte[128];

//媒體工具類(播放器類)對媒體流進行寫入處理,此時應該會有音樂響起吧

while(nByte != -1){

nByte = ais.read(buffer,0,128);

if(nByte = 0){

int oByte = sdl.write(buffer, 0, nByte);

//System.out.println(oByte);

}

}

//媒體流結束,并關閉這個媒體工具類

sdl.stop();

/******* part two end********/

java如何實現播放mp3

簡單的實例,代碼如下,純粹JMF加載MP3并播放:

import javax.media.*;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class PlayerMusic implements ControllerListener {// ControllerListener

// 控制事件

private Player player;

private boolean first, loop;

private String path;

private List mp3List;

private int mp3NO = 0;

PlayerMusic(List mp3List) {

this.mp3List = mp3List;

}

public void start() {

try {

player = Manager.createPlayer(new MediaLocator("file://" + mp3List.get(mp3NO)));

} catch (NoPlayerException ex) {

ex.printStackTrace();

System.out.println("不能播放文件");

return;

} catch (IOException ex) {

ex.printStackTrace();

return;

}

if (player == null) {

System.out.println("播放器為空");

return;

}

first = false;

player.addControllerListener(this);

// 提取媒體內容

player.prefetch();

}

public void controllerUpdate(ControllerEvent e) {

// 當媒體播放結束時,循環播放

if (e instanceof EndOfMediaEvent) {

mp3NO++;

if(mp3NOthis.mp3List.size()){

this.start();

}

return;

}

// 當預提取媒體的內容結束

if (e instanceof PrefetchCompleteEvent) {

player.start();

return;

}

// 當實例化后

if (e instanceof RealizeCompleteEvent) {

// pack(); //執行pack()操作

return;

}

}

public static void main(String[] args) {

List mp3List = new ArrayList();

mp3List.add("d://a.mp3");

mp3List.add("d://b.mp3");

mp3List.add("d://c.mp3");

PlayerMusic pm = new PlayerMusic(mp3List);

pm.start();

}

}

在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.length0) 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.length0) 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...”。

java代碼編寫播放音樂有點問題,播放不出來聲音

if (e.getSource()==btPlay) {

不可以使用==比較對象,要使用對象的equals方法對比


網站標題:java代碼寫語音播放 java音頻播放
本文URL:http://www.xueling.net.cn/article/doopghg.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 舌L子伦熟妇ΑV | 一区二区三区国产美女在线播放 | 久久亚洲精品小早川怜子 | 亚洲综合一区二区三区四区 | 亚洲欧美久久久 | 曰本一区二区 | 国产福利在线播放麻豆 | 国产亚洲精品久久久久久久 | 一区二区国产精品视频 | 欧美日本黄色 | 精品国产不卡一区二区三区 | 色老头永久免费视频 | 亚洲国产精品人人爽夜夜爽 | 久久久久免费看 | 国产96在线 | 男人操女人免费视频网站 | 一级片网页| 亚洲精品久久久蜜桃动漫 | 国产精品臀控福利在线观看 | 国产在线观看免费视频在线 | 99精品国产高清一区二区麻豆 | 久热精品在线播放 | 亚洲日韩精品无码专区 | 人妻少妇精品视中文字幕国语 | 欧美一级看片 | 北条麻妃中文 | 老太婆性杂交视频 | 蜜臀一区 | 91一区二区三区在线观看 | 国产1122在线视频 | 亚洲一区二区三区在线观看精品中文 | 日本一道本线一区免费 | 久久久久久综合岛国免费观看 | 国产成人精品影视 | 国产精品久久久久久久久亚洲美女 | 欧美一级毛片免费看 | 国产精品久久久久久999 | 国产精品无码久久久久久久久久 | 欧美在线观看网站 | 极品新婚夜少妇真紧 | 免费一区视频 |