EXC_BAD_ACCESS от AudioBuffer - PullRequest
       1

EXC_BAD_ACCESS от AudioBuffer

0 голосов
/ 03 января 2011

Я пытаюсь сделать запись с помощью приложения AudioUnit для iPhone.

Изменения: (начало) Я добавил следующий код

    bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
    bufferList->mNumberBuffers = 1;
    bufferList->mBuffers[0].mNumberChannels = 2;
    bufferList->mBuffers[0].mDataByteSize = 1024;
    bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
Изменения: (конец)

static OSStatus recordingCallback(void *inRefCon, 
                                  AudioUnitRenderActionFlags *ioActionFlags, 
                                  const AudioTimeStamp *inTimeStamp, 
                                  UInt32 inBusNumber, 
                                  UInt32 inNumberFrames, 
                                  AudioBufferList *ioData) {
    OSStatus status;
    status = AudioUnitRender(appdelegate->audioUnit, 
                             ioActionFlags, 
                             inTimeStamp, 
                             inBusNumber, 
                             inNumberFrames, 
                             appdelegate->bufferList);
    if(status != 0)
    NSLog(@"AudioUnitRender status is %d", status);
    SInt16* samples = (SInt16*)(ioData->mBuffers[0].mData);
    .....
}

исправлено: (Я получаю код ошибки OSStatus -50) - Поскольку я не инициализировал bufferList.

Я EXC_BAD_ACCESS из AudioBuffer (ioData-> mBuffers [0] .mData).

Я не уверен с этой ошибкой.Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 05 января 2011

Я решил это;

В своем коде я написал два метода обратного вызова. Нам нужно два аудиоустройства, чтобы использовать два аудиоустройства.

Только что я удалил одну функцию обратного вызова.

Просто взгляните на следующую ссылку, чтобы узнать об этом.
http://developer.apple.com/library/mac/#technotes/tn2002/tn2091.html

0 голосов
/ 03 января 2011

Вы отправляете сообщение на освобожденный объект. В XCode перейдите в Project -> Edit Active Executable -> Arguments -> Нажмите на кнопку «плюс», добавьте NSZombieEnabled и установите его значение в YES. Сделав это, вы можете отладить ваше приложение и выяснить, какой освобожденный объект все еще получает сообщения.

Но не забудьте потом отключить этот аргумент для вашего проекта.

...