国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java實現音頻播放

2019-11-17 05:57:26
字體:
來源:轉載
供稿:網友

  桌面PC的性能日益提高,java虛擬機的優化技術也不斷獲得突破,這一切使得用Java處理實時信號成為可能。本文將通過設計和構造一個支持實時mp3、WAV和Ogg音頻格式解碼/回放的Java音樂播放器,闡述用JavaSound API編寫音頻處理程序的思路和一般過程。

  JavaSound是一個小巧的低層API,支持數字音頻和MIDI數據的記錄/回放。在JDK 1.3.0之前,JavaSound是一個標準的Java擴展API,但從Java 2的1.3.0版開始,JavaSound就被包含到JDK之中。由于Java有著跨平臺(操作系統、硬件平臺)的特點,基于JavaSound的音頻處理程序(包括本文的程序)能夠在任何實現了Java 1.3+的系統上運行,無需加裝任何支持軟件。

  一、JavaSound的體系結構

  當前JDK的JavaSound API隨同Java媒體框架(JMF,Java Media Framework)一起發布,主頁在java.sun.com/PRodUCts/java-media/jmf/,適合JDK 1.1以及更高的版本。除了JDK實現的JavaSound API之外,還有一個源代碼開放的JavaSound實現是Tritonus,主頁在http://www.tritonus.org/。

  圖一描述了JavaSound API的體系結構,虛線表示Sun的JavaSound標準定義的API調用。上面一根虛線表示我們編寫音頻處理程序要調用的API,JavaSound API包含在javax.sound.sampled和javax.sound.midi包中。兩根虛線之間的部分就是JavaSound API的具體實現。

 用Java實現音頻播放(圖一)
  圖一:JavaSound體系結構

  就象上面一根虛線表示的API具有統一標準一樣,在所有的JavaSound實現中,圖一下面一根虛線表示的SPI(服務提供者接口, Service Provider Interface)也是統一的。SPI的作用是以插件(Plug-In)的形式提供自定義的擴展模塊,我們只要提供與SPI兼容的插件擴展模塊,就可以在不改變API的情況下擴展音頻處理程序的能力。SPI包含在java.sound.sampled.spi和javax.sound.midi.spi包中。

  例如,假設有一個只能播放WAV文件的程序,我們只要增加一個支持MP3文件解碼的插件模塊,就可以在不改動播放程序的任何一行代碼的前提下,為這個播放程序添加播放MP3的能力。

二、JavaSound混頻原理

  圖二闡述了JavaSound的混頻器原理。在處理輸入音頻的應用中,對于來自各種音頻輸入端口的信號,例如麥克風、CD播放器、磁帶播放器,等等,我們可以在它們到達TargetDataLine之前,利用混頻器控制輸入混頻,最后在程序中通過TargetDataLine獲得數字化的音頻輸入流。

用Java實現音頻播放(圖二)


  圖二:JavaSound混頻器

  類似地,在處理輸出音頻的應用中,混頻器用來對一系列來自SourceDataLine的數據進行混頻處理,經處理后的信號可輸出到各種輸出端口,例如揚聲器、耳機等。SourceDataLine是一個可寫入音頻信號數字流的設備,例如,我們可以從一個WAV文件讀取內容寫入到SourceDataLine,然后再通過揚聲器輸出。

  輸入到混頻器的信號可以來源于剪輯。剪輯(Clip)是一個包含一段完整音頻數據流的設備,或者說,剪輯就是一個緩沖在內存中的完整音頻數據流。在一些要求反復播放音樂片段的場合,例如游戲的背景音樂,剪輯是很有用的。

  圖三描述了JavaSound API中一些常用的類、接口及其關系,所有圖三顯示的類、接口都通過Line這個基本接口統一起來。Line接口用來關閉/打開設備、注冊事件監聽器,以及提供一些用來調整聲音效果的對象,例如調整音量大小的對象。AudioSystem在JavaSound體系中起著一個工廠(Factory)類的作用,提供了一系列的靜態方法,我們通過這些靜態方法來獲取JavaSound系統默認配置的資源(所謂靜態方法,就是可以在不創建AudioSystem實例的情況下直接調用的方法)。

用Java實現音頻播放(圖三)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永和县| 昆明市| 香格里拉县| 宜黄县| 河池市| 维西| 卢氏县| 曲松县| 阳泉市| 宾川县| 伊春市| 玛多县| 武冈市| 旬阳县| 潍坊市| 万安县| 宝应县| 密山市| 聂拉木县| 英山县| 建德市| 绥宁县| 古浪县| 涟水县| 廉江市| 防城港市| 漠河县| 乌兰浩特市| 江山市| 凌源市| 巴彦淖尔市| 康保县| 富川| 唐山市| 松阳县| 博乐市| 阿拉尔市| 土默特右旗| 房山区| 延寿县| 常山县|