我正在试验ALSA,在这个howto, Section 2中遇到了以下配置参数:
bufferSize的单位取决于函数。有时是
以字节为单位,有时必须指定帧数。
一帧是所有通道的样本数据向量。对于16位
立体声数据,一帧有四个字节的长度。

/* 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);
}

我不明白16位立体声数据,一帧有长度
四个字节
为什么是四个?它是否遵循频道数量:2?我的意思是早些时候他们把它配置为:
/* Set number of channels */
if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, 2) < 0) {
  fprintf(stderr, "Error setting channels.\n");
  return(-1);
}

如果我的音响系统有4个输出呢?还是6?这是否意味着我必须相应地将其配置为16位*4和16位*6?

最佳答案

为什么是四个?它是否遵循频道数量:2?
是的,根据前面提到的:
一帧是所有通道的样本数据向量。
因此,对于立体声16位数据,有两个(左和右)通道,每个通道16位(=2字节),因此每帧总计4字节。

关于c - Linux声音编程。如何确定帧中的缓冲区大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53552131/

10-08 20:38