クライアントのためにオーディオ プログラミングを行っていますが、理解できない問題に遭遇しました。
CoreAudio によって繰り返し呼び出されるレンダー コールバックがあります。このコールバック内には、次のものがあります。
// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame] / (Float32) 32768;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
これは期待どおりに機能し、予期しない丸め誤差がないことを示しています。
次にやりたいことは、小さな遅延を追加することです。クラスにグローバル変数を追加します。
つまり、@implementation 行の下
Float32 last = 0;
次に、この変数を使用して 1 フレームの遅延を取得します。
// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
Float32 next;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame] / (Float32) 32768;
next = last;
last = data;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
今回は、信号に奇妙なオーディオの歪みがあります。
私は自分が間違っていることを見ることができません!アドバイスをいただければ幸いです。