ALSA FramesPeriods



alsa 中广泛使用两个基本概念  frame 和 period,这两个概念在 alsa 官方解释是: http://www.alsa-project.org/main/index.php/FramesPeriods

frame: 帧,是一个播放样本的计量单位,由通道数和比特数确定。例如:

  • 立体声 48kHz 16bit 的 PCM,一帧的大小是 4 byte

  • 5.1通道 48kHz 16bit 的 PCM,一帧的大小是 6*(16/8)=12 byte


period:周期,是每两个硬件中断之间的帧数,poll 会在每个周期返回一次。


buffer:缓冲区, alsa 定义了一个环形缓冲区,缓冲区的大小必须大于一个周期,通常设置成两个周期,但是实际上有些硬件支持设置 8 个周期(8×period),缓冲区的大小甚至可以设置为不是周期的整数倍。


现在我们举个例子,硬件被设置为 48000 Hz,2 periods,每个周期 1024 帧。那么 buffer 就是 2048 帧,硬件在一个 buffer 的时间内中断两次,alsa 会尽量让 buffer 保持填满状态,当一个周期的数据播放完成,那么第三个周期的数据也会进入缓冲区,而这个时候正是第二个周期的数据播放(典型的环形缓冲区功能)

你可能感兴趣的:(android,硬件)