分享

ALSA 音频术语

 昵称17328427 2014-08-26

个人愚见,抛砖引玉。

样本和帧

在单一声道,一个时间点上采集的语音信号叫做样本(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()


交错模式与非交错模式

交错模式与非交错模式只是音频数据存放在缓冲区时的一种方式,在交错模式下,一帧包含所有声道的样本,而在非交错模式下一帧仅包含一个声道的样本,下一帧会包含另外一个声道的样本。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多