ALSA学习(1)——框架学习和基本的工具使用


博客学习地址: https://www.cnblogs.com/jason-lu/archive/2013/06/07/3123472.html

一、框架构图

在这里插入图片描述

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,我们无论作安卓开发还是linux开发都是基于这个框架来的。
从这张图片我们可以看到大致的框架结构,上层的app调用alsa提供的alsa_lib的接口,来实现我们的播放和录音等很多audio的功能。
kernel空间就是们作为底层开发者修改的地方,driver其实就是我们底层的驱动相关的代码,很多相关厂家都已经提供对应的驱动,同时这些驱动也和alsa-soc的接口对应,很多厂家在soc里面做了一些.so文件。这是为了一些防止商业机密泄漏,我们不用太关系,但是我们需要去了解一些对应的接口调用。

二、tinymix的使用

在调试过程中,我们经常要使用对应的底层工具去查看对应的东西。
对应的工具我们需要编译到对应的板子里面去,这样我们才能使用对应的工具。
一般在android/external/tinyalsa目录,编译完成后就会生成一个.so文件和四个对因的工具文件(1、tinycap 2、tinymix 3、 tinypcminfo 4、tinyplay
),对应的工具已经上传:https://download.csdn.net/download/weixin_51178981/33427599

2.1 tinymix

vt_ipc_rk88:/ # tinymix
Mixer name: 'rockchip,es8316-codec'
Number of controls: 38
ctl	type	num	name                                     value

0	INT	2	HP Playback Volume                       0 0
1	INT	2	HPMixer Gain                             0 0
2	INT	2	DAC Playback Volume                      192 192
3	BOOL	1	Enable DAC Soft Ramp                     Off
4	INT	1	DAC Soft Ramp Rate                       4
5	ENUM	1	Playback Polarity                        L Invert
6	BOOL	1	DAC Notch Filter                         Off
7	BOOL	1	DAC Double Fs Mode                       Off
8	INT	1	DAC Volume Control-LeR                   0
9	INT	1	DAC Stereo Enhancement                   0
10	BOOL	1	MIC Boost                                On
11	INT	1	Input PGA                                6
12	INT	1	ADC Capture Volume                       192
13	BOOL	1	ADC Soft Ramp                            On
14	ENUM	1	Capture Polarity                         Normal
15	BOOL	1	ADC Double FS Mode                       Off
16	INT	1	ALC Capture Target Volume                10
17	INT	1	ALC Capture Max PGA                      13
18	INT	1	ALC Capture Min PGA                      8
.....

调试过音频文件的同事都知道,音频文件有很多通路(开关)去设置,通过tinymix我们可以看到那些开关是开的,那些是关的,我们底层可以去修改寄存器的值去设置开关,在调试的时候也可使用工具直接去打开或者关闭。
同样的也可以去修改声音的大小。

tinymix + (ctl号) 可以看到对应的信息
vt_ipc_rk88:/ # tinymix 7
DAC Double Fs Mode: Off

通过设置 0 or 1可以打开或者关闭对应的接口(因为开关好像都是bool类型的)

vt_ipc_rk88:/ # tinymix 7
DAC Double Fs Mode: Off
vt_ipc_rk88:/ # tinymix 7 1                                                                                                     
vt_ipc_rk88:/ # 
vt_ipc_rk88:/ # tinymix 7                                                                                                           
DAC Double Fs Mode: On
vt_ipc_rk88:/ # tinymix 7 0                                                                                                     
vt_ipc_rk88:/ # 
vt_ipc_rk88:/ # tinymix 7                                                                                                           
DAC Double Fs Mode: Off

修改音量和上面类似

ctl	type	num	name                                     value
0	INT	2	HP Playback Volume                       0 0
1	INT	2	HPMixer Gain                             5 5
2	INT	2	DAC Playback Volume                      192 192
......

vt_ipc_rk88:/ # tinymix 2 100 100

ctl	type	num	name                                     value
0	INT	2	HP Playback Volume                       0 0
1	INT	2	HPMixer Gain                             5 5
2	INT	2	DAC Playback Volume                      100 100
....

只有一个值的就需要输入一个值就可以了

修改模式

ctl	type	num	name                                     value
...
13	BOOL	1	ADC Soft Ramp                            On
14	ENUM	1	Capture Polarity                         Normal
......

vt_ipc_rk88:/ # tinymix 14                                                                                                          
Capture Polarity: >Normal Invert
会有对应的提示,显示他的模式 小箭头指出的是现在的模式
vt_ipc_rk88:/ # tinymix 14 Invert 

ctl	type	num	name                                     value
...
13	BOOL	1	ADC Soft Ramp                            On
14	ENUM	1	Capture Polarity                         Invert

2.2 tinypcminfo

tinypcminfo用于查看pcm通道的相关信息

vt_ipc_rk88:/ # tinypcminfo -D /dev/snd                                                                                           
Info for card 0, device 0:

PCM out:
      Access:	0x000009
   Format[0]:	0x000044
   Format[1]:	0x000010
 Format Name:	S16_LE, S24_LE, S20_3LE
   Subformat:	0x000001
        Rate:	min=8000Hz	max=96000Hz
    Channels:	min=2		max=2
 Sample bits:	min=16		max=32
 Period size:	min=4		max=65536
Period count:	min=2		max=4096

PCM in:
      Access:	0x000009
   Format[0]:	0x000044
   Format[1]:	0x000010
 Format Name:	S16_LE, S24_LE, S20_3LE
   Subformat:	0x000001
        Rate:	min=8000Hz	max=96000Hz
    Channels:	min=2		max=2
 Sample bits:	min=16		max=32
 Period size:	min=4		max=65536
Period count:	min=2		max=4096

2.3 tinycap

用于录音,只能用于录制wav的音频文件
tinycap + 录制音频的名字

vt_ipc_rk88:/sdcard # tinycap 1.wav                                                                                                 
Capturing sample: 2 ch, 44100 hz, 16 bit

后面也可以加对应的参数,详情可以去看看对应的资料,不加的花。就是按照默认的参数。

2.4 tinyplay

用于播音,只能用于播音wav的音频文件
和tinycap运用方式一样。

vt_ipc_rk88:/sdcard # tinyplay 1.wav  
vt_ipc_rk88:/sdcard # tinyplay 1.wav                                                                                                
Playing sample: 2 ch, 44100 hz, 16 bit 1146880 bytes

三、对应设备文件查看

vt_ipc_rk88:/ # ls /dev/snd/                                                                                                        
controlC0 pcmC0D0c pcmC0D0p pcmC0D1p timer
controlC0 -->              用于声卡的控制,例如通道选择,混音,麦克风的控制等
pcmC0D0c -->               用于录音的pcm设备
pcmC0D0p -->               用于播放的pcm设备
timer -->                       定时器

C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……
学习Android音频系统和ALSA框架,您需要掌握以下知识点: 1. Linux内核音频子系统的工作原理:包括音频驱动程序、音频设备、音频接口等。 2. ALSA框架的工作原理:包括alsa-lib、alsa-utils、alsa-plugins等组成部分,以及与音频设备驱动的交互方式。 3. Android音频系统架构:包括Audio HAL、AudioFlinger、AudioTrack、AudioRecord、AudioEffect等模块的作用和相互关系。 4. Android音频API的使用:包括MediaPlayer、SoundPool、AudioTrack、AudioRecord等类的使用方法和音频数据的处理。 5. Android音频应用程序的开发:包括音频录制、音频播放、音频处理等方面的实现技巧。 下面是学习Android音频系统和ALSA框架的具体步骤: 1. 学习Linux内核音频子系统的工作原理,可以参考Linux内核开发相关的书籍和网上资料。 2. 学习ALSA框架的工作原理,可以参考ALSA官方文档和相关书籍,也可以通过查看Android源代码中的alsa-lib、alsa-utils等目录中的代码来了解。 3. 学习Android音频系统架构,可以参考官方文档和书籍,也可以通过查看Android源代码中的Audio HAL、AudioFlinger等目录中的代码来了解。 4. 学习Android音频API的使用,可以参考官方文档和书籍,也可以通过查看Android源代码中的MediaPlayer、SoundPool、AudioTrack、AudioRecord等类的实现代码来了解。 5. 学习Android音频应用程序的开发,可以参考官方文档和书籍,也可以通过查看Android源代码中的音频应用程序的实现代码来了解。 总之,学习Android音频系统和ALSA框架需要掌握一定的Linux内核知识和Android开发经验,需要不断地阅读相关文档和代码,并进行实践和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值