Как использовать 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.
Проблема в том, что конвертер вместо добавления конвертированного аудио в конец переопределяет существующий контент.
Есть ли способ добавить аудио в конце вместо того, чтобы переопределить его?
Если нет, мне придется подождать, пока запрошенное количество сэмплов, прежде чем возвращать любой входящий аудио буфер.
Любой совет будет принята с благодарностью.