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

Java Applet 播放聲音檔案:AudioClip API 完整指南

     編輯:Java 相關知識

核心 API:java.applet.AudioClip

AudioClip 是 Applet 播放聲音的核心介面,定義於 java.applet 套件。主要方法:

取得 AudioClip 實例

透過 Applet 類別的方法:

  • getAudioClip(URL url)
  • getAudioClip(URL url, String name)

getCodeBase() 取得 Applet 程式碼基底 URL,配合相對路徑載入聲音檔。

支援格式與轉檔建議

  • Java 僅原生支援 .au (Sun AU 格式,8-bit μ-law, 8kHz 單聲道)
  • Windows 常用 .wav,需轉檔工具 (如 sox、GoldWave、Audacity) 轉為 .au
  • 轉檔指令範例:sox input.wav -c 1 -r 8000 -u -b output.au

完整範例:循環播放背景音樂

SoundDemo.java

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

public class SoundDemo extends Applet {
    public void paint(Graphics g) {
        // 載入聲音檔 (相對於 CodeBase)
        AudioClip audioClip = getAudioClip(getCodeBase(), "Sample.au");
        g.drawString("Sound Demo!", 5, 15);
        audioClip.loop(); // 循環播放
    }
}

SoundDemo.html

<HTML>
<TITLE>SoundDemo Applet</TITLE>
<APPLET CODE="SoundDemo.class" WIDTH=300 HEIGHT=200>
</APPLET>
</HTML>

生命週期管理最佳實踐

在 paint() 中載入播放有缺陷:每次重繪重新載入。正確做法:

public class SoundDemo extends Applet {
    private AudioClip backgroundMusic;

    public void init() {
        backgroundMusic = getAudioClip(getCodeBase(), "background.au");
    }

    public void start() {
        if (backgroundMusic != null) backgroundMusic.loop();
    }

    public void stop() {
        if (backgroundMusic != null) backgroundMusic.stop();
    }

    public void destroy() {
        // Applet 銷毀時資源會自動釋放
    }

    public void paint(Graphics g) {
        g.drawString("Sound Demo - Music Playing", 5, 15);
    }
}

進階控制:播放音效 (非循環)

private AudioClip clickSound;

public void init() {
    clickSound = getAudioClip(getCodeBase(), "click.au");
}

public void playClick() {
    if (clickSound != null) clickSound.play(); // 非阻塞、可疊加
}

常見問題與解決

方法用途
play()播放一次
loop()循環播放
stop()停止播放
問題原因解決
無聲音/報錯檔案非 .au 格式、路徑錯誤、檔案損壞確認副檔名 .au、用 sox 轉檔、檢查 getCodeBase() 路徑
循環播放無法停止未在 stop()/destroy() 呼叫 stop()生命週期方法中正確管理
多個音效疊加衝突單一 AudioClip 不支援混音每個音效用獨立 AudioClip 實例
網路載入延遲大檔案下載慢預載入 (init)、壓縮檔案、考慮 MIDI 替代

現代替代方案 (Applet 已淘汰)

  • JavaFX:MediaPlayer/AudioClip 支援 MP3、WAV、AIFF 等現代格式
  • Java Sound API:javax.sound.sampled 低層級控制 (Clip、SourceDataLine、Mixer)
  • Web 端:HTML5 <audio>、Web Audio API
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved