(干货)Ai音箱和Linux音频驱动小谈

一、音频基础

(1)采样率(samplerate)

采样就是把模拟信 数字化的过程,不仅仅是音频需要采样,所有的模拟信 都需要通过采样转换为可以用0101来表示的数字信 ,示意图如下所示:

二、Android Audio框架

Android用的是C/S的框架,就是一个client,一个service,中间是一个HAL作为统一的接口,HAL往下就会到tinyalsa,tinyalsa是alsa的裁剪版本,后面对应的就是驱动层了。

三、I2S接口介绍

I2S总线标准:I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信 :

串行时钟 SCLK:也叫做位时钟BCLK,即对应数字音频的每一位数据,SCLK的频率=2×采样频率×采样位数 ,现在问题来了,有人会问这些东西到底是什么意思呢,I2S一般是传输立体声,有两个声道channel,采样频率指得是采样数率,多久去采集一个点,每个点是几个bit组成。

帧时钟LRCK:用于切换左右声道的数据,LRCK为“0”表示正在传输的是左声道的数据,为“1”表示正在传输的是右声道的数据。LRCLK == FS,就是采样频率

串行数据SDATA:就是用二进制补码表示的音频数据,有时为了使系统间能够更好的同步,还需要另外传输一个信 MCLK,称为主时钟,也叫系统时钟(System Clock),是采样频率的256或384倍

四、TINYALSA子系统

(1)代码介绍

目前linux中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib(libtinyalsa.so)提供的API就可以完成对底层硬件的操作。说的这么好,但是Android中没有使用标准的ALSA,而是一个ALSA的简化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音频通路,我们也可以使用tinyalsa提供的工具进行查看、调试。

tinycap.c 实现录音相关代码  tinycap

Tinyplay.c 实现放音相关代码 tinyplay

Pcm.c 与驱动层alsa-driver调用接口,为audio_hw提供api接口

Tinymix 查看和设置混音器 tinymix

Tinypcminfo.c 查看声卡信息tinypcminfo

(2)音频帧(frame)

这个概念在应用开发中非常重要, 上很多文章都没有专门介绍这个概念。

音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。

 

五、CODEC介绍

(1)专用术语

 ASLA – Advanced Sound Linux Architecture

 OSS – 以前的Linux音频体系结构,被ASLA取代并兼容

 Codec – Coder/Decoder

 I2S/PCM/AC97 – Codec与CPU间音频的通信协议/接口/总线

 DAI – Digital Audio Interface 其实就是I2S/PCM/AC97

 DAC – Digit to Analog Conversion

 ADC – Analog to Digit Conversion

 DSP – Digital Signal Processor

 Mixer – 混音器,将来自不同通道的几种音频模拟信 混合成一种模拟信

 Mute – 消音,屏蔽信 通道

 PCM – Pulse Code Modulation 脉冲调制编码,一种从音频模拟信 转换成数字信 的技术,区别于PCM音频通信协议

 SSI – Serial Sound Interface

 DAPM – Dynamic Audio Power Management

(2)放音录音框图

六、音频相关调试技巧

    在调试录音和放音的时候,我们先使用tinyalsa的调试命令来进行调试,比如tinycap、tinyplay、tinypcminfo

Proc下的音频调试介绍:

https://alsa.opensrc.org/Proc_asound_documentation#The_.2Fproc.2Fasound.2Foss.2F_directory

(1)通过命令确认声卡是否注册成功

rk3399_mid:/ $ ls /proc/asound/                                            

card0 cards   hwdep rockchipak7755c timers  

card1 devices pcm   rockchipi2sdmic version 

$ ls /dev/snd/

七、AI智能音响核心点

这部分讲的没一点内容都是非常核心的,直接影响到AI音箱的整体效果,包括声源定位,回声消除,有很多人反馈为什么我的音箱声源定位不好,为什么我的回声消除效果很差,我们就要从下面几个问题点去排查

(1)、音频部分

1、做到有效采样16bits 32bits,(失真、截幅)、软件端对多通道数据可以编码

多通道数据采样同步,采样率同步,采样时钟同步,比如不能出现录音的时候出现失真情况。

2、录音的采样深度理论是越大是越好的,采样频率要跟算法部分确认好,讯飞要求的是16K的采样音频送给他们的算法

3、播放不能有失真,电声部分一定要通过严格的测试要求,整个扫频阶段都不能出现问题,比如不能出现播放高频的时候发现喇叭有低频的声音此类问题

(2)、结构部分

1、MIC开孔深度、孔径、构型符合标准;

2、内部音腔隔离,密封性能;

3、结构震动隔离;震音非常关键,测试的时候会发现,装上机构后的回声消除比没有结构时候差很多,大多是由于增加了结构,震音结构影响很大。

4、喇叭与MIC的距离,不能太近;

(3)、回声消除注意

作用:

抑制产品(喇叭)本身发出的声音,使得产品在播放音频时依然可以进行语音交互;

注意点:

1、需要接参考信 ,信 采样需要符合要求;

 做到有效采样

 使用硬采集方案

 参考信 采样尽量与mic采集到的回声同步,至少不晚于回声;

2、结构方面需要特别注意;

 内部音腔隔离

 震动隔离

 喇叭与MIC的相对位置;

3、硬件选型方面需要注意;

4、整个采样系统中的延时要稳定;

 

彩蛋:

?ASR(automaticspeech recognition)把语音转换成文字,AI算法说的是自我学习算法,所以学习是一个非常复杂的过程,下面是一个链接,有开源的一些模型,感兴趣的可以自己拿去学习

https://github.com/kaldi-asr/kaldi

https://shiweipku.gitbooks.io/chinese-doc-of-kaldi/content/index.html

640_fmt=jpeg

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25109 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月14日
下一篇 2019年10月14日

相关推荐