ALSA缓存的理解

“ALSA uses the ring buffer to store outgoing (playback) and incoming (capture, record) samples. There are two pointers being maintained to allow a precise communication between application and device pointing to current processed sample by hardware and last processed sample by application. The modern audio chips allow to program the transfer time periods. It means that the stream of samples is divided to small chunks. Device acknowledges to application when the transfer of a chunk is complete.”

ALSA使用了环形buffer来存储回放和录音的数据,这里使用了2个指针来维护设备和应用间的通信,一个指针指向硬件当前处理的数据,另一个指针指向应用程序最后处理的数据,现代的的音频芯片允许编程改变传输的时间周期,这意味着音频流的数据被分割成很多小块,当一个小块传输完成时,设备对应用程序进行响应。


ALSA编程有buffer、period、frame、sample,byte等概念,之间的关系如下:
buffer = N periods;
period = N frames;
frame = N bytes;  //如:对于单声道16位AD,N=2
ALSA是按周期写入数据,一个周期包含多少个帧是可以设置的,怎么来权衡一个周期包含多少个帧呢?
这个跟给小孩喂饭的情况类似,假设小孩吃饭的速度不变(好比音频的采样速率固定,如44100Hz),如果小口小口的喂,那就要求你喂的速度很快,小孩才不会哭闹,但是这样你就会累死;如果你想有时间偷懒,那就一次喂一大口,等小孩还在嚼的时候,你再装一大勺,翘着二郎腿清闲的等着,这样小孩也不会哭闹。也就是说,周期帧数少,则耗CPU时间,周期帧数大,则耗内存。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值