我应该使用哪种API在Windows上播放音频?

Jad*_*ias 7 c++ windows audio-player

在Windows上有很多种播放声音的方法.每种方法的差异,优点和缺点是什么?

我知道至少有5种方法:

  1. 1991 WinMM.dll/mmsys.dll PlaySound
  2. 1995年MCIWnd(由@casablanca建议)
  3. 1996 DirectSound
  4. 1998 WaveOut
  5. 1999年ASIO
  6. 1999 Windows Media Player ActiveX控件?
  7. 2005 WASAPI(由XAudio2使用 - 由@Han建议)
  8. 2007 XAudio2

Mic*_*yan 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的一部分,用于创建声音作为视频游戏的一部分)将是通往走.

  • 我很好奇你是如何知道他的应用程序是基于Qt的.这个问题被编辑了吗?这是Jader的另一个问题吗? (2认同)

cas*_*nca 2

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

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

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

  • 当没有视频内容时,我认为 [`mciExecute`](http://msdn.microsoft.com/en-us/library/dd757154.aspx) (或 mciSendString)远远优于 MCIWnd。 (2认同)