如何获取音频输入设备信息? (通道、串行)

如何获取音频输入设备信息? (通道、串行)

我正在编写一个应用程序,该应用程序应该列出所有音频输入设备及其可用通道和一个 ID,以在重新启动和主机系统中识别录音设备。

我发现 arecord -l 可以列出(一些?)音频输入设备,但似乎没有办法列出通道数,尽管您可以使用 -c 标志来记录特定数量的通道。

我什至尝试编写一个循环,尝试使用越来越多的通道进行记录,直到失败,但它总是在 65 处失败,即使只有 1 个通道。

除此之外,ID 不是唯一的,并且在不同的主机系统上使用也不安全。

有什么想法可以在 Bash 中实现这一点吗?

理想情况下,独立于主机使用的音频系统(如 ALSA、Pulseaudio、Pipewire、Jack、Wireplumber 等)?

答案1

/proc我为此使用文件系统;它将 ALSA 声卡模型的各个方面暴露给文件系统。

例子:

通过 SoC(片上系统)I2S 接口连接的 2 通道 ADC:

$ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 192
buffer_size: 2304

8 通道 USB 音频设备:

 $ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 8
rate: 48000 (48000/1)
period_size: 192
buffer_size: 2304

还有一些其他文件可能有用。/proc/asound/card0/stream0具有 USB 音频设备上的通道数,但不具有 SoC 设备上的通道数。无论哪种方式,如果您有不止一张卡,则需要枚举所有卡才能找到您想要的卡,因为无法保证枚举顺序。

您还可以使用amixer来检查控件计数,但我发现procfssysfs容易解析。

相关内容