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