C++ プログラムで、8192 オーディオ サンプルのブロック (-32768...32767) をダウンサンプリングしようとしています。オリジナルのサンプリングレートは 48kHz ですが、16kHz が欲しいです。
元のサンプル数が 8192 の場合、比率 16/48 は約 2731 サンプルを生成するはずです。
これには libav を使用しようとしました。8192 個の入力サンプルのすべてのブロックにこのコードを使用します。
struct AVResampleContext* ctx = av_resample_init(16000,48000,16,10,1,1.0)
av_resample(ctx,dataIn,dataOut,&samplesConsumed,8192,2731,0)
ただし、これはある程度機能しているように見えますが、最後の 30 サンプル程度は 2731 サンプルの各出力ブロックでゼロであるため、ここで常に「可聴クリック」を行うことができます。
ここで何が間違っていますか?
助けてくれてありがとう!