需在程式執行期間持續循環播放背景音效或提示音?Windows Multimedia API SndPlaySound 配合 SND_ASYNC (非同步) 與 SND_LOOP (循環) 旗標,單行代碼即可實現,無需媒體播放元件、無需 Timer 輪詢。
uses MMSystem; // 必須引用
procedure TForm1.FormCreate(Sender: TObject);
begin
// 非同步循環播放,不阻塞主執行緒
SndPlaySound('C:\Windows\Media\recycle.wav', SND_ASYNC or SND_LOOP);
end;
| 旗標 | 值 | 作用 |
|---|---|---|
| SND_SYNC | 0x0000 | 同步播放,播放完才返回 (預設) |
| SND_ASYNC | 0x0001 | 非同步,立即返回,背景播放 |
| SND_LOOP | 0x0008 | 循環播放,需搭配 SND_ASYNC |
| SND_NODEFAULT | 0x0002 | 找不到檔案時不播放預設聲音 |
| SND_NOSTOP | 0x0010 | 不中斷正在播放的聲音 |
| SND_FILENAME | 0x0020 | 參數為檔案名 (非資源名) |
| SND_RESOURCE | 0x0004 | 參數為資源 ID (MAKEINTRESOURCE) |
| 場景 | 適合度 | 建議方案 |
|---|---|---|
| 簡單提示音、背景循環音效 | ★★★★★ | SndPlaySound + SND_LOOP |
| 需音量控制、淡入淡出 | ★★☆☆☆ | TMediaPlayer / MCI / BASS.dll |
| 播放 MP3/OGG/長音樂 | ★☆☆☆☆ | TMediaPlayer / FMOD / BASS |
| 多聲道混音、遊戲音效 | ☆☆☆☆☆ | DirectSound / XAudio2 / FMOD |
對於「啟動即循環播放一段 WAV」這類極簡需求,SndPlaySound 是零依賴、零元件、零執行緒的最佳選擇。