在 Windows 中访问音频输出

Posted

技术标签:

【中文标题】在 Windows 中访问音频输出【英文标题】:Accessing audio out in Windows 【发布时间】:2010-09-24 05:17:41 【问题描述】:

我正在寻找编写一个 Arduino 脚本,该脚本使用发送到扬声器的任何音频信号来创建物理可视化。

Arduino通过 USB 连接到 windows 机器,所以我需要使用 USB 来找出发送到扬声器的内容。我将如何访问这些信息?

【问题讨论】:

不确定我是否理解为什么这个问题是特定于 Windows 的......您不是要监视从计算机(或任何重要的设备)到扬声器的电线上的电信号吗? 我已经这样做了,但我想做一个 USB 选项。所以我需要以某种方式访问​​进入耳机插孔的信号。 好的,明白了...不幸的是我不使用windows,所以我帮不上忙。 【参考方案1】:

目前,Arduino 只能通过 USB 上的 serial 与计算机通信。新的 Arduino Uno 发生了变化,但尚未发布示例来展示如何让新的 Arduino 充当其他 USB 设备。

只要您希望它仅通过 USB 连接,您就必须为 Windows 机器编写一些东西来监控系统音频并通过串行方式将有关它的信息发送到 Arduino。

【讨论】:

【参考方案2】:

在没有一些外部硬件的情况下,没有一种很好的方法可以将音频信号连接到 Arduino。

一种方法是将音频线连接到带有电容器的偏置引脚,然后您可以直接使用 ADC。会有非常糟糕的动态范围,但它只需要 3 个无源部分。在进入 ADC 引脚之前通过运算放大器运行它可以显着提高动态范围并提供滤波机会(见下文)。或者,您可以打开片上参考电压(通常为 1-1.5 V)来代替主电源。

对于直观的可视化来说没那么重要,但采样率不足以捕捉音频的完整频谱内容(除了较差的动态范围分辨率)。默认的 Arduino 采样率为 10 kHz(-ish...可能是异步的),因此只有当您的信号低于 5 kHz 时,您才能获得有效数据,否则混叠会搞砸。 (如果您为 ATmega32P 编写自己的模拟驱动程序,您可以获得高达 76 kHz 的采样率和 8 位样本)

然后,要将这些数据实际传送到计算机,您可以相当轻松地将所有这些 ADC 值扔到 UART 上,以便计算机按照它认为合适的方式获取和处理。 ATmega 将无法动态计算 FFT(无论如何,您几乎总是会为 viz 做的事情)。


或者跳过所有这些,将音频信号连接到计算机的声卡(或 USB 声卡......它们非常好)并使用一些音频驱动程序。

【讨论】:

【参考方案3】:

有一个名为 ESS 的用于处理的 Java 库,可让您访问音频输出。

【讨论】:

以上是关于在 Windows 中访问音频输出的主要内容,如果未能解决你的问题,请参考以下文章

获取音频混合器中可视化的单个 Windows 应用程序当前音量输出级别

如何在 Windows 7 中更改音频输出设备的默认共享模式采样率?

音频处理 音频输出

从 Windows.Media.Core.MediaSource 访问原始音频/视频帧

装配中的 Windows 音频

插孔音频连接套件 + Windows 音频