从Visual C++播放mp3的最简单方法

7
几年前,我编写了一些DShow / DSound的util库,以便在Windows C ++应用程序中播放MP3。在C ++ / MFC应用程序中,这仍然是正常操作的方式吗?还是这个DirectX领域已被纳入通用的Windows API中?
动机很简单,我们使用标准Windows PlaySound方法来播放WAV文件,并希望能够使用类似的简单API播放MP3文件,无论是由Windows提供还是我们编写的包装更复杂功能的代码。
编辑:这是一个大型的商业闭源项目。我们只想简单地播放音频,不打算花大量费用购买库。
6个回答

9

PlaySound()本地支持MP3,只要它嵌入在WAV文件中。

人们不清楚WAV是容器格式。

下载ffmpeg实用程序以转换头文件并保留编解码器:

ffmpeg -i input.mp3 -c copy -f wav embedded_mp3.wav

这真的很有效!要播放mp3,只需使用PlaySound(path, NULL, SND_ASYNC);。它再简单不过了。 - Orwellophile
这是最好的答案。 - Lucas

8
你可以使用DirectShow,但它不再是DirectX的一部分,或者依赖于第三方库,如BassFModmpg123甚至是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);

这段代码可能会有一些潜在的问题:
  1. 确保文件路径正确引用为"<path>"
  2. 我发现在“播放song1”后立即发送“关闭song1”的命令会导致声音无法播放。也就是说,声音会被打开,然后立即关闭。
- Dave

3

2
你可以使用MCI windows函数,https://msdn.microsoft.com/en-us/library/ms709626。它可以播放许多音频文件格式,包括MP3、WAV、MIDI等。
如果我没记错的话,它不需要DirectX。
PlaySound函数也可能适用于你。

0

如果您不想支付任何许可证费用并希望在内部进行操作,请解析您的mp3文件并将其传递给XAudio2。这是一件您只需要做一次(最多2-3小时)并且可以一直使用的事情。:P


这比DirectShow更好在哪里?两者都是微软API,但用户可能已经有了DShow。有什么优势吗? - Mr. Boy
DirectShow有另一个目标,是针对“多媒体”的,因为多媒体的意义非常广泛。(而且现在已经不再更新)XAudio2是DirectSound的替代品,是跨平台Xbox360 / PC的低级音频API。微软希望将其推广为Windows上唯一可用的API。 - feal87

-1
你可以看一下BASS。它是一个易于使用的音频库,非商业用途免费。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接