Java應用程式中的聲音播放

來源:互聯網
上載者:User

標籤:

聲音可以創造意境,觸發遐想,當與虛擬映像相結合時,更加可以讓整個世界充滿幻覺,聲音是多媒體技術的基礎。

播放聲音是Java對多媒體的支援一個重要部分,它支援的音效檔類型主要有:

AU - (副檔名為AU或SND)適用於短的音效檔。

WAV - (副檔名為WAV)由 Microsoft和 IBM共同開發,幾乎能被所有支援聲音的Windows應用程式播放。

AIFF - (副檔名為AIF或IEF)音頻互換檔案格式是為Macintosh電腦和Silicon Graphics (SGI)電腦所共用的標準音頻檔案格式。

MIDI - (副檔名為MID)樂器數位介面MIDI是為音樂製造業所認可的標準,主要用於控制諸如合成器和音效卡之類的裝置。

 

那麼在Java應用程式中,如何?音效檔的播放呢?

sun公司為應用程式中的聲音支援提供了一個Java包 – sun.audio,在這個包下面提供了大部分所需要的聲音處理類。

下面我們來做個播放測試:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import sun.audio.*;

/**
* 測試聲音播放
*
* @author
*
*/
public class MusicDemo {

public static void main(String[] args) throws Exception {
// 建立音樂檔案輸入資料流對象
InputStream in = new FileInputStream("musics/flourish.mid");
// 建立音頻流對象
final AudioStream audioStream = new AudioStream(in);
new Thread(new Runnable() {
@Override
public void run() {
// 使用音頻播放器播放聲音
AudioPlayer.player.start(audioStream);
}
}).start();

Thread.sleep(3000);
// 停止聲音播放
AudioPlayer.player.stop(audioStream);
}
}

開啟擴音器,你就可以聽到聲音了,播放3秒後停止聲音的播放。

注意:

我們在Eclipse中進行代碼編寫時,可能會出現類似 “The type ‘AudioStream’ is not API” 的錯誤提示。在Eclipse中,我們可以查看到AudioStream類位於rt.jar包中的sun.audio包中。

為什麼Eclipse會提示我們 “The type ‘AudioStream’ is not API” 這鐘錯誤呢,實際上這是Eclipse的設定導致的問題。

要解決這種錯誤,我們只需要將Eclipse的設定稍微修改一下即可:在preference->java->complier->errors/warning->deprecated and restricted API 中把 Forbidden reference 的Error改成warning 即可。

根本原因如下:

J2SE中的類大致可以劃分為以下的各個包:java.*,javax.*,org.*,sun.*。除了“sun”包,其它各個包都是Java平台的標準實現,並且今後也將被繼續支援。一般說來,“sun”之類的包並不包含在Java平台的標準中,它與作業系統相關,在不同的作業系統(如Solaris,Windows,Linux,Mac等等)中的實現也各不相同,並且可能隨著J2SE版本不定期變化。因此,直接調用“sun”包的程式碼並不是100%的Java實現。

也就是說:java.*,javax.*,org.*包是作為J2SE的API公開介面的一部分,如果程式直接調用這些包中的API,那麼程式是可以運行在所有Java平台上,而與作業系統無關;但sun.*包並不是API公開介面的一部分,調用“sun”包的程式並不能確保工作在所有Java平台上,事實上,這樣的程式可能並不能工作在今後的Java平台上。

正因為如此,sun.*包中的類並沒有提供API文檔。平台無關性是Java語言最大的優勢之一,此外,SUN和Java許可證確保維持了今後API的向上相容性(以後修改的那些有嚴重bug的代碼除外)。這種相容性意味著你寫好的程式編譯成的class檔案仍然可以工作在將來的版本當中。

每家實現Java平台的廠商都可以使用他們自己的方式。sun.*包中的類是SUN 對Java平台的實現方式,它們工作在Java2 SDK的下層,這些類未必被其它Java平台開發商支援。比如你的Java程式如果調用了一個名為“sun.package.Foo”的類,將有可能產生“ClassNotFoundError”的錯誤,同時你也將失去利用Java的一個主要的優點。

從技術上講,並不能防止你的程式調用sun.*包中的類。在版本的變遷當中,這些類可能會被刪除或轉移到其它包路徑下,而且它的介面(包括名稱、標籤等)也很有可能發生變化,(根據SUN的觀點,我們應當能夠通過對sun.*包的修改來提高Java平台的效能。)在這種情況下,即便你希望程式僅僅運行在SUN的實現平台下,你仍將承受新的版本給你的系統帶來破壞的風險。總之,編寫依賴於sun.*包的Java程式是不安全的,他們將變得無法移植,無法被很好地支援。

Java應用程式中的聲音播放

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.