熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

JAVA聲音技術

2022-06-13   來源: Javascript 

  聲音可以創造意境觸發遐想當與虛擬圖像相結合時更加可以讓整個世界充滿幻覺聲音是多媒體技術的基礎這就是Sun公司的JAVA媒體技術開發小組忙於准備Java Sound API並將其包含於下一版本的JAVA開發工具庫中的原因
  
  在JAVA平台出現之前JAVA語言只能處理電話音質的聲音以單聲道KHZ的采樣頻率存儲為μlaw AU文件JAVA平台增加了對AIFFWAV以及三種MIDI文件類型的支持所支持的三種MIDI文件格式為MIDI文件類型MIDI文件類型以及RMF
  
  應用程序接口API版提供了一個易於使用的工具集使程序員可以訪問底層的合成與演奏引擎從而擴展了JAVA聲音的應用其中兩個重要的領域是創建數字化音頻以及樂器指令數字化接口MIDI由於提供了大量的底層支持功能所以程序員能輸入輸出聲音控制MIDI設備並能查詢系統運作情況
  
  聲音文件類型簡介
  
  主要的聲音文件類型如下
  
  AU (擴展名為AU或SND)適用於短的聲音文件為Solaris和下一代機器的通用文件格式也是JAVA平台的標准的音頻格式AU類型文件使用的三種典型音頻格式為: 位μlaw類型(通常采樣頻率為kHz) 位線性類型以及位線性類型
  WAV (擴展名為WAV)由 Microsoft和 IBM共同開發對WAV的支持已經被加進Windows 並且被延伸到Windows WAV文件能存儲各種格式包括μlawalaw和 PCM (線性)數據他們幾乎能被所有支持聲音的Windows應用程序播放
  
  AIFF (擴展名為AIF或IEF)音頻互換文件格式是為Macintosh計算機和Silicon Graphics (SGI)計算機所共用的標准音頻文件格式AIFF和 AIFFC幾乎是相同的除了後者支持例如μlaw和 IMA ADPCM類型的壓縮
  
  MIDI (擴展名為MID)樂器數字接口MIDI是為音樂制造業所認可的標准主要用於控制諸如合成器和聲卡之類的設備
  
  MIDI文件不包含數字音頻采樣而是包括一系列指令這些指令控制把來自不同樂器上的音符序列合成樂曲一些MIDI文件包含附加指令來為各種合成設置進行編程
  
  大多數合成器支持MIDI標准所以在一個合成器上制作的音樂能夠在另一個上播放 有 MIDI接口的計算機能操縱 MIDI數據以產生新音樂或音響效果例如一個完整的音樂作品可以通過一個軟件驅動的命令轉換成全新的形式
  
  JAVA聲音引擎支持兩種MIDI文件類型
  
  MIDI類型文件包含僅僅一個序列所有相關的樂器部分被包含在同一個邏輯 磁道
  
  MIDI類型文件包含多重的 磁道使得不同的樂器被邏輯地分開從而使對聲音的操作和重組更加容易
  
  RMF (擴展名為RMF)混合音樂格式是由Beatnik設計出來的混合文件類型通過交互式設定將MIDI和音頻采樣封裝在一起RMF好比是一個所有音樂相關文件的容器RMF也包含對有關版權的詳細文件說明的支持RMF文件可以包含多個由不同藝術家創作的存儲為MIDI類型或音頻采樣類型的作品每個都關聯著相關的版權信息
  
  對聲音引擎的選擇
  
  在SUN的JAVA媒體開發組試圖找到一種方法以增強聲音的處理能力並為將來提供一個堅實的平台根據JAVA媒體開發組經理Michael Bundschuh所說
  我們想要非常高質量的播放引擎以處理所有的從八位μlaw級直到 CD質量聲音的每一件操作 我們希望輕松跨越所有平台諸如Solaris平台 Windows Mac以及其他我們也想要高度發展了的能夠跨越不同平台的MIDI能力為上述目的合理的選擇是Beatnik的音頻引擎(從前是Headspace)
  SUN取得了Beatnik的音頻引擎使用許可把它當作JAVA聲音應用程序接口API的基礎
  
  Thomas Dolby RobertsonBeatnik簡介
  
  在年代初之前Thomas Dolby Robertson的職業完全在音樂方面推出的她用科學照亮了我是一部早期的MTV巨作整個年代他都在不斷地作曲和錄音使用一種非結構化音樂制作軟件但是在 通過一次為Guggenheim博物館演示虛擬現實的合作他開始思考能否做一些提高音樂制作能力的工作
  
  我當時正伏在 C程序員的肩上並且我突然認識到為做記錄做了大量的工作可是沒有為演奏時的交互做任何事情有了這樣的想法Robertson在年建立了Headspace雇用月光作曲組來幫助實現他的觀點Headspace於年成為公司現在被稱為Beatnik
  
  JAVA聲音音頻引擎
  
  JAVA聲音引擎為多媒體創建同時考慮了游戲設計和發布WEB內容用標准的 MIDI文件RMF文件並且/或來自任何源的采樣該引擎將播放音樂或制造音響效果同時盡可能少用CPU它提供完全的播放控制具有混合音響的能力並可實時地回應用戶的輸入
  
  JAVA聲音引擎是軟件 MIDI合成器采樣播放設備以及位立體混聲器它支持混合直到位的立體MIDI聲音和音頻采樣它直接支持MIDI類型和類型文件以及從位設備到位樂器的波表合成該引擎支持所有通用的 MIDI控制器並且包含象回聲處理 LFO (控制過濾器或立體聲設備)之類的特性以及ADSR信封 (播放時整形采樣)
  
  即使用上所有的功能JAVA聲音引擎在一個Mhz的奔騰計算機上也占用不超過%的CPU時間它還能通過有選擇地禁用不需要的特性使其變得更加高效一些另外它發布了存儲在壓縮的RMF音樂文件中的豐富的內容Thomas Dolby Robertson的她用科學照亮了我一首秒的歌曲如存儲為CD音質的文件足足占用M字節空間如果以RMF格式存儲只需大約 KB:的減少同時絲毫不減音質
  為更多有關Beatnik的信息請看Beatnik的WEB站點
  
  JAVA平台聲音的簡要歷史
  
  在JDK x及JDK x下 AudioClip接口提供下列機能
  
  l AudioClip接口
  
  播放
  循環
  停止
  
  恢復和播放聲音最簡單的方法是通過Applet類的play()方法調用play()方法有如下二種方式:
  
  play()帶有一個參數一個 URL對象裝載並演奏儲存在 URL處的聲音片斷
  
  play()帶有二個參數基本 URL和文件夾路徑名裝載並演奏聲音文件第一參數經常是對getCodeBase()或 getDocumentBase()的調用
  
  下列代碼片斷舉例說明了直接播放 helloau的方法AU文件與小應用程序位於相同文件夾或目錄
  
  play(getCodeBase() helloau);
  
  play()一旦被調用立刻開始恢復和播放聲音如果聲音文件不能被查找將不會有出錯信息僅僅是沉默
  啟動和停止聲音文件或循環播放你必須用 applet的 getAudioClip方法把它裝載進入 AudioClip對象類似上面play()方法的參數getAudioClip方法要用一個或兩個參數當作播放的指示 第一個或唯一的一個參數是 URL參數用來指示聲音文件的位置第二參數是文件夾路徑指針
  
  下列代碼行舉例說明加載聲音文件進入剪貼對象:
  
  AudioClip co = getAudioClip(getCodeBase() hornswav);
  
  getAudioClip()方法僅僅能被applet內調用隨著JAVA的引入應用程序也能用Applet類的newAudioClip方法裝入聲音文件前一例子可以改寫如下以用於Java應用程序:
  
  AudioClip co = newAudioClip(hornswav);
  
  在你已創建 AudioClip對象之後你能用該對象調用play()loop()以及stop()方法如果 getAudioClip或 newAudioClip方法不能找到指定的聲音文件 AudioClip對象的值將是空的試著播放空對象會導致出錯所以標准的過程首先是對該條件進行檢測
  接下來是一個完整的程序設計示例該程序將產生一個applet當鼠標在該小應用程序applet范圍內按下時會播放 flute+hrn+mrmbaau音樂樣本此AU示例文件與applet在相同目錄或文件夾下的
  
  import javaapplet*;
  import javaawtevent*;
  
  public class PlayAudio extends Applet
  implements MouseListener {
  AudioClip audio;
  
  public void init() {
  audio = getAudioClip(getDocumentBase()
  flute+hrn+mrmbaau);
  addMouseListener(this);
  }
  
  public void mousePressed(MouseEvent evt) {
  if (audio != null) audioplay();
  }
  
  public void mouseEntered (MouseEvent me) {
  }
  
  public void mouseExited (MouseEvent me) {
  }
  
  public void mouseClicked (MouseEvent me) {
  }
  
  public void mouseReleased(MouseEvent me) {
  }
  
  }
  
  注意 在許多JAVA技術書籍中mouseDown()方法確實是JAVA 事件模型的一部分使用該方法會有一定的危險因為該方法在將來可能不會被支持在JAVA平台下將MouseListener與mousePressed結合使用是優先的選擇
  
  API 質的飛躍
  
  注意下列備注是以JAVA API的早期版本為基礎的雖然目前這裡討論的大多數對象和概念與過去保持一致但由於該API版本已經終止出現某些改變的可能是存在的
  
  JAVA聲音 API為JAVA平台定義了一整套的基本的底層音頻處理功能它提供如下接口為:
  
  音頻捕獲和播放
  
  IDI合成及序列化
  
  這兩個主要的功能模塊在各自的程序包中提供
  
  diasoundsampled該程序包明確地說明了捕獲混合以及回播數字采樣音頻的界面
  
  diasoundMIDI該程序包提供MIDI合成序列化以
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25377.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.