声卡
_kerneler
这个作者很懒,什么都没留下…
展开
-
【转】MP3文件头格式
MP3文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)ID3V2包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。Frame一系列的帧,个数由文件大小和帧长决定每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定每个FRAME又分为帧头和数据实体两部分帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立ID3V2包含了作者,作曲,专辑等信息,长度为128BYTE。/*~~~~~~~~~~~~~*/M转载 2020-10-10 17:45:38 · 2431 阅读 · 0 评论 -
aplay amixer用法详解
aplayaplay -t raw -c 1 -f S16_LE -r 8000 test2.pcm-t: type raw表示是PCM-c: channel 1-f S16_LE: Signed 16bit-width Little-Endian-r: sample rate 8000PCM是最raw的音频数据,没有任何头信息。WAV文件就是PCM+头信息,头信息就是上述的声道数,sample rate这些。所以WAV文件可以直接播放,而PCM需要手动指定这些信息之后才能播放。amixer用原创 2020-09-01 10:40:40 · 3634 阅读 · 0 评论 -
i2c-tools使用及调试
i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能。一、下载i2c-tools,交叉编译 (或者直接在openwrt里写个Makefile加个包,省事)1、从开源网站http://dl.lm-sensors.org/i2c-tools/releases/下载i2c-tools,a. 解压后:b. 修改makefile文件。c. 然后保存退出。直接make,进行编译。编译完成后在tools/文件夹下会有如下几个可执行文原创 2020-08-27 19:39:19 · 926 阅读 · 0 评论 -
一些笔记:关于mt7628 openwrt 音频调试
没有做过比这版更烂的开发,坑还在,开发还在继续,记一下笔记吧,或许找到一些灵感。先用 mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 这版官方SDK(从官方网站上看这是最新的一版openwrt SDK,2016年的,是的,你没看错),然后i2c都巨艰难的调试出来,因为makefile里dev-i2c.o都被屏蔽了,坑。再接着发现虽说kernel 是 linux-3.10.14,但驱动写法居然是2.6,连dts设备树都没有。换开源的lede-17.01,有设备树,熟悉的转载 2020-08-20 12:20:38 · 2163 阅读 · 0 评论 -
MTK: ALSA声卡驱动之一:ALSA架构概述
一、概述1、硬件由上可见,播放音频时,通常CPU通过总线传送给CODEC音频PCM数据,然后CODEC进行DA转换、放大、增益等一系列处理,最后传送给speaker,录音流程反之。2、软件架构用户空间的alsa库对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa soc其实是对alsa驱动的封装统一,为了兼容不同平台的驱动,同时风格更统一,下面会进一步讨论。3、音频驱动架构音频驱动里有三个很重要的部分,cpu_dai、codec_转载 2020-08-25 16:56:29 · 1696 阅读 · 0 评论 -
MTK:ALSA声卡驱动之二:音频设备与驱动的衔接、注册
1、背景概述本方案基本MT7628平台,wm8960为codecs,i2s总线播放,相关代码随后上传,结合代码进行分析会更清晰2、设备注册与驱动触发综上所述,soc_mtk_i2s_dev、mt76xx_audio_device、soc_mtk_pcm_dev、设备挂载到platform平台上,从而触发mt76xx_i2s_driver、soc_driver、mt76xx_pcm_driver驱动程序的probe,注册挂载相应的dai结构体,codec_wm8960则是挂载在i2c总线上,触发wm8转载 2020-08-25 16:58:54 · 1473 阅读 · 0 评论 -
MTK: ALSA声卡驱动之三:component、dai、codec以及platform之间的关系
一、背景概述上节说到platform_device加载,触发mt76xx_i2s_driver、soc_driver、mt76xx_pcm_driver驱动程序的probe,这里面做了哪些工作,如下图二、snd_soc_component与snd_soc_dai的关系1、mt76xx_i2s_drv_probe的实现在mt76xx_i2s_driver的probe函数里,执行了snd_soc_register_component这个函数,这里面即初始化struct snd_soc_dai *转载 2020-08-25 17:03:48 · 1746 阅读 · 0 评论 -
MTK: ALSA声卡驱动之四:machine和dai_link的作用和实现
一、模块化管理alsa音频驱动模块化管理,是linux驱动比较典型的代码架构,app调用snd_pcm_open、snd_pcm_writei、snd_pcm_readi等接口到alsa_lib后,也根据一系列的操作(具体详细调用以及设备节点的操作下节会详细解释)后,调用到alsa_soc,这也是alsa驱动架构的核心,一般情况下,这个alsa_soc基本不会变,从而调用到soc_pcm_open、soc_pcm_prepare、soc_pcm_trigger、soc_pcm_ioctl等接口,这里面接转载 2020-08-25 17:07:13 · 1590 阅读 · 0 评论 -
alsa驱动:codec配置通信接口实现(i2c)
Alsa驱动snd_soc_read的底层实现:在分析snd_soc_codec_driver的结构体时,发现有些芯片的驱动中定义了字段reg_word_size, reg_cache_size, reg_cache_default,但没有定义read/write,如wm8993:static struct snd_soc_codec_driver soc_codec_dev_wm8993 = { .probe = wm8993_probe, .remove = wm89原创 2020-08-27 20:57:48 · 802 阅读 · 0 评论