ALSA音频术语
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ALSA音频术语
个人愚见,抛砖引玉。
样本和帧
在单一声道,一个时间点上采集的语音信号叫做样本(sample),它是用来描述语音信号的幅值。
我们在谈论数字音频的时候往往关心的是同一时间点上所有声道上的音频数据,然后我们就有了帧(frame)的概念。
它是用来收集所有声道上的样本。
ALSA的音频API也是用帧来作为音频数据的单位。
样本和帧的大小
样本的大小跟存储的格式有关,比如常用的S16_LE,即有符号的16位小端存储,那么一个样本的大小就是16/2=8个字节。
帧的大小就是声道的数量乘以样本的大小,比如,一个立体声48khz,16bit,PCM音频流,即双声道,那么一帧的大小就是2x2bytes
再比如一个5.1声道(6个声道,16bit,PCM音频流,一帧的大小就是6x2bytes
周期(period)
周期是用来存放帧的单元,ALSA函数是以一个周期为单位来读取音频数据的。
缓冲区(buffer)
一个缓冲区一般有两个周期,有些硬件也可以做到8个缓冲区,也有可能缓冲区的大小并不是周期的整数倍。
缓冲区是循环读取的,比如一个缓冲区有两个周期,那么硬件在读取一个缓冲区时便会产生两次中断,ALSA也尽可能地填满一个周期的音频数据。
当第一个周期的音频数据被取走就准备取第二个周期的音频数据,同时第三个周期的音频数据会填充到第一个音频数据的位置,以此循环。
当填充与取出缓冲区的速度不协调的时候就会出现错误。
xrun()
交错模式与非交错模式
交错模式与非交错模式只是音频数据存放在缓冲区时的一种方式,在交错模式下,一帧包含所有声道的样本,而在非交错模式下一帧仅包含一个声道的样本,下一帧会包含另外一个声道的样本。