AVAudioConverter を使用して、AVAudioPCMFormatFloat32 非インターリーブ 44.1 KHz バッファーを AVAudioPCMFormatInt16 インターリーブ 48 KHz に変換したいと思います。
着信 AVAudioPCMBuffer には 800 個のサンプルがあり、1920 個の容量で AVAudioPCMBuffer を返す必要があります。
AVAudioConverterOutputStatus conversionStatus = [_audioConverter convertToBuffer:audioPCMBuffer error:&conversionError withInputFromBlock:^AVAudioBuffer * _Nullable(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus * _Nonnull outStatus) {
AVAudioPCMBuffer *dequeuedBuffer = [self dequeueIncomingAudioBuffer];
if (dequeuedBuffer != nil) {
*outStatus = AVAudioConverterInputStatus_HaveData;
} else {
*outStatus = AVAudioConverterInputStatus_NoDataNow;
}
return [dequeuedBuffer autorelease];
}];
オーディオがいくらかあるが十分でない場合、ブロックで提供されたオーディオは outputBuffer に変換されます。
より多くの入力オーディオが利用可能になったら、もう一度 convertToBuffer を呼び出し、同じ outputBuffer を再利用します。
問題は、変換されたオーディオを最後に追加する代わりに、コンバーターが既存のコンテンツを上書きすることです。
オーディオをオーバーライドするのではなく、最後にオーディオを追加する方法はありますか?
そうでない場合は、要求された数のサンプルが得られるのを待ってから、着信オーディオ バッファーを返す必要があります。
アドバイスをいただければ幸いです。