Загрузить 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.)"

Любая помощь будет оценена.

Спасибо,

0 ответов

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