HTML5 的 <audio> 標籤讓瀏覽器原生支援音訊播放,不需要 Flash 或其他外掛。本文整理常用屬性、支援格式、媒體事件與進階控制方式。
基本用法
1
2
3
4
5
6
7
8
9
|
<!-- 最簡單的播放器(顯示瀏覽器預設控制列)-->
<audio src="music.mp3" controls></audio>
<!-- 多音源格式,瀏覽器會選擇第一個支援的格式 -->
<audio controls>
<source src="music.ogg" type="audio/ogg">
<source src="music.mp3" type="audio/mpeg">
<p>您的瀏覽器不支援 HTML5 audio 標籤。</p>
</audio>
|
常用屬性
| 屬性 |
說明 |
controls |
顯示瀏覽器預設控制列(播放、暫停、音量、進度條) |
autoplay |
頁面載入後自動播放(部分瀏覽器會封鎖,需搭配 muted) |
loop |
播放結束後自動重複播放 |
muted |
靜音模式,搭配 autoplay 可通過瀏覽器限制 |
preload |
控制預先載入行為(詳見下方) |
preload 屬性值
1
2
3
4
5
6
7
8
|
<!-- auto:頁面載入時預先下載整個音訊檔案 -->
<audio src="music.mp3" preload="auto"></audio>
<!-- metadata:只載入檔案基本資訊(長度、標題等),不下載音訊資料 -->
<audio src="music.mp3" preload="metadata"></audio>
<!-- none:頁面載入時不預先下載任何資料(節省流量)-->
<audio src="music.mp3" preload="none"></audio>
|
支援的音訊格式
| 格式 |
MIME Type |
瀏覽器支援 |
| MP3 |
audio/mpeg |
所有現代瀏覽器 |
| OGG Vorbis |
audio/ogg |
Firefox、Chrome(Safari 不支援) |
| WAV |
audio/wav |
所有現代瀏覽器(檔案較大) |
| AAC |
audio/aac |
Chrome、Safari、Edge |
| WebM |
audio/webm |
Chrome、Firefox |
建議:提供 MP3 + OGG 兩種格式,可覆蓋幾乎所有瀏覽器。
用 JavaScript 自訂播放器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<audio id="myAudio" src="music.mp3" preload="metadata"></audio>
<button id="playBtn">播放</button>
<button id="muteBtn">靜音</button>
<input type="range" id="volumeCtrl" min="0" max="1" step="0.1" value="1">
<span id="timeDisplay">0:00 / 0:00</span>
<script>
const audio = document.getElementById('myAudio');
const playBtn = document.getElementById('playBtn');
// 播放 / 暫停切換
playBtn.addEventListener('click', () => {
if (audio.paused) {
audio.play();
playBtn.textContent = '暫停';
} else {
audio.pause();
playBtn.textContent = '播放';
}
});
// 音量控制
document.getElementById('volumeCtrl').addEventListener('input', (e) => {
audio.volume = e.target.value;
});
// 靜音切換
document.getElementById('muteBtn').addEventListener('click', () => {
audio.muted = !audio.muted;
});
</script>
|
媒體事件
透過監聽事件,可以做到進度顯示、播放完畢處理等功能:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
const audio = document.getElementById('myAudio');
// 可以開始播放時觸發(緩衝足夠)
audio.addEventListener('canplay', () => {
console.log('可以開始播放');
});
// 播放時間更新(約每秒觸發一次,用於更新進度條)
audio.addEventListener('timeupdate', () => {
const current = audio.currentTime; // 目前播放秒數
const duration = audio.duration; // 總長度秒數
const percent = (current / duration) * 100;
console.log(percent.toFixed(1) + '%');
});
// 播放結束
audio.addEventListener('ended', () => {
console.log('播放完畢');
// 可在此自動播放下一首
});
// 播放錯誤
audio.addEventListener('error', (e) => {
console.error('播放錯誤', e);
});
|
Web Audio API 進階控制
需要更細緻的音訊控制(如音效、等化器)時,可使用 Web Audio API:
1
2
3
4
5
6
7
8
9
10
11
12
|
const audioCtx = new AudioContext();
const source = audioCtx.createMediaElementSource(audio);
// 建立音量節點
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.8; // 80% 音量
// 連接音訊處理鏈:來源 → 音量控制 → 喇叭
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
audio.play();
|
參考資料