1

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 を再利用します。

問題は、変換されたオーディオを最後に追加する代わりに、コンバーターが既存のコンテンツを上書きすることです。

オーディオをオーバーライドするのではなく、最後にオーディオを追加する方法はありますか?

そうでない場合は、要求された数のサンプルが得られるのを待ってから、着信オーディオ バッファーを返す必要があります。

アドバイスをいただければ幸いです。

4

0 に答える 0