alsa记录

周期,period,相当于底层的一个缓冲区窗口的大小,不过其单位不是字节,而是frame_size,双声道就是2.,单声道就是1.

这里不对,应该还和量化位数相关,8位量化对于单声道frame_size就是1,但是16位的话变为2了


设置了周期后,还需要设置底层lib的缓冲区大小,其大小应该是周期*frame_size

设置完了后,需要再去读取一次周期的大小

然后,得到周期大小后,可以设置应用层的读写缓冲区大小,比如可以设置一下子读取的PCM文件大小非周期*frame_size 字节大小

读写出以后,可以直接调用PCM写入函数写入,写入大小为周期代大小,注意不是字节单位,而是frame_size单位

对于libmad解码出的PCM流,从其lib可知,PCM的缓冲区大小为 每个声道1152字节

所以,对应到alsa,16位量化的话

相当于一个周期为1152*2*2(双声道)字节,也就是周期为1152个frame_size

相当于一个周期为1152*1*2(但声道)字节,也就是周期为1152个frame_size

此文有介绍

http://blog.chinaunix.net/uid-10995602-id-2918643.html


你可能感兴趣的:(alsa记录)