You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单张多输入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:38:11