【问题标题】:How to discover a list of physical audio input channels?如何发现物理音频输入通道列表?
【发布时间】:2017-03-03 18:20:31
【问题描述】:

我正在尝试制作一个简单的录音室录音应用程序。 我有多个声音输入设备,想同时录制它们。

如何发现所有物理音频输入?

当我使用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 以获取 物理 输入通道?以及它们的参数(以便我可以选择采样率等)

【问题讨论】:

  • 我认为 PortAudio 不可能。您可以尝试在设备名称中扫描(hw:X,Y),但我不确定这是否与您想要查看的设备完全匹配。
  • 谢谢!我想知道是否有任何其他 API 可以使它变得简单?
  • 我发现在 PulseAudio 中是可能的。

标签: linux audio sdl portaudio pulseaudio


【解决方案1】:

似乎最好在PulseAudio 中做更复杂的事情。在这里我找到了example program 的链接。 不幸的是,这是一个复杂的 API,需要:

  1. 首先使用pa_mainloop_newpa_mainloop_get_api 初始化事件循环。
  2. 然后使用pa_context_newpa_context_connectpa_context_set_state_callback 创建一个新上下文。
  3. 在上下文回调中,识别上下文初始化并开始枚举(pa_context_get_source_info_listpa_context_get_sink_info_list)。
  4. 枚举本身也由回调执行。

幸运的是,它似乎在所有主要平台上都受支持(我使用的是 Linux 和 MacOS X)。鉴于接口的范围,我可能会在我未来的所有音频项目中继续使用 PulseAudio。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多