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

Posted

技术标签:

【中文标题】如何在 Delphi 中播放资源中的 mp3 内容?【英文标题】:How to play mp3 content from resource in Delphi? 【发布时间】:2016-04-19 00:17:17 【问题描述】:

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

【问题讨论】:

另见How to Play mp3 file from memory in delphi? 【参考方案1】:

SndPlaySound API 仅支持波形音频。它不是通用的多媒体 API,因此不(直接也不容易)支持 MP3 播放。

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

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

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

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

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

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

【讨论】:

以上是关于如何在 Delphi 中播放资源中的 mp3 内容?的主要内容,如果未能解决你的问题,请参考以下文章

MP3/wav 音频文件的持续时间

delphi怎么用mediaplayer播放资源?

如何在后台播放应用程序中的 mp3 文件?

如何用delphi编写音乐播放器

如何在 Racket 中播放 mp3/音频文件?

如何使用php播放存储在mysql blob中的mp3音频