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

时间:2016-04-19 00:17:18

标签: delphi stream mp3 playback

我有一个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?

1 个答案:

答案 0 :(得分:2)

SndPlaySound API仅支持波形音频。它不是通用的多媒体API,因此不能(直接或轻松地)支持MP3播放。

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

我应该注意,似乎可以通过将WAV标头附加到数据来获得 SndPlaySound API来播放MP3数据。但是有关音频的详细信息是必需的。那个标题和过程是一个决定性的非常重要的练习。它几乎肯定比从一开始就使用更适合任务的API更难。

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

BASS Audio Library是一个这样的选择,虽然这是一个商业图书馆,并不是特别便宜。然而,它能够满足您的需求。

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

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