PCM下采样:输入帧/输出帧与缓冲区大小

时间:2012-06-29 07:02:42

标签: c pcm resampling downsampling

我有一个读取的程序

4096 frames (16384 bytes)
16bit LE
48000 Hz
PCM

从内核模块每次“读取”到一个16384字节的大缓冲区(=从ALSA的环形缓冲区读取)。

每次“读取”后,我必须将48 kHz下采样到44.1 kHz,输出必须小于/等于4096帧(流向Apple的机场快线)。

它已经可以工作,但是输出听起来“太快”并且是“闪烁”(我认为由于“读取”中的帧丢失,如下所述),然后有时会停止(我认为“太快”导致“等待”对于数据“)。

对于重新取样,我使用src_process中的libsamplerate(又名秘密兔码):

int src_process (SRC_STATE *state, SRC_DATA *data) ;

具有以下参数:

  data_in       : A pointer to the input data samples.
  input_frames  : 4096
  data_out      : A pointer to the output data samples.
  output_frames : 4096
  src_ratio     : 44100 / 48000 -> 0,91875

我的内核模块告诉我,当我错过ALSA内部环形缓冲区中的某些帧时,会发生这种情况。

我错过了约100帧/“读”。

也许有人理解这个问题并且可以说“4096帧 - 缓冲区太小”或其他类似的东西。

同时我会重新检查我的代码。

0 个答案:

没有答案