我有一个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?
答案 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
部分。