聲音可以創造意境
觸發遐想
當與虛擬圖像相結合時
更加可以讓整個世界充滿幻覺
聲音是多媒體技術的基礎
這就是Sun公司的JAVA媒體技術開發小組忙於准備Java Sound
API並將其包含於下一版本的JAVA開發工具庫中的原因
在JAVA
平台出現之前
JAVA語言只能處理電話音質的聲音
以單聲道
KHZ的采樣頻率存儲為μ
law AU文件
JAVA
平台增加了對AIFF
WAV以及三種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文件能存儲各種格式包括μ
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類型
文件
包含僅僅一個序列
所有相關的樂器部分被包含在同一個邏輯
磁道
上
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 Robertson
Beatnik簡介
在
年代初之前
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()的調用
下列代碼片斷舉例說明了直接播放 hello
au的方法
AU文件與小應用程序位於相同文件夾或目錄
play(getCodeBase()
hello
au
);
play()一旦被調用立刻開始恢復和播放聲音
如果聲音文件不能被查找
將不會有出錯信息
僅僅是沉默
啟動和停止聲音文件
或循環播放
你必須用 applet的 getAudioClip方法把它裝載進入 AudioClip對象
類似上面play()方法的參數
getAudioClip方法要用一個或兩個參數
當作播放的指示
第一個或唯一的一個參數是 URL參數
用來指示聲音文件的位置
第二參數是文件夾路徑指針
下列代碼行舉例說明加載聲音文件進入剪貼對象:
AudioClip co = getAudioClip(getCodeBase()
horns
wav
);
getAudioClip()方法僅僅能被applet內調用
隨著JAVA
的引入
應用程序也能用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) {
}
}
注意
在許多JAVA
技術書籍中
mouseDown()方法確實是JAVA
事件模型的一部分
使用該方法會有一定的危險
因為該方法在將來可能不會被支持
在JAVA
平台下將MouseListener與mousePressed結合使用是優先的選擇
API
質的飛躍
注意
下列備注是以JAVA API的早期版本
為基礎的
雖然目前這裡討論的大多數對象和概念與過去保持一致
但由於該API版本已經終止
出現某些改變的可能是存在的
JAVA聲音
API為JAVA平台定義了一整套的基本的底層音頻處理功能
它提供如下接口為:
音頻捕獲和播放
IDI合成及序列化
這兩個主要的功能模塊在各自的程序包中提供
dia
sound
sampled
該程序包明確地說明了捕獲
混合以及回播數字采樣音頻的界面
dia
sound
MIDI
該程序包提供MIDI合成
序列化以
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25377.html