我可以直接与 Windows 上的音频端点交互吗?

Posted

技术标签:

【中文标题】我可以直接与 Windows 上的音频端点交互吗?【英文标题】:Can I directly interact with audio endpoints on windows? 【发布时间】:2018-12-23 01:42:02 【问题描述】:

我正在尝试编写一个专业的音乐/音频处理应用程序,并且我希望能够以非常低的级别与音频输入/输出进行交互 - 理想情况下,我可以将效果应用于音频输入和输出这是实时的,类似于 Logic、Ableton 等程序。

我编写了一个非常基本的程序,它可以检测音频端点设备并可以使用 MMDevice 接口更改它们的音量,但这与我想要的功能相去甚远。

我从 Microsoft 文档中了解到四个核心音频 API 是:

MMDevice WASAPI 设备拓扑 端点卷

但似乎其中任何一个都没有我需要的功能。我认为我需要能够在给定时间设置膜位置的级别与扬声器进行交互。

这甚至可能吗?如果是这样,我可以用什么来做到这一点?

【问题讨论】:

也许 XAudio2 可以满足您的需求。 现代操作系统几乎阻止了所有人直接访问底层硬件。其中一部分是自卫,当您获得该级别的系统控制时,可以完成许多令人讨厌的事情,并且很大一部分是抽象出硬件中的差异。如果您需要做一些无法融入抽象的事情,您可能必须深入研究 Windows 驱动程序的黑暗秘密。 通常专业音频软件使用 Steinberg 的 ASIO 技术。您可以在Steinberg's 3rd Party Developer 网站上下载 ASIO SDK。它是免费的,但附带您必须签署的许可协议。 【参考方案1】:

Windows Audio Session API (WASAPI) 是实现此目的的最佳选择。它允许与音频端点交互并设置音频流(您可以实时发送或接收的数据流)。一个很好的例子是here。

【讨论】:

以上是关于我可以直接与 Windows 上的音频端点交互吗?的主要内容,如果未能解决你的问题,请参考以下文章

大多数(如果不是全部)音频端点是 PCM 吗?

在两个端点之间转换音频流

设置音频端点设备应用程序特定(以编程方式)

是否可以在 Windows 7 中获取指向默认音频端点设备缓冲区的指针?

Windows 上的 Sanic Python,同一端点上的同步行为 - 这是预期的吗?

从 Windows Phone 上的轨道检测音频电平