EXC_BAD_ACCESS на ExtAudioFileWriteAsync - PullRequest
       13

EXC_BAD_ACCESS на ExtAudioFileWriteAsync

1 голос
/ 14 февраля 2012

Я добавил следующий код в конце обратного вызова рендеринга аудио / микрофона.

Но приложение продолжает зависать при EXC_BAD_ACCESS:

err = ExtAudioFileWriteAsync(mOutputAudioFile, inNumberFrames, ioData);

Остальныекод выглядит следующим образом:

ExtAudioFileRef mOutputAudioFile;
    AudioFileID mAfid;
    NSLog(@"Writing output to file ....");

    NSArray *dirPaths;
    NSString *docsDir;
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
    NSLog(@"docDir = %@", docsDir);
    NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.caf"];
    NSURL *inPath = [NSURL fileURLWithPath:soundFilePath];
    NSLog(@"Output file path is : %@", inPath);

    AudioStreamBasicDescription mStreamFormat;

    mStreamFormat.mChannelsPerFrame     = 1;
    mStreamFormat.mSampleRate           = 44100.00;
    mStreamFormat.mFormatID             = kAudioFormatLinearPCM;
    mStreamFormat.mFormatFlags          = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    mStreamFormat.mBitsPerChannel       = 16;
    mStreamFormat.mBytesPerFrame        = 2;
    mStreamFormat.mFramesPerPacket      = 1;
    mStreamFormat.mBytesPerPacket       = 2;
    mStreamFormat.mReserved             = 0;


    err = AudioFileCreateWithURL((CFURLRef)inPath, kAudioFileCAFType, &mStreamFormat, kAudioFileFlags_EraseFile, &mAfid);
    if (err != noErr) {
        NSLog(@"ERROR : Audio file could not be created !! %d", (int)err);

    }
    err = ExtAudioFileWrapAudioFileID(mAfid, true, &mOutputAudioFile);
    err = ExtAudioFileSetProperty(mOutputAudioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(AudioStreamBasicDescription), &mStreamFormat);
    if (ioData) {
        err = ExtAudioFileWriteAsync(mOutputAudioFile, inNumberFrames, ioData);
        if (err != noErr) {
            NSLog(@"ERROR : Audio file could not be written !! %d", (int)err);
        }
    }
    else {

        NSLog(@"No ioData found");
    }
    NSLog(@"Done writing output to file ....");

Я попробовал почти все с этим.Я был бы чрезвычайно благодарен, если бы кто-нибудь мог помочь мне решить это.Спасибо!

ОБНОВЛЕНИЕ 1:

Если я использую ExtAudioFileWrite вместо ExtAudioFileWriteAsync, приложение не аварийно завершает работу, но возвращает ошибку -50 для ExtAudioFileWrite.

Я до сих пор не знаю, что с ним происходит.Любая помощь в этом отношении очень ценится.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июля 2016

Проверьте значение ioData.mNumberBuffers. Для меня это было установлено на 2, несмотря на то, что в списке буферов был только 1 буфер. Это вызывало EXC_BAD_ACCESS.

0 голосов
/ 20 февраля 2012

Пример кода, размещенный в ответе здесь, ответил на все мои вопросы:

Может ли кто-нибудь помочь мне в записи звука с iPhone через Audio Unit

Большое спасибо всемза вашу помощь.

...