Загрузить NSData из AudioBufferList в AVAudioPlayer
Из метода делегата я получаю AudioBufferList во время записи аудио. Я пытаюсь собрать данные из AudioBufferList и сохранить их, чтобы я мог загрузить их в мой AVAudioPlayer, но AVAudioPlayer выдает ошибку, и я не могу воспроизвести запись. Мне нужно иметь возможность воспроизводить аудио через AVAudioPlayer без файла, просто используя AudioBufferList.
Первоначально я сохранял запись в файл, а затем загружал ее в AVAudioPlayer, но с помощью этого метода я не смог добавить запись, не создавая другой аудиофайл, а затем объединяя 2 файла после добавления. Это заняло много времени, и я все еще хотел бы иметь возможность слушать записи между добавлениями. Так что теперь я не сохраняю аудиофайл, чтобы я мог добавлять его до тех пор, пока не захочу его сохранить. Проблема в том, что NSData, который я сохраняю из AudioBufferList, не загружается в AVAudioPlayer должным образом.
Вот мой код для сбора NSData:
- (void) microphone:(EZMicrophone *)microphone
hasBufferList:(AudioBufferList *)bufferList
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels
{
AudioBuffer sourceBuffer = bufferList->mBuffers[0];
if (audioBuffer.mDataByteSize != sourceBuffer.mDataByteSize)
{
free(audioBuffer.mData);
audioBuffer.mDataByteSize = sourceBuffer.mDataByteSize;
audioBuffer.mData = malloc(sourceBuffer.mDataByteSize);
}
int currentBuffer =0;
int maxBuf = 800;
for( int y=0; y< bufferList->mNumberBuffers; y++ )
{
if (currentBuffer < maxBuf)
{
AudioBuffer audioBuff = bufferList->mBuffers[y];
Float32 *frame = (Float32*)audioBuff.mData;
[data appendBytes:frame length:audioBuffer.mDataByteSize];
currentBuffer += audioBuff.mDataByteSize;
}
else
{
break;
}
}
}
Когда я пытаюсь загрузить NSData в AVAudioPlayer, я получаю следующую ошибку:
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:&err];
err: Error Domain = NSOSStatusErrorDomain Code = 1954115647 "Операция не может быть завершена. (Ошибка OSStatus 1954115647.)"
Любая помощь будет оценена.
Спасибо,