【milkv】internal codec -- mic

2023-10-23 14:12
文章标签 codec internal mic milkv

本文主要是介绍【milkv】internal codec -- mic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、硬件
  • 二、dts
  • 三、配置引脚board_init
    • pin
  • 四、makefile
  • 五、config
  • 六、添加tinyalsa
  • 七、测试结果
    • 7.1 查看录制device信息
    • 7.2 录制音频
    • 7.3 pc端获取录制好的设备
    • 7.4 使用audacity查看波形

一、硬件

在这里插入图片描述
i2s0 —— adc
i2s1 —— pdm
i2s3 —— dace spk_en存疑

i2s2 —— 外接解码器

pdm可以不用,因为i2s1的di/do用来连接led了。
注意:这里i2s1的信号和内部codec的speaker输出复用了一个引脚,结果给led了。

mic的型号是4015,淘宝上可以直接搜到,插入的时候对准板子上的圆环,对其的话正负就对了。

二、dts

duo_buildroot_sdk\duo-buildroot-sdk\build\boards\default\dts\cv180x\cv180x_base.dtsi

adc: adc@0300A100 {compatible = "cvitek,cv182xaadc";reg = <0x0 0x0300A100 0x0 0x100>;clocks = <&i2s_mclk 0>;clock-names = "i2sclk";clk_source = <0x04130000>; /* MCLK source is I2S3 */};dac: dac@0300A000 {compatible = "cvitek,cv182xadac";reg = <0x0 0x0300A000 0x0 0x100>;clocks = <&i2s_mclk 0>;clock-names = "i2sclk";};pdm: pdm@0x041D0C00 {compatible = "cvitek,cv1835pdm";reg = <0x0 0x041D0C00 0x0 0x100>;clocks = <&i2s_mclk 0>;clock-names = "i2sclk";};sound_adc {compatible = "cvitek,cv182xa-adc";cvi,model = "CV182XA";cvi,card_name = "cv182xa_adc";};sound_dac {compatible = "cvitek,cv182xa-dac";cvi,model = "CV182XA";cvi,card_name = "cv182xa_dac";};sound_PDM {compatible = "cvitek,cv182x-pdm";cvi,model = "CV182X";cvi,card_name = "cv182x_internal_PDM";};

cvi-pdm用Cv1835_cv1835pdm.c
182x的dai_link还是旧的接口,编译不过

//cv182x_cv182xpdm.c
static struct snd_soc_dai_link cv182x_pdm_dai = {.name = "cv182x-i2s-pdm",.stream_name = "cv182x-pdm",.cpu_dai_name = "4110000.i2s",.codec_dai_name = "cv1835pdm",.platform_name = "4110000.i2s",.codec_name = "41d0c00.pdm",.ops = &cv182x_pdm_ops,.init = cv182x_pdm_codec_init,.dai_fmt = SND_SOC_DAIFMT_I2S| SND_SOC_DAIFMT_IB_NF| SND_SOC_DAIFMT_CBM_CFM,
};

默认i2s是关闭的,需要在如下文件中打开。

duo_buildroot_sdk\duo-buildroot-sdk\build\boards\default\dts\cv180x\cv180x_asic_qfn.dtsi

	/* /delete-node/ i2s@04100000;/delete-node/ i2s@04130000;/delete-node/ i2s@04110000;/delete-node/ i2s@04120000; */

三、配置引脚board_init

PINMUX_CONFIG(SPK_EN, SPK_EN);
PINMUX_CONFIG(PAD_AUD_AINL_MIC, PAD_AUD_AINL_MIC);

在这里插入图片描述
在这里插入图片描述

存疑,如果spk_en只是开关,那out应该是哪里?难道是led吗?

pin

duo_buildroot_sdk\duo-buildroot-sdk\u-boot-2021.10\board\cvitek\cv180x
这里有board的寄存器信息,以及board_init中的接口。

#define SPK_EN__XGPIOA_15 3#define PAD_AUD_AINL_MIC__XGPIOC_23 3
#define PAD_AUD_AINL_MIC__IIS1_BCLK 4
#define PAD_AUD_AINL_MIC__IIS2_BCLK 5
#define PAD_AUD_AINR_MIC__XGPIOC_22 3
#define PAD_AUD_AINR_MIC__IIS1_DO 4
#define PAD_AUD_AINR_MIC__IIS2_DI 5
#define PAD_AUD_AINR_MIC__IIS1_DI 6
#define PAD_AUD_AOUTL__XGPIOC_25 3
#define PAD_AUD_AOUTL__IIS1_LRCK 4
#define PAD_AUD_AOUTL__IIS2_LRCK 5
#define PAD_AUD_AOUTR__XGPIOC_24 3
#define PAD_AUD_AOUTR__IIS1_DI 4
#define PAD_AUD_AOUTR__IIS2_DO 5
#define PAD_AUD_AOUTR__IIS1_DO 6

四、makefile

结合上述dts中的compatible,去代码中匹配对应的驱动。

obj-$(CONFIG_SND_SOC_CV182XA_CV182XAADC) += cv181x_cv181xadc.o
obj-$(CONFIG_SND_SOC_CV182XA_CV182XADAC) += cv181x_cv181xdac.oifeq ($(CONFIG_SND_SOC_CV182XAADC),m)
obj-$(CONFIG_SND_SOC_CV182XAADC) += cv182xa_ai.o
cv182xa_ai-objs += cv181xadc.o
else
obj-$(CONFIG_SND_SOC_CV182XAADC) += cv181xadc.o
endififeq ($(CONFIG_SND_SOC_CV182XADAC),m)
obj-$(CONFIG_SND_SOC_CV182XADAC) += cv182xa_ao.o
cv182xa_ao-objs += cv181xdac.o
else
obj-$(CONFIG_SND_SOC_CV182XADAC) += cv181xdac.o
endif

五、config

打开config
duo_buildroot_sdk\duo-buildroot-sdk\build\boards\cv180x\cv1800b_milkv_duo_sd\linux\cvitek_cv1800b_milkv_duo_sd_defconfig

#PDM
CONFIG_SND_SOC_CV1835PDM=y
CONFIG_SND_SOC_CV1835_CV1835PDM=y#ADC
CONFIG_SND_SOC_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y#DAC
CONFIG_SND_SOC_CV182XADAC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

打开i2s0/1/3

六、添加tinyalsa

这个参考我另一个帖子,这里就不赘述了。

七、测试结果

7.1 查看录制device信息

[root@milkv]~# cat /proc/asound/devices0: [ 0]   : control16: [ 0- 0]: digital audio playback32: [ 1]   : control33:        : timer56: [ 1- 0]: digital audio capture64: [ 2]   : control80: [ 2- 0]: digital audio playback

如图,当前支持三个pcm设备,其中card1 device0是录制设备,也就是自带mic。

7.2 录制音频

执行下述命令
tinycap:tinyalsa的工具,用于录制音频
-D:card1,具体见/proc/asound/cards的声卡信息
-d:声卡下属的device,查看/proc/asound/device。
-t:录制时长5秒
-c:录制单声道,默认是双声道

[root@milkv]~# tinycap a.wav -D 1 -d 0 -t 5 -c 1
Capturing sample: 1 ch, 48000 hz, 16 bit
Captured 241664 frames

在这里插入图片描述

在这里插入图片描述

7.3 pc端获取录制好的设备

在windows电脑的cmd窗口,输入命令

/root/a.wav:录制存放的音频路径
./:当前cmd窗口所在的文件夹路径

scp root@192.168.42.1:/root/a.wav ./

在这里插入图片描述

7.4 使用audacity查看波形

如图,其中高幅值的是我敲打桌子的声音。

在这里插入图片描述
如下图,这是我说话的声音,但是很明显,收音很小,虽然是贴在设备上说的,这个可以通过tinymix改动gain值变大。
底噪非常大,如果想要听清人声,底噪也同步放大,如果需要识别,那需要加上降噪处理。
在这里插入图片描述
至此,duo自带开发板的录制功能ok了。

这篇关于【milkv】internal codec -- mic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/268372

相关文章

the following classes could not be found android.support.v7.internal.

打开XML的界面时候显示 rendering problems: the following classes could not be found android.support.v7.internal.....。 后来发现http://stackoverflow.com/questions/33742114/the-following-classes-could-not-be-fou

【python 编码问题】UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not

插入oracle 数据发生 错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 131-136: ordinal not in range(128) 先说解决办法: python2.7版本,在开头加入下面语句 import sysreload(sys)sys.setdefaultencoding

【深度分析】报错:com.sun.org.apache.regexp.internal does not exist

文章目录 问题分析思路这个类在哪里?本地能跑,Jenkins 上不能跑?JDK 把这个 package 删掉了?JDK 啥时候把 package 删掉了?翻阅 JDK8 Release Notes查阅 Jakarta-regexp查阅 bug 说明 解决参考 问题 项目本地 mvn clean install 打包都正常,但是到 jenkins 中打包就会报错。 报错信息

麦克风MIC 工作原理以及灵敏度调整

https://blog.csdn.net/Charles0512/article/details/50472467?locationNum=6&fps=1 1、先看MIC电路连接 这是个差分输入的例子,MICP2和MICN2是一对差分信号,经过C156的滤波,输入到MIC两端 MIC两引脚分别是到地和供电,上图的R177参数就关系到MIC输入的灵敏度 2、电阻R177影响灵敏度分析 M

Android 引用com.android.internal

https://www.cnblogs.com/zhou-guobao/p/5145714.html 参考: https://stackoverflow.com/questions/3486819/how-to-resolve-the-error-com-android-internal-r-cannot-be-resolved-when-i-usin 自己写的apk项目需要使用framewor

python2.7 的中文编码处理,解决UnicodeEncodeError: 'ascii' codec can't encode character 问题

python2.7 的中文编码处理 最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。 很快,我就遇到了异常: UnicodeEncodeError: 'ascii' codec can't encode characters in p

解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128

1.问题描述:一个在Django框架下使用Python编写的定时更新项目,在Windows系统下测试无误,在Linux系统下测试,报如下错误: ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 2.原因分析:字符问题。在Windows系统转Linux系统时,字符问题很容易出现。 3.解决办

《Python开发 - Python疑难杂症》Pyinstaller打包报错【UnicodeDecodeError: ‘utf-8‘ codec can‘t decode】分析与解决

1报错情景描述 笔者在使用PyQt5写了个程序后,使用Pyinstaller打包,出现以下错误: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 110: invalid continuation byte 2报错分析 从报错代码能够看出,编码问题导致的程序出错,解决办法就是修改编码方式。 3解决

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

问题背景 在python2中安装了labelme,可以正常运行,然后又再python3中安装了labelme。后来python2中的labelme不能运行,python3中的labelme可以运行。 具体问题 UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-3: ordinal not in ra

aiohttp遇到非法字符的处理(UnicodeDecodeError: 'utf-8' codec can't decode bytes in position......)

这个问题困扰了我将近一天时间,如果使用text()函数会一直报“UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 24461-24462: invalid continuation byte”的错误,如果使用read()函数以二进制输出在后面解析的时候中文是乱码,网上查了很多资料,主要也是自己的疏忽自己看了源码,一直纠