JAVA的聲音處理方法 (轉自伊氏女人) | |
作者:蝙蝠vs墮落 編輯:violet JAVA的聲音處理 數字音頻格式有很多種,其質量與採樣頻率和採樣精度兩個參數有關。頻率的表示單位爲赫茲〔Hz〕,它表示每秒採樣次數。採樣頻率越高,音質就越好。採樣精度爲每次採樣所存儲的數據數量,它決定每個數字信號所能夠表示的離散振幅的數量。存儲每個樣本的數據越多,音質就越好。但是高品質的聲音需要佔用大量的內存和磁盤空間。考慮到網絡帶寬,在Internet連接上傳輸就需要花費很長的時間。對於Applet來說,保證聲音文件的最小化是極爲重要的。 Java能夠支持以下四種聲音格式: ◆AU ◆AIFF ◆WAVE ◆MIDI 第一種聲音格式AU爲以前的Java 1.1版本支持的唯一的聲音格式。採樣頻率爲8000赫茲,採樣精度爲8位。AIFF和WAVE與AU格式一樣,都用來表示數字化的聲音。其中,WAVE格式提供了更寬範圍的音質。MIDI格式專用於音樂,並且以音符與樂器而不是數字化的聲音來描述聲音的。 關於聲音的創建:聲音關鍵工具爲Windows9X中的標準應用程序—錄音機。錄製的格式爲WAVE。另外還有很多專業水準的應用程序,採樣和編輯數字化的聲音,及格式的轉換。 資源需求: ■ 硬件資源需求: ⑴聲卡 ⑵音箱 #如需要錄製聲音,這還需麥克風。 ■ 軟件資源需求: ⑴windows9X操作系統 ⑵網絡瀏覽器 ⑶Java插件/運行時間環境 處理方案一 JAVA2開始,爪哇語言能夠支持上述四種聲音格式。簡單的方法爲在java中通過Applet類的AudioClip()接口來裝載聲音。該接口風鑽了有關聲音片斷的常用方法,具有對播放聲音片斷的最小支持。 該接口定義瞭如下方法: ■ play() 語法:void play() 功能:開始播放聲音片斷。 不論聲音片斷是否已經在播放,都從頭播放。播放一遍但不重複。 ■ loop() 語法:void loop() 功能:循環播放聲音片斷。 調用該方法是不論聲音片斷是否已在播放,都從頭開始播放。 ■ stop() 語法:void stop() 功能:停止播放聲音片斷。 AudioClip接口可以通過getAudioClip()及getCodeBase()方法來獲取聲音片斷及 URL地址。可以利用此方法在WEB頁中播放指定的聲音片斷。 #需求:基於JDK1.2以上版本的開發環境。如果只播放AU格式的聲音文件,JDK1 .1就可。 附:soundtest.html源代碼 《HTML》 《HEAD》 《TITLE》 HTML Test Page 《/TITLE》 《/HEAD》 《BODY》 《APPLET CODEBASE = "" CODE = "test.class" NAME = "TestApplet" WID TH = 400 HEIGHT = 200 HSPACE = 0 VSPACE = 0 ALIGN = mi ddle》 《PARAM NAME = "clip" VALUE = "sound.AU"》 《/APPLET》 《/BODY》 《/HTML》 附:test,java源代碼 package SoundTest; import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; import java.net.*; public class test extends JApplet { boolean isStandalone = false; String sound; JButton jButtonPlay = new JButton(); JButton jButtonLoop = new JButton(); JButton jButtonStop = new JButton(); JLabel jLabel1 = new JLabel(); AudioClip clip; //Get a parameter value public String getParameter(String key, String def) { return isStandalone ? System.getProperty(key, def) : (getParameter(key) != null ? getParameter(key) : def); } //Construct the applet public test() { } //Initialize the applet public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { jButtonPlay.setText("Play"); jButtonPlay.setBounds(new Rectangle(50, 85, 80, 40)); jButtonPlay.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButtonPlay_mouseClicked(e); } }); this.setSize(new Dimension(400,200)); this.getContentPane().setLayout(null); jButtonLoop.setText("Loop"); jButtonLoop.setBounds(new Rectangle(150, 85, 80, 40)); jButtonLoop.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButtonLoop_mouseClicked(e); } }); jButtonStop.setText("Stop"); jButtonStop.setBounds(new Rectangle(250, 85, 80, 40)); jButtonStop.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButtonStop_mouseClicked(e); } }); jLabel1.setText("Sound Test Demo"); jLabel1.setBounds(new Rectangle(109, 28, 186, 28)); this.getContentPane().add(jButtonPlay, null); this.getContentPane().add(jButtonStop, null); this.getContentPane().add(jButtonLoop, null); this.getContentPane().add(jLabel1, null); try { sound = this.getParameter("clip", "sound.AU"); } catch (Exce ption e) { e.printStackTrace(); } if(sound!=null){ try{ clip=JApplet.newAudioClip (new URL(getCodeBase(),sound)); } catch(MalformedURLException e){ System.out.println ("Bad URL"); } } } //Get Applet information public String getAppletInfo() { return "Applet Information"; } //Get parameter info public String[][] getParameterInfo() { String[][] pinfo = { {"clip", "String", "sound.AU"}, }; return pinfo; } void jButtonPlay_mouseClicked(MouseEvent e) { clip.play(); } void jButtonLoop_mouseClicked(MouseEvent e) { clip.loop(); } void jButtonStop_mouseClicked(MouseEvent e) { clip.stop(); } } 處理方案二 利用JAVA媒體框架中的Sound API來處理聲音片斷。Sound API 被包含在SUN公司的JAVA媒體框架中,也包含在JDK1.3版本中。編譯源代碼需要支持JDK1.3的開發環境和運行時間環境。 可以利用Sound API在網頁中加入Applet的方式達到要求。但瀏覽器需要通過Java插件或運行時間環境的支持。 Sound API主要包括以下四部分: Packages javax.sound.midi 提供MIDI (Musical Instrument Digital Interface)的I/O、 序列、合成的接口和類。 javax.sound.midi.spi Supplies interfaces for service providers to impl ement when offering new MIDI devices, MIDI file readers and writers, o r sound bank readers. javax.sound.sampled 爲採樣數字音頻的捕獲、處理、重放提供接口和類。 javax.sound.sampled.spi Supplies abstract classes for service provider s to subclass when offering new audio devices, sound file readers and writers, or audio format converters. 處理方案三 利用JAVA 3D中的sound類。該類似聲音資源的抽象定義。每一個具體的聲音對象都可以應用sound的方法。 Sound類的類關係如下: java.lang.Object +-javax.media.j3d.SceneGraphObject +-javax.media.j3d.Node +-javax.media.j3d.Leaf +-javax.media.j3d.Sound sound類的子類有: ⒈BackgroundSound ⒉PointSound ⒊ConeSound 使用上述三種聲音的步驟如下: ⒈定義並生成一個MediaContainer對象,同時提供對象所需要的聲音文件,通常 要單獨設置一個存放AU/WAV聲音文件的目錄。 ⒉定義一個BackgroundSound/ PointSound/ ConeSound對象,根據需要,設置聲 音的是否循環、強度大小等參數,設置它的作用範圍並setEnable用使其開始作用。 ⒊根據具體的對象設置座標系。 #JAVA 3D應用程序只能播放au/wav格式的聲音文件。不能播放midi文件。 |
JAVA的聲音處理方法 (轉自伊氏女人)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.