从 Visual C++ 播放 mp3 的最简单方法
Posted
技术标签:
【中文标题】从 Visual C++ 播放 mp3 的最简单方法【英文标题】:Simplest way to play mp3 from Visual C++ 【发布时间】:2010-01-12 14:58:16 【问题描述】:几年前,我围绕 DShow/DSound 编写了一些实用程序库,让我可以在 Windows C++ 应用程序中播放 MP3。这仍然是在 C++/MFC 应用程序中执行此操作的正常方式,还是 DirectX 的一个领域已被纳入通用 Windows API?
动机只是我们使用标准的 Windows PlaySound 方法处理 WAV,并希望能够使用类似的简单 API 播放 MP3,该 API 由 Windows 提供或我们编写的用于包装更复杂功能的东西。
编辑:这是一个大型的商业闭源项目。而且我们只想玩简单的东西,花很多钱买一个库是不会飞的。
【问题讨论】:
【参考方案1】:您可以使用 DirectShow,但它不再是 DirectX 的一部分,也可以依赖第三方库,例如 Bass、FMod、mpg123 甚至 libwmp3。
如果您不想再使用 DirectShow(但是如果您现有的代码继续工作,为什么要更改?),您可以使用MCI:
mciSendString("open la_chenille.mp3 type mpegvideo alias song1", NULL, 0, 0);
mciSendString("play song1", NULL, 0, 0);
mciSendString("close song1", NULL, 0, 0);
【讨论】:
这个 sn-p 的一些潜在问题: 1. 确保正确引用文件的路径 \"PlaySound() 只要嵌入在 WAV 文件中就可以原生支持 MP3。 人们没有意识到 WAV 是一种容器格式。
下载 ffmpeg 实用程序以转换标头并保留编解码器:
ffmpeg -i input.mp3 -c copy -f wav embedded_mp3.wav
【讨论】:
这真的有效!要播放 mp3,只需使用PlaySound(path, NULL, SND_ASYNC);
再简单不过了。【参考方案3】:
这是播放任何音频文件的简单方法:http://msdn.microsoft.com/en-us/library/dd390090(VS.85).aspx
【讨论】:
【参考方案4】:你可以使用 MCI windows 函数, https://msdn.microsoft.com/en-us/library/ms709626
它可以播放多种音频文件格式,包括 MP3、WAV、MIDI 等。
如果我没记错的话,它不需要 DirectX。
PlaySound 功能可能也适合您。
【讨论】:
【参考方案5】:如果您不想支付任何许可并想在内部进行,请解析您的 mp3 文件并将其传递给 XAudio2。 您可以做一次(最多 2-3 小时)并始终使用它。 :P
【讨论】:
那比 DirectShow 好在哪里?两者都是 MS API,但用户已经拥有 DShow(可能)。有优势吗? DirectShow还有另一个目标,就是对于“多媒体”来说,对于多媒体的意义是很广泛的。 (无论如何现在不再更新) XAudio2 是 DirectSound 的替代品,是一个低级音频 API 跨平台 Xbox360/PC。微软希望将其作为唯一可在 Windows 上使用的 API。【参考方案6】:你可以看看BASS。这是一个简单易用的音频库,可免费用于非商业用途。
【讨论】:
以上是关于从 Visual C++ 播放 mp3 的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章