EXC_BAD_ACCESS в AudioRingBuffer::GetTimeBounds

Итак, вот сценарий: у меня есть приложение для записи в реальном времени с использованием ExtAudioFileWriteAsync, предназначенное для iOS 4.3. В первый раз, когда я записываю с помощью этого приложения, оно работает отлично. Если я нажимаю стоп, а затем снова записываю, то более чем в половине случаев я получаю EXC_BAD_ACCESS в AudioRingBuffer::GetTimeBounds прямо в момент начала записи.

То есть ExtAudioFileWriteAsync не справляется с GetTimeBounds при запуске второй записи. Вот часть кода, которая запускается при начале записи и создает ссылку на ExtAudioFile:

- (void) setActive:(NSString *) file 
{
if (mExtAFRef) {
    ExtAudioFileDispose(mExtAFRef);
    mExtAFRef = nil;
    NSLog(@"mExtAFRef Disposed.");
}

if (mOutputAudioFile)
{
    ExtAudioFileDispose(mOutputAudioFile);
    mOutputAudioFile = nil;
    NSLog(@"mOutputAudioFile Disposed.");
}

NSURL *outUrl = [NSURL fileURLWithPath:file];

OSStatus setupErr = ExtAudioFileCreateWithURL((CFURLRef)outUrl, kAudioFileWAVEType, &mOutputFormat, NULL, kAudioFileFlags_EraseFile, &mOutputAudioFile);  
NSAssert(setupErr == noErr, @"Couldn't create file for writing");

setupErr = ExtAudioFileSetProperty(mOutputAudioFile,       kExtAudioFileProperty_ClientDataFormat, sizeof(AudioStreamBasicDescription), &audioFormat);
NSAssert(setupErr == noErr, @"Couldn't create file for format");

setupErr =  ExtAudioFileWriteAsync(mOutputAudioFile, 0, NULL);
NSAssert(setupErr == noErr, @"Couldn't initialize write buffers for audio file");

isActive = TRUE;

}

Есть ли у кого-нибудь какие-нибудь мысли по поводу того, что может быть причиной этого? Я предполагаю, учитывая EXC_BAD_ACCESS, что это утечка памяти или счетчик ссылок чего-то обнуляется, но я не могу понять, что это может быть, а гугл выдает полную пустоту. Я написал то же самое на форуме разработчиков Apple для CoreAudio, но ни одна душа не сжалилась надо мной, даже чтобы сделать язвительный комментарий. HALP!

EDIT: Нашел проблему. Ошибка возникала, когда ExtAudioFileWriteAsync пытался записать новый файл до того, как старый файл был "оптимизирован". Небольшая любовь к мьютексу решила проблему.

6
задан Chris Randall 6 November 2011 в 15:34
поделиться