How to config chan_alsa in openwrt for mt7628

I hope to install asterisk to openwrt. I use a mt7628+wm8960 hardware and openwrt-21.02 system. I know chan_alsa use a channel. but mt7628 only to use 2 channels. I can not let chan_alsa normal running. who to know how to configure the system to let chan_alsa working?

root@OpenWrt:~/wav# arecord -Dhw:0 -f cd -r 8000 -c 1 -t wav /tmp/rec.wav
Recording WAVE '/tmp/rec.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
arecord: set_params:1349: Channels count non available

You mean mono vs. stereo? Something along those lines may help:

yes. chan_alsa is mono. but openwrt's wm8960 driver is stereo.

I try to create a asound.conf to convert mono. It's working

root@OpenWrt:/etc# cat asound.conf
pcm.!dmix {
        type dmix
        ipc_key 1024
        ipc_key_add_uid yes
        slave {
                pcm "hw:0,0"
                period_time 0
                period_size 2048
                buffer_size 16384
                format S16_LE
                rate 48000
        }
}

pcm.!dsnoop {
        type dsnoop
        ipc_key 2048
        ipc_key_add_uid yes
        slave {
                pcm "hw:0,0"
                period_time 0
                period_size 2048
                buffer_size 16384
                format S16_LE
                rate 4800
        }
}

pcm.asymed {
        type asym
        playback.pcm "dmix"
        capture.pcm "dsnoop"
}

pcm.!default {
        type plug
        slave.pcm "asymed"
}

pcm.dsp0 {
        type plug
        slave.pcm "asymed"
}

ctl.mixer0 {
        type hw
        card 0
}

root@OpenWrt:/etc# arecord -D default -f cd -r 8000 -c 1 -t wav /tmp/rec.wav
Recording WAVE '/tmp/rec.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
^CAborted by signal Interrupt...
arecord: pcm_read:2152: read error: Interrupted system call
1 Like