Linux声音编程。如何确定帧中的缓冲区大小?

时间:2018-11-30 06:05:40

标签: c linux alsa

我正在尝试ALSA,并在此howto, Section 2中遇到了以下配置参数:

  

buffersize的单位取决于功能。有时候是   以字节为单位,有时必须指定帧数。   一帧是所有通道的样本数据向量。对于16位   立体声数据,一帧的长度为四个字节。

http-server ./dist -o
  

我不明白这一点对于16位立体声数据,一帧的长度   四个字节

为什么是四个?它是否遵循频道数:2?我的意思是,他们之前将其配置如下:

/* Set buffer size (in frames). The resulting latency is given by */
/* latency = periodsize * periods / (rate * bytes_per_frame)     */
if (snd_pcm_hw_params_set_buffer_size(pcm_handle, hwparams, (periodsize * periods)>>2) < 0) {
  fprintf(stderr, "Error setting buffersize.\n");
  return(-1);
}

如果我的音响系统包含4个输出,那又如何呢?还是6?这是否意味着我必须将其分别配置为16位* 4和16位* 6?

1 个答案:

答案 0 :(得分:2)

  

为什么是四个?是否紧随频道数:2?

是的,如前所述:

  

一帧是所有通道的样本数据向量。

因此对于立体声16位数据,有两个(左右)通道,每个通道均为16位(= 2字节),因此每帧总计为4字节。