2012-02-14 8 views
1

マイク/ラインインオーディオレンダリングコールバックの最後に次のコードを追加しました。ExtAudioFileWriteAsyncのEXC_BAD_ACCESS

しかし、アプリが上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 ...."); 

私はこれでほとんどすべてを試してみました。誰かが私にそれを解決するのを手伝ってもらえると非常に感謝しています。ありがとう!

UPDATE 1:

私はExtAudioFileWriteの代わりExtAudioFileWriteAsyncを使用する場合は、アプリがクラッシュしますが、ExtAudioFileWriteのエラー-50が返されません。

私はまだ何が起こっているのか分かりません。この点に関する助けは大いに感謝しています。

ありがとうございました。

+0

コンソールからのエラーメッセージ全体は何ですか? – zaph

+1

あなたが欠落している場合は、以前の呼び出しでエラーがないかどうかをチェックします。戻り値を確認すると、必要な情報が得られます。また、次のように定義されています。inNumberFrames、ioData – MByD

+0

@CocoaFuコンソールにメッセージがありません。それは悲しい部分です。 [プロセス6191スレッド0x18203に切り替える] [プロセス6191スレッド0x18203に切り替える] 現在の言語:auto;現在objective-c – Myxtic

答えて

0

ioData.mNumberBuffersの値を確認してください。私にとっては、bufferlistに1つのバッファしかないのに2に設定されていました。これが原因でEXC_BAD_ACCESSが発生しました。