如何在单张多输入ALSA声卡上同时开启多个ALSA采集输入
多输入音频编解码器WM8281的ALSA多流采集问题
我在搭载WM8281音频编解码器(具备6路模拟输入)的嵌入式Linux系统上,使用ALSA PCM例程进行音频采集。已在/etc/asound.conf文件中为这6路输入分别定义了别名,每个别名都配置了独立的采样率、声道数、格式、缓冲区大小等参数,但所有别名均指向同一个硬件PCM设备"hw:0,0"。
单独调用snd_pcm_open()打开任意一个别名对应的输入,都能成功采集音频,但无法同时打开多个输入——打开第二个输入时,snd_pcm_open()会返回设备忙错误。
我的核心问题是:如何同时开启多个采集输入?
关于ALSA中"device"定义的疑问
我原本计划在/etc/asound.conf中定义使用pcm "hw:0,1"的别名,让snd_pcm_open()调用声卡0上的第二个设备,但当前Linux驱动只为该声卡初始化了一个采集设备和一个播放设备。相关系统文件内容如下:
/proc/asound/cards:
0 [wm82810audio ]: wm8281_0-audio - wm8281.0-audio
/proc/asound/devices:
2: [ 0- 0]: digital audio playback 3: [ 0- 0]: digital audio capture 4: [ 0]. : control 33: : timer
是否可以通过配置(例如在/etc/modprobe.d/alsa-base.conf中调整参数)让ALSA驱动为该声卡初始化多个"device",从而支持hw:0,1这类设备别名?
关于ALSA中"stream/substream"用法的疑问
是否需要在/etc/asound.conf中显式定义"stream"或"substream"?以下是我当前使用的别名配置示例:
pcm.hs1c-16k { type plug slave.pcm { type dsnoop ipc_key 11110002 slave { pcm "hw:0,0" rate 16000 channels 8 format S16_LE buffer_size 640 } bindings [ 0 ] # 0 --> WM8281 IN3R --> AIF1TX1 } hint.description "Headset 1 microphone capture @16k Hz" }
(不同的bindings值可对应编解码器上的不同输入通道)
能否通过这类别名配置,实现同时打开多个独立的采集流,每个流分别采集该多输入编解码器上的不同输入通道?
内容的提问来源于stack exchange,提问作者Andres Gonzalez
相关产品推荐
相关产品推荐

