我有一个TResourceStream
包含一个简单的WAV声音。
我在resource.res文件中写入了这一行:sound WAV "resnotify.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 "resnotify.MP3"
将玩法第一行更改为:
Res := TResourceStream.Create(HInstance, 'sound', 'MP3');
但什么也没发生。它没有抛出任何异常,只是没有听到任何声音。
如何播放像WAV文件这样简单的MP3?
SndPlaySoundAPI仅支持波形音频。它不是一个通用的多媒体API,因此不(直接或容易)支持MP3播放。
要通过这个API播放音频,您首先需要将MP3解码为API期望的波形格式。
(我应该注意的是,似乎可以通过在数据上附加WAV头来让SndPlaySoundAPI播放MP3数据。但在该头中需要有关音频的详细信息,并且这个过程是一个决定性的非琐碎练习。几乎可以肯定,这比从一开始就使用更适合任务的API更困难。)
您的方法似乎是正确的,可以获得包含MP3数据的流,并且有了内存中的数据,就有许多选项可用于播放该MP3音频。
BASS音频库就是这样一个选择,尽管这是一个商业库,而且不是特别便宜。然而,它能够完全满足您的需求。
然而,有很多替代品,有些更便宜,有些甚至是免费的,它们也可能起到作用,尽管如果它们没有得到广泛使用或很好的支持,你可能会发现更难获得帮助。
即便如此,您也可能希望查看torry.net目录中列出的一些备选方案。特别是在目录的Components
\Effects and Multimedia
部分中。