Lazarus 循环播放音乐

Lazarus play music in loop

这几天我一直在研究一个小工具,功能本身还不错。 我想让这个工具更易于使用(至少对我而言)并包含一个声音文件(称为 test.wav),它播放我最喜欢的歌曲之一。

当时的想法是,这首歌会不断重复自己,但经过一次后,音乐就会停止。这是我的音乐部分的代码片段:

procedure TForm1.music();
begin
    PlaySound('test.wav', 0, SND_ASYNC);
end;   

当我将 SND_ASYNC 更改为 SND_LOOP 并开始调试我的项目时,我的 .exe-Windows 没有出现,但音乐播放(也只播放一次)。

该过程也在 project.lpr:

调用
begin
      ...
      Form1.music();
      Application.Run; 

那么如何让音乐不断循环播放呢?它不一定是 .wav 顺便说一句。

PlaySound函数是(仍然)documented

有趣的设置在第三个参数fdwSound里面SND_LOOP:

SND_LOOP The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. If this flag is set, you must also set the SND_ASYNC flag.

注意最后一句话。所以正确的调用是:

PlaySound('test.wav', 0, SND_ASYNC or SND_LOOP);

要在程序启动时自动激活它,请使用 OnCreate() 事件形式。