要从 Linux 上运行的 Free Pascal 应用程序播放 wav 文件,您可以使用 SDL 库。以下是一个简单的示例代码:
program PlayWav;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SDL2, SDL2_mixer;
var
audioSpec: TSDL_AudioSpec;
audioBuf: PUInt8;
audioLen: UInt32;
// 加载 wav 文件并返回音频缓冲区
function LoadWav(const filename: string; out audioBuf: PUInt8; out audioLen: UInt32): TSDL_AudioSpec;
var
wavSpec: TSDL_AudioSpec;
wavBuf: PUInt8;
begin
if SDL_LoadWAV(PChar(filename), wavSpec, wavBuf, audioLen) = nil then
raise Exception.Create('无法加载 wav 文件');
audioBuf := wavBuf;
Result := wavSpec;
end;
begin
if SDL_Init(SDL_INIT_AUDIO) <> 0 then
raise Exception.Create('无法初始化 SDL');
try
audioSpec := LoadWav('example.wav', audioBuf, audioLen);
if Mix_OpenAudio(audioSpec.freq, audioSpec.format, audioSpec.channels, audioSpec.samples) <> 0 then
raise Exception.Create('无法打开音频设备');
try
if Mix_PlayChannel(0, PMix_Chunk(audioBuf), 0) = -1 then
raise Exception.Create('无法播放 wav 文件');
while Mix_Playing(0) = 1 do
SDL_Delay(100);
finally
Mix_CloseAudio();
end;
finally
SDL_Quit();
end;
end.
这个示例代码使用 SDL 库加载 wav 文件,并使用 SDL_mixer 库播放音频。在运行此代码之前,请确保您已经安装了 SDL 和 SDL_mixer 库。
请注意,这个示例代码仅适用于 Linux 平台。如果您需要在其他平台上运行 Free Pascal 应用程序,您可能需要使用其他音频库。
领取专属 10元无门槛券
手把手带您无忧上云