1

私は読むプログラムを持っています

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

カーネルモジュールからの「読み取り」ごとに 16384 バイトの大きなバッファーに入れます (= ALSA のリングバッファーから読み取ります)。

各「読み取り」の後、48 kHz を 44.1 kHz にダウンサンプリングする必要があり、出力は 4096 フレームより小さい/等しい必要があります (Apple の Airport Express にストリーミング)。

すでに機能していますが、出力が「速すぎる」ように聞こえ、「ちらつき」があり(後述の「読み取り」でフレームが失われたためだと思います)、時々停止します(「速すぎる」と「データの待機」が発生すると思います) )。

リサンプリングには、libsamplerate (別名 Secret Rabbit Code)のsrc_processを使用します。

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 フレーム バッファが小さすぎます」などと言うことができるかもしれません。

その間、コードを再確認します。

4

0 に答える 0