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

时间:2010-10-25 23:55:11

标签: 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

2 个答案:

答案 0 :(得分:5)

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

修改
来自description of XAudio2

  

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

因此,如果您需要一个特定于核心的平台音频库,那么它似乎就是要使用的API。

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

答案 1 :(得分:1)

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

DirectSound有点难以使用,但可以让您对输出进行更多控制;它可以让你添加特效并模拟3D定位。

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