低级音频编程

Posted

技术标签:

【中文标题】低级音频编程【英文标题】:Low level audio programming 【发布时间】:2010-11-14 00:11:50 【问题描述】:

我想知道; Cubase 和 Audacity 等音频软件是否使用 PlaySound 调用?

在哪里可以了解?据我在网上找到的信息,MCI 似乎是 Windows 中最低级别的音频 API...

谢谢

编辑:我不要求只针对 Windows 提供特定信息。

【问题讨论】:

【参考方案1】:

有多种音频 API 可供选择。最古老和最广泛支持的是 waveOut API - 在 MSDN 中查找以 waveOut 开头的函数。较新的是 DirectSound,它更适合游戏,但它的主要功能是 waveOut 的主要功能是专业音频软件不使用的位置 3D 声音(它也应该具有比 waveOut 更低的延迟,但从未真正实现)。对于低延迟音频,有ASIO。专业音频应用程序支持此 API,但并非所有驱动程序都支持(这是专业声卡的标准功能,但不是游戏或板载硬件)。 ASIO 可以提供比 waveOut 或 DirectSound 低得多的延迟。最后是内核流接口,它是最低级别的音频接口,仍然可以从用户模式代码访问。这是进入 Windows 内部混音器的直接管道,它将当前正在播放声音的所有应用程序的输出组合成发送到声卡的信号。虽然它几乎没有记录。有一个名为ASIO4ALL(google it)的驱动程序,通过在内核流接口之上实现 ASIO API,在没有 ASIO 驱动程序的声卡上提供 ASIO 支持。

【讨论】:

这正是我正在寻找的信息,谢谢! 您忘了提及随 Vista 引入的“新”CoreAudio API。它允许对音频接口进行低级别访问,并已正确记录。 (msdn.microsoft.com/en-us/library/dd370802(VS.85).aspx)【参考方案2】:

我在这里玩游戏有点晚了,但我上周发布了一个 Windows API 历史记录,可能会增加一点上下文。 API 的选择实际上取决于您的需求。如果您想避免使用 3rd 方库,它实际上只能归结为 MME、XAudio2 和 Core Audio (WASAPI)。

A Brief History of Windows Audio APIs

希望这会有所帮助!

【讨论】:

【参考方案3】:

实际上,如果您正在寻找的不仅仅是仅 Windows 的输出支持,那么最好的开始方法是查看 Phil Burk 的 PortAudio,在撰写本文时可在 http://www.portaudio.com/ 获得。

ASIO 是一个高质量的界面,但它是 Steinberg 的专有产品。

在现代 Windows 中,有许多比 MCI 更低级别的音频输出接口。这些至少包括DirectSound、XAudio 和WASAPI。

我建议尽可能避免使用 Windows API,而是学习 PortAudio。

【讨论】:

以上是关于低级音频编程的主要内容,如果未能解决你的问题,请参考以下文章

在C\C++编程时常范的低级错误总结

汇编是唯一的低级编程语言,如果不是,它是最广泛使用的吗?

编程语言分类之我见

哪些编程语言不被视为高级语言? [关闭]

编程原理

Java AWT 图形界面编程事件处理机制 ③ ( AWT 中常见的事件和事件监听器 | 低级事件 | 组件事件 | 窗口事件 | 鼠标事件 | 高级事件 | 动作事件 | 事件监听器 )