alsa frame period period_size buffer_size 等解释
英文原版 FramesPeriods 一个frame就等于一个要被播放的声音样本。与通道数和样本长度无关。 例子: 1帧立体声48khz 16位的pcm数据长度为4bytes 1帧5.1正道48k 16位pcm流的大小为12bytes 一个period就是每两次硬件中断之间的帧数。poll()会每个周期return一次。 buffer是一个环形buffer,大小一般来说比一个period size大,一般设做 2 * period size,但是一些硬件可以支持到8个周期大小的buffer,也可以设为非整数倍的period的大小。 现在如果我们的硬件设置为48khz,2周期,每个周期1024个帧,那么buffer size 就是2048个帧。硬件每处理一个buffer会中断2次,alsa会一直让buffer保持一个满的状态,每当第一个周期的样本播放完成,第二个周期的数据就会被播放,同时第三个周期的数据就会进入到第一个周期数据的位置。 另一个例子: 假设我们将要使用一个立体声 16位 44.1k的音频流,单向(录音或者播放),那么我们就有 立体声 = 2通道 1个样本 16bits = 2bytes 1个帧 代表 所有通道的一个样本。那么我们现在是双通道,所以 1帧 = (通道数) * (样本大小bytes) = 2 * 2 = 4bytes 为了能支持2 * 44.1k的采样率