我有一个包含简单 WAV 声音的 TResourceStream
。
我将该行写入了resource.res文件中:
声音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 文件:声音 MP3“res\notify.MP3”
将播放方法第一行更改为:
Res := TResourceStream.Create(HInstance, 'sound', 'MP3');
但是什么也没发生。它不会抛出任何异常,只是听不到声音。
怎样才能像播放WAV文件一样简单地播放MP3?
最佳答案
SndPlaySound API 仅支持波形音频。它不是通用多媒体 API,因此不(直接或轻易)支持 MP3 播放。
要通过此 API 播放音频,您首先需要将 MP3 解码为 API 期望的波形格式。
(我应该注意到,通过将 WAV header 附加到数据,似乎可以让 SndPlaySound API 来播放 MP3 数据。但是需要有关音频的详细信息该 header 和流程绝对是一项不平凡的练习。几乎可以肯定,它比从一开始就使用更适合该任务的 API 更困难。)
对于获取包含 MP3 数据的流,您的方法似乎是正确的,并且内存中的该数据有许多选项可用于播放该 MP3 音频。
BASS Audio Library就是这样的选择之一,尽管这是一个商业图书馆并且不是特别便宜。然而,它完全能够满足您的需求。
但是,有许多替代方案,有些更便宜,有些甚至免费,它们也可以完成工作,但如果它们没有广泛使用或得到很好的支持,您可能会发现很难获得这些帮助。
即便如此,您可能希望查看torry.net 上列出的一些替代方案。目录。具体位于目录的 Components
\Effects and Multimedia
部分。
关于delphi - 如何在Delphi中播放资源中的mp3内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706407/