Как использовать AVAudioConverter convertToBuffer: ошибка:withInputFromBlock:

Я хотел бы использовать AVAudioConverter для преобразования AVAudioPCMFormatFloat32 без чередования 44,1 кГц буфера в AVAudioPCMFormatInt16 с чередованием 48 кГц.

Входящий AVAudioPCMBuffer имеет 800 сэмплов, и мне нужно вернуть AVAudioPCMBuffer с емкостью 1920.

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];
}];

Когда у меня есть звук, но его недостаточно, звук, подаваемый в блок, преобразуется в выходной буфер.

Когда стало доступно больше входящего звука, я снова вызываю convertToBuffer и повторно использую тот же outputBuffer.

Проблема в том, что конвертер вместо добавления конвертированного аудио в конец переопределяет существующий контент.

Есть ли способ добавить аудио в конце вместо того, чтобы переопределить его?

Если нет, мне придется подождать, пока запрошенное количество сэмплов, прежде чем возвращать любой входящий аудио буфер.

Любой совет будет принята с благодарностью.

0 ответов

Другие вопросы по тегам