最近研究了一下linux上ALSA库的使用,下面总结一下:
首先先了解一下音频的几个概念,上网一搜一堆介绍,可特么的大多数概念介绍都是模糊的.只想说一句我....................
(1) 采样位数 : 也就是codec采样时一个点所占的bit数,通常有8,16,24bit等.
(2) 通道数[channel] : 是mono还是stereo,对应的是1或者是2通道.
(3) 采样率 : codec每秒采样的点数,如44.1KHZ,就是每秒44100个点.
PCM在采集音频数据时采用frame,periods,channel,及sample bit来设置参数并按照设置的格式来采集.
还得介绍两参数:frames和period:
(1) frames : 是由采样时通道数(channel)和采样位数(sample bit)来共同决定的,和采样频率等其他参数无任何联系,记住是无任何联系,它仅仅是表示采样一次所对应的bit数.eg
[1] : 1 frame of a Stereo 48khz 16bit PCM stream is 4 bytes. (对于采样率为48KHZ,采样位数16bit 的立体声的1frame为4字节).
[2] : 1 frame of a 5.1 48khz 16bit PCM stream is 12 bytes. (对于采样率为5.148KHZ,采样位数16bit的单声道的1rame为2字节).
(2) period : ALSA的官方是这样介绍的 : A period is the number of frames in between each hardware interrupt.
意思就是硬件的每次中断所对应的frames数为一个period,简称一个周期吧.
exmple : 我们让codec工作在 stereo立体声,16-bits, 44.1KHZ 的采样流中,
[1] 'stereo' = 2;