音频1-基础知识(硬件,音频相关概念)

接下来计划针对音频做一个较为详细的总结:

计划分成下面8章来详细展开,后面再根据实际情况做调整。

- 1.基础知识(硬件,音频相关概念)

  • 2.ALSA/ASOC框架
  • 3.codec 驱动dapm 相关(kcontrol、widget、route),以及hal层设置通路
  • 4.android 音频框架( 重点在AudioFlinger 和 AudioPolicyService服务 )
  • 5.音频通路的选择(AudioTrack播放选择设备的过程,已经设备切换过程)
  • 6.播放 录音音频流的传输过程
  • 7.audio hal介绍
  • 8.一些常见问题解决思路

以上内容基于tinyalsa展开,尽量剔除厂商的差异性。



音频基础知识

一.概念

采集声音实际就是将模型信号转化成数字信号,类似ADC的原理,有着几个步骤:模拟信号->抽样->量化->编码->数字信号
涉及到几个关键的参数:

采样率:抽样环节的频率, 一秒采样多少次,采样频率必须至少是信号中最大频率分量频率的两倍,否则就不能从信号采样中恢复原始信号。android 一般使用44.1k 48k等。

位数(采样精度):量化环节用到的精度,采样的精度,即采集到一个数据有多少位可以保存,这个一般要根据codec 芯片支持哪个精度来配置。一般是16位或32位。

声道:采样多少个通道,android 底层支持单声道和双声道

一.硬件相关

硬件相关 主要介绍 IIS接口

IIS( I2S ) 全称Integrated Interchip Sound,是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内器件之间传输,例如codec 芯片,数字麦克风,数字输入输出接口等。

音频1-基础知识(硬件,音频相关概念)_第1张图片
如上图to cpu的芯片。我们可以得出IIS 有这些接口:

引脚 作用
LRCK 帧时钟,传输一帧(左右声道)数据的采样率,通过高低电平选择是左声道数据还是右声道数据,也就是采样率
SCLK LRCK*两个通道的位数和
SDO /SDI 数据输入和输出
MCLK 不是IIS必须的,有时外部芯片需要系统时钟才需要接,一般是 LRCK采样率的256 倍或者384倍

时钟计算的例子:

假设声音数据有左右声道,每个声道占用32位数据位,左右两个声道一共占了64个数据位。如果
LRCK 44.1K   那SCLK  就是44.1K* 64 =2822.4k =2.822m
LRCK 48K   那SCLK  就是48K* 64 =3072k =3.072m

IIS通信总线有主从之分:
在总线上只能存在一个主设备,可有多个从设备。主设备提供时钟,不一定是数据的发送方,也可以是接受方或者其他协调两者的控制设备。

二.其他概念

  • 传输延迟(latency):

传输延迟表示一个周期的音频数据的传输时间。可能有些读者一脸懵逼,一个周期的音频数据,这又是啥?我们再引入周期(period)的概念:Linux ALSA 把数据缓冲区划分为若干个块,dma 每传输完一个块上的数据即发出一个硬件中断,cpu 收到中断信号后,再配置 dma 去传输下一个块上的数据;一个块即是一个周期,周期大小(periodSize)即是一个数据块的帧数。再回到传输延迟(latency),传输延迟等于周期大小除以采样率,即 latency = periodSize / sampleRate。

  • 16LE

上文描述的位数,一般会使用16LE ,这里的LE指的是Little Endian 小端存储 就是0x2345 在实际中是先存储 45 再存储23

  • 蓝牙相关

A2DP:是一种单向的高品质音频数据传输链路,通常用于播放立体声音乐;
SCO: 则是一种双向的音频数据的传输链路,用于语音通话,音频的采样率较低,一般是8K、16K单声道的音频数据,所以如果用于播放音乐,体验会很差。
两者的主要区别是:A2DP只能播放,默认是打开的,而SCO既能录音也能播放,默认是关闭的。

  • android 声卡节点
    音频1-基础知识(硬件,音频相关概念)_第2张图片
    控制节点为必须节点,其他不一定有
pcmC0D0c  card 0 device 0 capture
pcmC0D0p  card 0 device 0 playback
表示一个声卡可以有多个设置,一个设备有多个节点

C 表示声卡
D 表示设备
P/C 表示play和capture

后续有其他音频相关的概念会在这里增加。

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