我正在尝试做一个简单的录音室录音应用程序。我有多个声音输入设备,并希望记录他们都同时进行。
如何发现所有物理音频输入?
当我使用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)
我只对真实的设备和真实的输入通道感兴趣。
当我使用pacmd
和list-sources
查询麦克风设备时,我得到两个通道,即使设备是单声道,也会发出 * 假 * 立体声:
$ pacmd
>>> list-sources
...
channel map: front-left,front-right
Stereo
有没有办法查询PulseAudio或PortAudio来获取 * 物理 * 输入通道?以及它们的参数(这样我就可以选择采样率等)
1条答案
按热度按时间lndjwyie1#
在PulseAudio中做更复杂的事情似乎是最好的。在这里我找到了example program的链接。不幸的是,它是复杂的API,需要一个:
1.首先使用
pa_mainloop_new
和pa_mainloop_get_api
初始化事件循环。1.然后使用
pa_context_new
、pa_context_connect
和pa_context_set_state_callback
创建一个新上下文。1.在上下文回调中,识别上下文初始化并开始枚举(
pa_context_get_source_info_list
或pa_context_get_sink_info_list
)。1.枚举本身也是由回调执行的。
幸运的是,它似乎在所有主要平台上都受支持(我使用的是Linux和MacOS X)。考虑到接口的范围,我可能会在未来的所有音频项目中继续使用PulseAudio。
更新的PipeWire API的类似枚举:https://docs.pipewire.org/page_tutorial2.html