alsa 的api网上一大把,昨天抄了个抓取程序放在自己的程序中,一读数据就崩溃,折腾了好久
alsa 声卡数据抓取函数原型:
snd_pcm_sframes_t snd_pcm_readi (snd_pcm_t * pcm, const void * buffer, snd_pcm_uframes_t size);
调用如下:
#define FRAME_SIZE 160
uint8_t buf[FRAME_SIZE*4];
snd_pcm_readi (pcm, buf, sizeof(buf)); ----调用后,程序挂掉
后来:
#define FRAME_SIZE 160
uint8_t buf[FRAME_SIZE*4*100];
snd_pcm_readi (pcm, buf, FRAME_SIZE*4); ----调用后,程序OK了, 显然与缓冲区有关系, 百思不得其解
早上来, 继续郁闷。 偶然看看函数原型, 发现了第三个参数:
snd_pcm_uframes_t size 这个size不会是 frame_size吧?
#define FRAME_SIZE 160
uint8_t buf[FRAME_SIZE*4];
snd_pcm_readi (pcm, buf, FRAME_SIZE); ----调用后,程序OK了
再看: snd_pcm_sframes_t snd_pcm_writei (snd_pcm_t * pcm, const void * buffer, snd_pcm_uframes_t size )
也是这样子