首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 聲音技術入門:Applet 與 Application 中的音頻播放基礎

     編輯:Java 相關知識

Java 多媒體之聲:從 Applet 到獨立應用

Java 對聲音的支持經歷了從簡單到豐富的演變。早期僅支援 8kHz μ-law AU 格式,JDK 1.2+ 增加 AIFF、WAV、MIDI 多格式支援。本文梳理兩大核心場景的基礎用法。

場景一:Applet 中播放聲音

核心類:java.applet.AudioClip,提供三大方法:

  • play():播放一次
  • loop():循環播放
  • stop():停止播放

獲取 AudioClip 的兩種途徑

// 1. Applet 實例方法(僅 Applet 內可用)
AudioClip clip = getAudioClip(getCodeBase(), "sound.au");
// 或
AudioClip clip = getAudioClip(getDocumentBase(), "sound.au");

// 2. Java 2 新增靜態方法(Application 也可用)
AudioClip clip = Applet.newAudioClip(new URL("file:/path/sound.au"));

getCodeBase() 返回 Applet 所在 URL,getDocumentBase() 返回嵌入頁面 URL。

完整 Applet 範例

import java.applet.*;
import java.awt.event.*;

public class SoundApplet extends Applet implements MouseListener {
    AudioClip audio;

    public void init() {
        audio = getAudioClip(getDocumentBase(), "flute+hrn+mrmba.au");
        addMouseListener(this);
    }

    public void mousePressed(MouseEvent e) {
        if (audio != null) audio.play();  // 點擊播放
    }
    // 其他 MouseListener 方法留空...
}

注意:JDK 1.0 事件模型 mouseDown() 已棄用,請統一使用 MouseListener + mousePressed()。

場景二:Application (獨立應用) 中播放聲音

Application 無 AudioClip,Sun 提供 sun.audio 非標準包作為過渡方案:

import sun.audio.*;
import java.io.*;

public class SoundApp {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("sloop.au");
            AudioStream as = new AudioStream(fis);
            AudioPlayer.player.start(as);  // 全局單例播放器
            // AudioPlayer.player.stop(as); // 停止
        } catch (Exception e) { e.printStackTrace(); }
    }
}

核心類:

  • AudioStream:封裝 InputStream 的聲音流
  • AudioPlayer.player:全局播放器單例,start/stop 控制播放

場景三:Java Sound API (javax.sound.sampled) - 現代標準

JDK 1.3+ 引入標準化 javax.sound.sampled,功能遠超上述方案:

  • 精確控制:增益、聲像、混音、格式轉換
  • 支援捕獲:麥克風錄音、線路輸入
  • MIDI 完整支援:合成、序列、設備控制
  • 服務提供者介面 (SPI) 允許第三方擴展編解碼器、設備驅動

核心包結構:

javax.sound.sampled        // 數字音頻:Clip, SourceDataLine, TargetDataLine, Mixer, AudioSystem
javax.sound.midi           // MIDI:Sequencer, Synthesizer, Receiver, Transmitter, MidiSystem
javax.sound.sampled.spi    // 音頻 SPI
javax.sound.midi.spi       // MIDI SPI

格式支援對照表

格式擴展名特點支援版本
AU.au, .sndSun/Unix 標準,μ-law/PCMJDK 1.0+
WAV.wavMicrosoft/IBM,PCM 為主JDK 1.2+
AIFF.aif, .aiffMac/SGI 標準,支援壓縮JDK 1.2+
MIDI Type 0.mid單軌道,所有樂器合併JDK 1.2+
MIDI Type 1.mid多軌道,樂器分離JDK 1.2+
RMF.rmfBeatnik 混合格式,MIDI+採樣+版權Java Sound 1.0+

遷移建議

  1. 新專案:直接使用 javax.sound.sampled/midi,功能完整、標準化、長期維護。
  2. 舊代碼:AudioClip 簡單播放場景可保留;sun.audio 屬內部 API,務必遷移至標準 API。
  3. MP3 支援:標準庫不含 MP3 解碼器(授權原因),需引入 JLayer (javazoom) 或 JMF 擴展。

Java 聲音技術從「會發聲」走向「專業級音頻處理」,掌握標準 API 即掌握了跨平台多媒體開發的核心鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved