プログラムでオーディオ ファイルを再生しています。オーディオ レンダリング コールバックで、ゲイン マルチプライヤを入力信号に適用し、それを出力バッファに追加します。私のアクションを説明するための擬似コードを次に示します。
void audioCallback(AudioOutputBuffer* ao, AudioInput* ai, int startSample, int numSamples){
for (int i=startSample; i<numSamples+startSample; i++){
ao[i] = ai[i]*gain;
}
}
基本的に、データに乗数を掛けるだけです。この場合、gain
GUI コールバックを介して調整されている float メンバーです。オーディオがまだ再生されている間にこの値を調整すると、スライダーを動かしたときにオーディオが柔らかくなったり大きくなったりするのが聞こえますが、小さなポップやクリックがたくさん聞こえます。
契約が何であるかはよくわかりません。私は補間について知っており、オーディオがピッチシフトされている場合はそれを行いますが、オーディオファイルの再生が完了する前にゲインがリアルタイムで調整されている場合、追加の補間または何かを行う必要があるかどうかはわかりません。
オーディオの再生が始まる前にスライダーを調整すると、ゲインが適切に設定され、クリック音は発生しません。
ここで何か不足していますか?ゲインは、入力信号の乗数以外にどのように実装されますか?