Windows中低级audio的最佳API?

我正在开发一个用C编写的audio应用程序。我需要在Windows下提供实时audio播放。 我需要决定使用哪个audioAPI。 我打算使用基本的waveOut API ,但是我想查看这里推荐的社区。

我想要的代码,只要在任何最新版本的Windows上工作,不需要安装库; 我想要最小的延迟。

我不需要或不需要任何“效果”,只需要忠实地播放应用程序产生的任何波形样本。

我的理解是,Windows上的大多数专业audio应用程序使用ASIO,这提供了极好的低延迟,但是我不想要ASIO,因为我希望我的代码能够正常工作,而且大多数人没有在他们的计算机上预安装ASIO 。 (在以后的日子里,我可能会回来,并joinASIO作为一个选项,但我会首先寻求最通用的解决scheme。)

有没有什么比我的目的更好的波浪呢,还是最好的select?

Solutions Collecting From Web of "Windows中低级audio的最佳API?"

这取决于你正在尝试做什么。 基本的waveOut音频API更适合流式传输音频。 它可以让你排队几个缓冲区,并让他们自动连续播放。 但是,如果音频播放,你想改变它,或添加一些东西,这是相对困难的。

DirectX音频更适合基于事件的音频。 你可以同时播放几个东西,而不必自己做混音。 您可以轻松地添加或删除小部分音频,例如用户在扳机上拉动扳机时播放声音。 但是流式传输(也就是连续播放1个缓冲区)比较困难。

waveOut旨在方便播放不断变化的音频,如.mp3文件。 DirectX被设计用于间歇性的音频,如游戏中的反馈。

就编程难度而言,ASIO就像waveOut和DirectX中最糟糕的一样。 这并不稳定。 应用程序通常不能共享音频设备。 但它使您能够以最低的延迟访问音频硬件。

ASIO还为您提供了一种在多个设备上同步播放的方法。

如果您不需要在播放之前就能够改变播放的内容,并且不需要同步多个设备,那么您就不需要ASIO。

当我问这个问题时,我使用waveOut和waveIn API编写了流代码。 从那以后,我发现了一个有用的图书馆:

PortAudio http://www.portaudio.com/

PortAudio是免费软件,具有商业友好的许可证。 如果您编写代码来调用PortAudio,则应该能够使用waveOut设备,而且可以使用Windows下的ASIO设备; 它可以重新编译为Linux,并应该与ALSA设备一起工作; 然后可以重新编译为Mac,并应该与CoreAudio设备一起使用。 我没有测试Mac的部分,但我的项目是与Windows和Linux的伟大工作。

除了John Knoeller提到的选项之外,还有WASAPI允许比WaveOut低得多的延迟,但不幸的是只能从Windows Vista开始。

我自己写了一个DirectSound流媒体应用程序,我当然推荐它的低延迟和易用性。 此外,它还使您能够在旧版Windows上设置更高质量的格式进行播放。