1、AEC(Acoustic Echo Cancellor):反应肃清。
2、AGC(Automatic Gain Control):自动增益补偿,调度MIC收音量。

3、ALSA(Advanced Linux Sound Architecture):高等Linux声音架构。

4、ANS(Automatic Noise Suppression):背景噪音抑制,ANS可探测出背景固定频率的杂音并肃清背景噪音。
5、BCK(Bit Clock Line):位时钟,对应数字音频的每一位数据。标准称为SCK(Serial Clock),串行时钟。SCK=2x采样频率x采样位数
6、DAI(Digital Audio Interface):数字音频接口。
7、DAPM(Dynamic Audio Power Management):动态电源管理,DAPM可使基于linux的移动设备上的音频子系统,在任何时候都事情在最小功耗状态。
8、DRC(Dynamic Range Control):动态压缩,将音频输出掌握在一定范围内。
9、EQ(Equaliser):均衡器,通过对声音某一个或多个频段进行增益或衰减,达到调度音色的目的。
10、I2S(Inter-IC Sound):IC间传输数字音频资料的一种接口标准,采取序列的办法传输2组(旁边声道)资料。
11、LRCK(Left-Right Clock):帧时钟,用于切换旁边声道数据,0:左声道;1:右声道。标准称为WS(World Select),声道选择;或称为FS(Frame Sync),帧同步;LRCK的频率=采样频率。
12、MCLK(Master Clock):主时钟,一样平常MCLK=256LRCK。不是I2S标准中的一部分,紧张用来同步仿照/数字转换器的内部操作。
13、Mono:单声道。
14、OSS(Open Sound System):开放声音系统。
15、PCM(Pulse Code Modulation):脉冲编码调制,I2S是PCM的子集。
16、ramp:逐步增加或减少音量等级,避免声音连忙变革,用于停息或规复音乐。
17、Stereo:双声道
18、TDM(Time Division Multiplexing):时分复用。I2S最多只能传2声道数据,TDM最多支持16通道。
二、I2S接口I2S是飞利浦定义的数字音频传输标准,用于数字音频数据在系统内部器件之间传输。
I2S是PCM的一个分支,接口定义相同。I2S的采样率一样平常为44.1/48KHZ,PCM采样频率一样平常为8/16KHZ等。
I2S接口有4组旗子暗记:SCK(位时钟)、LRCK(帧时钟)、SDI/SDO(数据)。
在I2S总线上,只能同时存在一个主设备和发送设备,主设备可以是发送设备或吸收设备。常见的I2S框图如下:
三、I2S协议
I2S接口常见的协议模式包括:I2S正常模式、I2S左对齐模式和I2S右对齐模式等。
1、I2S正常模式
I2S正常模式属于I2S左对齐中的一种特例,也叫Philips模式。下图是I2S正常模式的波形。
LRCK(i2s_LRCK_rx/i2s_LRCK_tx)旗子暗记变低表示左声道,变高表示右声道。
SD(i2s_sdo,i2s_sdi)旗子暗记首先传输MSB或LSB,并在LRCK改变后的一个SCLK时钟周期发送第一个bit。
SD旗子暗记宽度的范围是从16到32位。
2、I2S左对齐模式
下图是I2S左对齐模式的波形。
LRCK(i2s_LRCK_rx/i2s_LRCK_tx)旗子暗记变高表示左声道,变低表示右声道。
SD(i2s_sdo,i2s_sdi)旗子暗记首先传输MSB或LSB,并在LRCK改变的同时发送第一个bit。
SD旗子暗记宽度的范围是从16到32位。
3、I2S右对齐模式
下图是I2S右对齐模式的波形。
LRCK(i2s_LRCK_rx/i2s_LRCK_tx)旗子暗记变高表示左通道,变低表示右通道。
SD(i2s_sdo、i2s_sdi)旗子暗记首先传输MSB或LSB,与I2S正常或左对齐模式不同,其数据与LRCK旗子暗记的边缘处的末了一位对齐。
SD旗子暗记宽度范围从16到32位。
其他协议格式还有:PCM early mode、PCM late1 mode和PCM late2 mode等。
四、ALSA框架Linux内核2.6之后,ALSA取代了OSS成为了Linux内核音频子系统是一部分。
ALSA系统包括:
1、alsa-driver:alsa系统驱动。
2、alsa-lib:alsa库,用户空间调用,和内核空间交互。
3、alsa-utils:命令行工具。
4、alsa-plugin:alsa插件。
5、alsa-tools:alsa工具。
ALSA框架组成如下:
alsa-driver中干系功能如下(以rockchip 4a单板为例):
1、Codec:音频芯片共有的部分,包括codec初始化函数,掌握接口,寄存器缓存,控件,dapm部件,音频路由,偏置电压设置函数等描述信息。
Rockchip 4A单板,Codec选用的是ES8316芯片,该芯片的dts配置如下:
2、Codec DAI:codec上的音频接口驱动描述,包括:时钟配置,格式配置,能力描述等。
Codec DAI干系实现如下:
3、CPU DAI:指 SoC 的 I2S、PCM 总线掌握器,卖力把音频数据从 I2S tx FIFO 搬运到 codec。
RK3399 CPU DAI的dts干系配置如下:
4、DAI Link:音频数据链路,它指定链路用到的codec、codec_dai、cpu_dai和platform。
Linux 4.4 内核支持两种办法创建声卡:一种是通用的simple-card framework;一种是传统的编写自定义的 machine driver 来创建。
Simple card是大略通用的machine driver,如果 simple-card框架足够知足需求,可优先选择simple card 框架。
DAI Link的dts干系配置如下:
DAI Link的干系实现如下:
5、DAPM:动态电源管理,是基于kcontrol改进过后的相应框架,增加了相应的电源管理机制, widget是DAPM的基本单位。
Codec(es8316)中kcontrol、dapm widget和dapm routes的干系实现如下:
6、DMA:卖力把 dma buffer 中的音频数据搬运到 I2S tx FIFO。
五、调试命令ALSA是Linux处理音频的基本接口,但ALSA只供应基层的接口,操作较为繁复,一样平常情形下可以直策应用其附带供应的 utils 工具集,utils 工具集是一些封装好了的功能模块,直接以命令的办法供应,用户只须要敲入干系命令和参数即可实现音频操作功能。
1、查看声卡信息
root@xiaotianbsp:~# cat /proc/asound/cards 0 [rockchipes8316c]: rockchip_es8316 - rockchip,es8316-codec rockchip,es8316-codec 1 [HDMICODEC ]: HDMI-CODEC - HDMI-CODEC HDMI-CODECroot@xiaotianbsp:~# ls -l /dev/snd/total 0drwxr-xr-x 2 root root 80 Aug 16 14:43 by-pathcrw-rw----+ 1 root audio 116, 2 Aug 16 14:43 controlC0crw-rw----+ 1 root audio 116, 5 Aug 16 14:43 controlC1crw-rw----+ 1 root audio 116, 4 Aug 16 14:43 pcmC0D0ccrw-rw----+ 1 root audio 116, 3 Aug 16 14:43 pcmC0D0pcrw-rw----+ 1 root audio 116, 6 Aug 16 14:43 pcmC1D0pcrw-rw----+ 1 root audio 116, 1 Aug 16 14:43 seqcrw-rw----+ 1 root audio 116, 33 Aug 16 14:43 timer
controlCx:掌握接口,供应灵巧的办法管理注册的声卡和对存在的声卡进行查询。
pcmCxDxc:PCM接口,对应录音设备。
pcmCxDxp:PCM接口,对应放音设备。
timer:支持声音的同步事宜供应声卡上的定时器。
seq:音序器接口,一个比原始MIDI接口高等的MIDI编程和声音同步高层接口。
2、查看声卡采集、播放PCM信息
root@xiaotianbsp:~# cat /proc/asound/pcm00-00: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 : : playback 1 : capture 101-00: ff8a0000.i2s-i2s-hifi i2s-hifi-0 : : playback 1
3、查看ALSA驱动版本
root@xiaotianbsp:~# cat /proc/asound/versionAdvanced Linux Sound Architecture Driver Version k4.4.154-90-rockchip-ga14f6502e045.
4、查看声卡0的信息
root@xiaotianbsp:~# cat /proc/asound/card0/pcm0p/sub0/statusclosed
5、查看寄存器
## regmap名称root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/1-0011/namees8316root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/ff880000.i2s/namerockchip-i2s## rk3399 i2s0掌握器寄存器root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/ff880000.i2s/registers00: 0000000f04: 0000000f08: 00033f3f0c: 0000000010: 000f001014: 01f0000018: XXXXXXXX1c: 0000000020: XXXXXXXX28: 00000000## es8316寄存器root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/1-0011/registers00: c001: f302: 0803: 2004: 1105: 0006: 1107: 0008: 0009: 040a: 0c0b: 0c0c: ff0d: 3f0e: ff0f: ff10: 1111: fc12: 2813: 0014: 0015: 3316: 0017: 0018: 00
6、查看时钟
## 采样率44.1KHZ,mclk = 256 sample = 25644.11000 = 11289600 HZroot@xiaotianbsp:~# cat /sys/kernel/debug/clk/clk_summary | grep i2s0 clk_i2s0_div 1 1 800000000 0 0 clk_i2s0_frac 1 1 11289600 0 0 clk_i2s0_mux 1 1 11289600 0 0 clk_i2s0 1 2 11289600 0 0 hclk_i2s0 1 2 100000000 0 0
7、amixer命令
root@xiaotianbsp:~# amixer -hUsage: amixer <options> [command]Available options: -h,--help this help -c,--card N select the card -D,--device N select the device, default 'default' -d,--debug debug mode -n,--nocheck do not perform range checking -v,--version print version of this program -q,--quiet be quiet -i,--inactive show also inactive controls -a,--abstract L select abstraction level (none or basic) -s,--stdin Read and execute commands from stdin sequentially -R,--raw-volume Use the raw value (default) -M,--mapped-volume Use the mapped volumeAvailable commands: scontrols show all mixer simple controls scontents show contents of all mixer simple controls (default command) sset sID P set contents for one mixer simple control sget sID get contents for one mixer simple control controls show all controls for given card contents show contents of all controls for given card cset cID P set control contents for one control cget cID get control contents for one control
7.1查看card0内容
root@xiaotianbsp:~# amixer -c 0 contentsnumid=16,iface=MIXER,name='ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 : values=offnumid=14,iface=MIXER,name='ADC Soft Ramp' ; type=BOOLEAN,access=rw------,values=1 : values=onnumid=13,iface=MIXER,name='ADC Capture Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=192,step=0 : values=192 | dBscale-min=-96.00dB,step=0.50dB,mute=1numid=15,iface=MIXER,name='Capture Polarity' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Item #0 'Normal' ; Item #1 'Invert' : values=0
7.2查看和配置某个numid命令
## 查看root@xiaotianbsp:~# amixer -c 0 cget numid=16numid=16,iface=MIXER,name='ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 : values=off ## 配置root@xiaotianbsp:~# amixer -c 0 cset numid=16 onnumid=16,iface=MIXER,name='ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 : values=on
8、设备名
root@xiaotianbsp:~# aplay -l List of PLAYBACK Hardware Devices card 0: rockchipes8316c [rockchip,es8316-codec], device 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0card 1: HDMICODEC [HDMI-CODEC], device 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0root@linaro-alip:~# arecord -l List of CAPTURE Hardware Devices card 0: rockchipes8316c [rockchip,es8316-codec], device 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
9、放音
aplay -D hw:0,0 -r 44100 -c 2 -f s16_le play.wav
10、录音
arecord -D hw:0,0 -r 16000 -c 1 -f s16_le record.wav
-D:播放设备,aplay -l 或arecord -l列出的设备名
-r:采样率
-c:音频文件通道
-f:采样格式,常用的有S16_LE ,S24_LE ,S32_LE, cd (可忽略)
也可参考tinyalsa命令,如:tinymix、tinypcminfo、tinyplay和tinycap的用法。
11、mp3转wav
lame test.mp3 test.wav --decode










