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

文章目录

  • 一、框架构图
  • 二、tinymix的使用
    • 2.1 tinymix
    • 2.2 tinypcminfo
    • 2.3 tinycap
    • 2.4 tinyplay
  • 三、对应设备文件查看

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

一、框架构图

ALSA学习(1)——框架学习和基本的工具使用_第1张图片

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中的命名规则。

你可能感兴趣的:(音视频,audio)