9

在 Windows 上有多种播放声音的方法。每种方法的区别、优点和缺点是什么?

我知道至少有5种方法:

  1. 1991 WinMM.dll/mmsys.dll 播放声音
  2. 1995 MCIWnd(由@casablanca 建议)
  3. 1996 年直接声音
  4. 1998 年波出
  5. 1999 年
  6. 1999 Windows Media Player ActiveX 控件?
  7. 2005 WASAPI(由 XAudio2 使用 - 正如@Han 所建议的那样)
  8. 2007 XAudio2
4

2 回答 2

5

QSound,那么它将适合您的Qt应用程序的其余部分,并且它不仅可以在 Windows 上工作,而且还可以在 Mac OS X 和 Linux 上工作。找到一个对开发人员不太友好的特定于平台的核心 API,然后在核心之上构建了无数对开发人员更友好的 API,这种情况并不少见。使用核心 API 的速度可能可以忽略不计,但使用这些核心 API 之上的层几乎总是更方便和可维护,并且可以保护您免受对低级核心的更改。


XAudio2 的描述中编辑

XAudio2 是用于 Microsoft Windows 和 Xbox 360 的低级跨平台音频 API。它为类似于其前身 DirectSound 和 XAudio 的游戏提供信号处理和混合基础。对于 Windows 游戏开发者来说,XAudio2 是期待已久的 DirectSound 替代品。

所以,如果你想要一个核心的、特定于平台的音频库,它看起来就是要使用的 API。

编辑 2
我的第一个答案有点快......真的,这取决于你想做什么。如果您只想播放音频文件,那么 QSound 就是您的最佳选择。但是,如果您想即时混合和生成音频,那么使用功能更强大的库,例如 XAudio2(它是 DirectX 的一部分,旨在作为视频游戏的一部分创建声音)将是去。

于 2010-10-26T00:03:51.563 回答
2

真的取决于你想做什么。对于最常见的场景,我发现MCIWnd函数运行良好:它们非常易于使用,并且可以播放安装了编解码器的任何格式。

DirectSound 使用起来有些困难,但可以让您更好地控制输出;它可以让您添加特殊效果并模拟 3D 定位。

这些waveOut函数是您可以使用的最低级别的 API,它们是一把双刃剑:您可以准确控制输出到扬声器的内容,但它们只接受原始波形数据,这意味着您负责所有解码和输入数据的后处理。PlaySound本质上提供了一个很好的包装。

于 2010-10-26T00:19:08.923 回答