linux 如何发现物理音频输入通道列表?

6uxekuva  于 2023-03-17  发布在  Linux
关注(0)|答案(1)|浏览(188)

我正在尝试做一个简单的录音室录音应用程序。我有多个声音输入设备,并希望记录他们都同时进行。
如何发现所有物理音频输入?
当我使用sounddevice.query_devices()时,我得到了很多不包含数据的 * 虚拟设备 * 和 * 虚拟 * 输入通道:

>>> sd.query_devices()

  0 HDA Intel PCH: HDMI 0 (hw:0,3), ALSA (0 in, 8 out)
  1 HDA Intel PCH: HDMI 1 (hw:0,7), ALSA (0 in, 8 out)
  2 HDA Intel PCH: HDMI 2 (hw:0,8), ALSA (0 in, 8 out)
  3 hdmi, ALSA (0 in, 8 out)
  4 pulse, ALSA (32 in, 32 out)
* 5 default, ALSA (32 in, 32 out)
  6 /dev/dsp, OSS (16 in, 16 out)

我只对真实的设备和真实的输入通道感兴趣。
当我使用pacmdlist-sources查询麦克风设备时,我得到两个通道,即使设备是单声道,也会发出 * 假 * 立体声:

$ pacmd
>>> list-sources
...
    channel map: front-left,front-right
                 Stereo

有没有办法查询PulseAudio或PortAudio来获取 * 物理 * 输入通道?以及它们的参数(这样我就可以选择采样率等)

lndjwyie

lndjwyie1#

PulseAudio中做更复杂的事情似乎是最好的。在这里我找到了example program的链接。不幸的是,它是复杂的API,需要一个:
1.首先使用pa_mainloop_newpa_mainloop_get_api初始化事件循环。
1.然后使用pa_context_newpa_context_connectpa_context_set_state_callback创建一个新上下文。
1.在上下文回调中,识别上下文初始化并开始枚举(pa_context_get_source_info_listpa_context_get_sink_info_list)。
1.枚举本身也是由回调执行的。
幸运的是,它似乎在所有主要平台上都受支持(我使用的是Linux和MacOS X)。考虑到接口的范围,我可能会在未来的所有音频项目中继续使用PulseAudio。
更新的PipeWire API的类似枚举:https://docs.pipewire.org/page_tutorial2.html

相关问题