用2 mic 录音

我用的固件是 ROC-RK3308-CC_Buildroot_normal_20181114.img ,并有8 mic 的圆板 DMIC_Array_v1.0

用以下的命令 8路 录音没有问题

 # arecord -D hw:0,0 -c 8 -r 16000 -f S16_LE --period-size 1024 --buffer-size 65536 -t wav -d 5 /userdata/aaa.wav

但用2路录音却不能:

 # arecord -D hw:0,0 -c 2 -r 16000 -f S16_LE --period-size 1024 --buffer-size 65536 -t wav -d 5 /userdata/aaa.wav
Recording WAVE '/userdata/aaa.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo
arecord: set_params:1345: Channels count non available

因为我只需要 2路,可怎样解决?

  1. 尝试修改SDK下kernel的dts
    diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3308-roc-cc-dmic-pdm_emmc.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3308-roc-cc-dmic-pdm_emmc.dts
    index b996358..91705db 100644
    — a/kernel/arch/arm64/boot/dts/rockchip/rk3308-roc-cc-dmic-pdm_emmc.dts
    +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3308-roc-cc-dmic-pdm_emmc.dts
    @@ -16,7 +16,7 @@
    status = “okay”;
    compatible = “rockchip,rk3308-multi-dais”, “rockchip,multi-dais”;
    dais = <&pdm_8ch>, <&i2s_8ch_2>;
  •           capture,channel-mapping = <6 2>;
    
  •           capture,channel-mapping = <2 0>;
              playback,channel-mapping = <0 2>;
              bitclock-inversion = <1 0>;
      };
    
  1. 重新编译固件
  2. SDK编译及烧录,详细见维基教程

已经照示编译固件 但仍不能。

本帖最后由 firefly_zhongw 于 2020-1-4 09:49 编辑

  1. 修改后编译烧录的固件,看下声卡信息 cat /proc/asound/card
  2. 修改的文件内容是哪些以及编译步骤是什么?
  3. 我这边修改后验证:/userdata # cat /proc/asound/card
    card0/ card1/ card7/ cards
    /userdata # cat /proc/asound/cards
    0 [rockchiprk3308v]: rockchip_rk3308 - rockchip,rk3308-vad
    rockchip,rk3308-vad
    1 [rockchiprk3308p]: rockchip_rk3308 - rockchip,rk3308-pcm
    rockchip,rk3308-pcm
    7 [Loopback ]: Loopback - Loopback
    Loopback 1

/userdata # arecord -D hw:0,0 -c 2 -r 16000 -f S16_LE 1.wav -d 5
Recording WAVE ‘1.wav’ : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo

/userdata # soxi 1.wav
Input File : ‘1.wav’
Channels : 2
Sample Rate : 16000
Precision : 16-bit
Duration : 00:00:05.00 = 80000 samples ~ 375 CDDA sectors
File Size : 320k
Bit Rate : 512k
Sample Encoding: 16-bit Signed Integer PCM
/userdata #

在编译的固件内:

/ # cat /proc/asound/card
cat: /proc/asound/card: No such file or directory

/ # ls -l /proc/asound
total 0
lrwxrwxrwx 1 root root 5 Jan 5 01:24 Loopback → card7
dr-xr-xr-x 4 root root 0 Jan 5 01:24 card0
dr-xr-xr-x 6 root root 0 Jan 5 01:24 card7
-r–r–r-- 1 root root 0 Jan 5 01:24 cards
-r–r–r-- 1 root root 0 Jan 5 01:24 devices
-r–r–r-- 1 root root 0 Jan 5 01:24 pcm
lrwxrwxrwx 1 root root 5 Jan 5 01:24 rockchiprk3308v → card0
-r–r–r-- 1 root root 0 Jan 5 01:24 timers
-r–r–r-- 1 root root 0 Jan 5 01:24 version

/ # ls -l /proc/asound/card0
total 0
-r–r–r-- 1 root root 0 Jan 5 01:25 id
dr-xr-xr-x 3 root root 0 Jan 5 01:25 pcm0c
dr-xr-xr-x 3 root root 0 Jan 5 01:25 pcm0p

/ # cat /proc/asound/card0/id
rockchiprk3308v

/ # cat /proc/asound/card0/pcm0c/info
card: 0
device: 0
subdevice: 0
stream: CAPTURE
id: dailink-multicodecs multicodec-0
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1

/ # cat /proc/asound/card0/pcm0p/info
card: 0
device: 0
subdevice: 0
stream: PLAYBACK
id: dailink-multicodecs multicodec-0
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
/ #

修改的文件内容是哪些以及编译步骤是什么?

我用 ./build.sh 一键build 生成 rockdev/update.img

本帖最后由 firefly_zhongw 于 2020-1-6 16:19 编辑

  1. rk3308-roc-cc-dmic-pdm_emmc.dts文件修改的内容贴出来看一下
  2. 如果是用最新的SDK,使用ROC-RK3308-CC,编译方式参考维基教程

firefly_zhongw 发表于 2020-1-6 16:10
rk3308-roc-cc-dmic-pdm_emmc.dts文件修改的内容贴出来看一下

rk3308-roc-cc-dmic-pdm_emmc.dts文件修改的内容贴出来看一下

好的,现在上载
rk3308-roc-cc-dmic-pdm_emmc.zip (1.13 KB)

  1. 删除buildroot的output目录
  2. 全自动编译方式:
    ./build.sh roc-rk3308-cc_release_BoardConfig.mk
    ./build.sh
  3. 维基教程上都有说明

本帖最后由 keithc 于 2020-1-7 11:25 编辑

谢谢解说 我之前没有删除 output 目录 。 2mic 成功了 .
另外 如要1 mic 是否应把 kernel/arch/arm64/boot/dts/rockchip/rk3308-roc-cc-dmic-pdm_emmc.dts
capture,channel-mapping = <2 0> 改成 capture,channel-mapping = <1 0> ? 但好像又不成功

不支持奇数通道

改动後 好像没有 数字麦增益 export ALSA_LIB_ADD_GAIN=4 没有放大

keithc 发表于 2020-1-7 11:05
谢谢解说 我之前没有删除 output 目录 。 2mic 成功了 .
另外 如要1 mic 是否应把 kernel/arch/arm64/boo …

请问后面如果要改成1mic怎么改?解决了吗

无水成木 发表于 2022-1-10 18:42
请问后面如果要改成1mic怎么改?解决了吗

底层最低只支持2 mic,不支持1 mic

哥,请教一下,8路mic,怎么选择指定的mic录音呢?比如选择前面2路,后面6路就不录,选择最后两路,前面6路就不录。

谢谢分享