我正在尝试制作一个简单的录音室录音应用程序。 我有多个声音输入设备,并希望同时录制它们。
如何发现所有物理音频输入?
当我使用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来获取物理输入通道?和他们的参数(这样我可以选择采样率等)。
答案 0 :(得分:1)
最好在PulseAudio中做更复杂的事情。在这里,我找到了example program的链接。 不幸的是,复杂的API需要一个:
pa_mainloop_new
和pa_mainloop_get_api
初始化事件循环。pa_context_new
,pa_context_connect
和pa_context_set_state_callback
创建新的上下文。pa_context_get_source_info_list
或pa_context_get_sink_info_list
)。幸运的是,它似乎支持所有主要平台(我使用的是Linux和MacOS X)。鉴于界面的范围,我可能会继续将PulseAudio用于我未来的所有音频项目。