首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 循環播放聲音檔:SndPlaySound + SND_LOOP 一行搞定

     編輯:Delphi

需在程式執行期間持續循環播放背景音效或提示音?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;

旗標說明

完整單元代碼


unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MMSystem;
type TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
private { Private declarations }
public  { Public declarations }
end;
var Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  SndPlaySound('C:\Windows\Media\recycle.wav', SND_ASYNC or SND_LOOP);
end;
end.

進階控制

  • 停止播放:SndPlaySound(nil, 0); 或 SndPlaySound('', SND_ASYNC);
  • 切換音檔:再次呼叫 SndPlaySound 會自動停止前一個循環並播放新檔案。
  • 音量控制:需使用 waveOutSetVolume 或 MCI 指令,SndPlaySound 無音量參數。
  • 支援格式:.wav (PCM/ADPCM)、.mid (需 sequencer)、系統事件聲音別名 (如 'SystemAsterisk')。

適用場景與限制

旗標值作用
SND_SYNC0x0000同步播放,播放完才返回 (預設)
SND_ASYNC0x0001非同步,立即返回,背景播放
SND_LOOP0x0008循環播放,需搭配 SND_ASYNC
SND_NODEFAULT0x0002找不到檔案時不播放預設聲音
SND_NOSTOP0x0010不中斷正在播放的聲音
SND_FILENAME0x0020參數為檔案名 (非資源名)
SND_RESOURCE0x0004參數為資源 ID (MAKEINTRESOURCE)
場景適合度建議方案
簡單提示音、背景循環音效★★★★★SndPlaySound + SND_LOOP
需音量控制、淡入淡出★★☆☆☆TMediaPlayer / MCI / BASS.dll
播放 MP3/OGG/長音樂★☆☆☆☆TMediaPlayer / FMOD / BASS
多聲道混音、遊戲音效☆☆☆☆☆DirectSound / XAudio2 / FMOD

對於「啟動即循環播放一段 WAV」這類極簡需求,SndPlaySound 是零依賴、零元件、零執行緒的最佳選擇。

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