2011-01-03 5 views
0

iPhone用のAudioUnitを使用してレコードを作成しようとしています。AudioBufferのEXC_BAD_ACCESS

変更:私は、次のコードを追加した(開始)

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

私はAudioBuffer(ioData-> mBuffers [0] .mData)のEXC_BAD_ACCESSです。

このエラーはわかりません。それを解決するのを手伝ってください。

+0

バッファリストはどのように初期化されていますか?そのリストの要素は、通常、記録されたサンプルが置かれる場所です。 – hotpaw2

+0

bufferListで何も初期化しませんでした。しかし、私はioDataからデータを読み込んでいます。 – jfalexvijay

+0

私は問題がある。実際にAudioBufferList(私はioDataを意味します)はデータを持っていません。それはなぜ、このエラーを出しているのですか?しかし、私はそれを修正する方法がわからない。 – jfalexvijay

答えて

0

私はそれを解決しました。

私のコードでは、私は2つのコールバックメソッドを書いています。 2つのオーディオユニットを使用するには、2つのオーディオデバイスが必要です。

ただ1つのコールバック機能を削除しました。

これについて知るには、次のリンクをご覧ください。
http://developer.apple.com/library/mac/#technotes/tn2002/tn2091.html

0

解放されたオブジェクトにメッセージを送信しています。 XCodeでProject - > Edit Active Executable - > Arguments - > "plus"ボタンをクリックし、NSZombieEnabledを追加してその値をYESに設定します。そうすることで、アプリケーションをデバッグして、割り当て解除されたオブジェクトが依然としてメッセージを受信して​​いるかどうかを調べることができます。

ただし、プロジェクトでこの引数を無効にすることを忘れないでください。

+0

問題を解決する考えはありますか?問題は、 AudioBufferList(ioData)にデータがありません。だからそれはエラーを出すだけです。 – jfalexvijay