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

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

JAVA聲音技術

2019-11-18 13:27:52
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枣庄市| 长兴县| 普陀区| 武安市| 溆浦县| 蓬安县| 阿拉善右旗| 乌兰县| 仪陇县| 东乡| 乳山市| 宕昌县| 阿拉善盟| 海南省| 麦盖提县| 常山县| 龙井市| 原阳县| 泗洪县| 苍南县| 盐亭县| 南和县| 衡阳县| 鄱阳县| 吉木萨尔县| 海晏县| 鄂托克前旗| 龙江县| 松江区| 湘潭县| 香格里拉县| 抚远县| 肇东市| 宕昌县| 大姚县| 沅陵县| 思茅市| 林甸县| 分宜县| 泉州市| 云阳县|