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 保持填满状态,当一个周期的数据播放完成,那么第三个周期的数据也会进入缓冲区,而这个时候正是第二个周期的数据播放(典型的环形缓冲区功能)

转载于:https://my.oschina.net/jingxia/blog/697497

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值