如何使用AVAudioConverter convertToBuffer:error:withInputFromBlock:

时间:2017-06-15 13:06:00

标签: avaudiopcmbuffer avaudioconverter

我想使用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。

问题是转换器不是将转换后的音频附加到最后,而是覆盖现有内容。

有没有办法在最后添加音频而不是覆盖它?

如果不是,我将不得不在返回任何传入的音频缓冲区之前等待所请求的样本数量。

非常感谢任何建议。

0 个答案:

没有答案