如何播放 Delphi 资源中的 mp3 内容?

How to play mp3 content from resource in Delphi?

我有一个TResourceStream包含一个简单的WAV声音。

我将该行写入了 resource.res 文件: sound WAV "res\notify.wav"

我有以下适用于 WAV 的方法:

Res := TResourceStream.Create(HInstance, 'sound', 'WAV');
Res.Position := 0;
SndPlaySound(res.Memory, SND_MEMORY or SND_ASYNC);
Res.free;

我将 WAV 转换为 MP3 并做了以下事情:

resource.res 文件:sound MP3 "res\notify.MP3"

将播放方法第一行更改为:

Res := TResourceStream.Create(HInstance, 'sound', 'MP3');

但是没有任何反应。它不会抛出任何异常,简单的没有声音。

如何像播放WAV文件一样简单地播放MP3?

SndPlaySoundAPI只支持波形音频。它不是一般用途 multi-media API 因此不(直接也不容易)支持 MP3 播放。

要通过此 API 播放音频,您首先需要将 MP3 解码为 API 期望的波形格式。

(我应该注意到,通过附加 WAV header 添加到数据中。但是 header 中需要有关音频的详细信息,并且该过程绝对是 non-trivial 练习。几乎可以肯定,它比使用更适合于 API 的更难任务从头开始。)

对于获取包含您的 MP3 数据的流,您的方法似乎是正确的,并且内存中有该数据,有许多选项可用于播放该 MP3 音频。

BASS Audio Library 是一个这样的选择,尽管这是一个商业图书馆并且不是特别便宜。然而,它完全可以满足您的需求。

然而,有许多替代方案,有些更便宜,有些甚至免费,它们也可以完成这项工作,但如果它们没有被广泛使用或得到很好的支持,您可能会发现很难获得帮助。

即便如此,您还是希望查看 torry.net 目录中列出的一些替代方案。具体在目录的 Components \ Effects and Multimedia 部分。