linux下ALSA API采集声音遇到的坑

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 )
也是这样子

      

          

你可能感兴趣的:(音频视频)