为我的嵌入式设备定义一个干净且有效的asound.conf
收藏

我目前正在使用来自参考设计BSP的非常复杂的asound.conf文件。我想定义自己的asound.conf。
我当前对嵌入式设备的需求:
仅以44100赫兹的频率播放单声道文件。在扬声器模式下,我只有一个输出扬声器。
当我插上插头时,我必须能听到两个耳机的声音。
我还需要能够录制从麦克风的声音在单声道11500赫兹的速率。
我可用的声卡:

# aplay  -l
**** List of PLAYBACK Hardware Devices ****
card 0: wm8960audio [wm8960-audio], device 0: HiFi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: wm8960audio [wm8960-audio], device 1: HiFi-ASRC-FE (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
# 

我使用的输出和输入的速率不一样。但是ASRC设备允许我以不同的速率保持良好的性能。这就是为什么我要使用设备1而不是设备0。
我试图将我的配置定义为:
# cat /etc/asound.conf 
pcm_slave.out {
                pcm {
                        type hw
                        card 0
                        device 1
                }
                channels 2
                period_time 0
                period_size 512
                buffer_size 1024
                rate 44100
}

pcm.out_mono {
        ipc_key 1042
        type dmix
        slave out
        bindings.0 0
        bindings.0 1
}

pcm_slave.in {
                pcm {
                        type hw
                        card 0
                        device 1
                }
                channels 2
                rate 11025
}

pcm.in_mono {
        ipc_key 1043
        type dsnoop
        slave in
        bindings.0 1
}

它的工作与扬声器(所以只有一个扬声器)和cpu性能非常好。我用out_mono pcm播放声音。但当我在单声道pcm中使用时,我只能在一个耳机中以插孔模式听到声音。在asound.conf中,我试图说我想在两个输出上重定向mono声音,但它不起作用:
    bindings.0 0
    bindings.0 1

第二行绑定正在删除第一行。。。所以我正在寻找一种方法,能够听到两个输出的声音。当然,如果我使用默认的pcm而不是out_mono,那么声音在两个输出端都能正常工作。
我有没有误解了asound conf的定义?


最佳答案:

dmix插件有自己的通道到从通道的1:1映射。
要允许其他转换,请使用plug插件。它的绑定可以配置为ttable,但默认值应该是OK:

pcm.out_mono {
    type plug
    slave.pcm {
        ipc_key 1042
        type dmix
        slave out
    }
}

公众号