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

초기화되는 bufferList는 무엇입니까? 그 목록의 요소는 보통 녹음 된 샘플을 넣는 곳입니다. – hotpaw2

+0

bufferList에서 아무 것도 초기화하지 않았습니다. 그러나 ioData에서 데이터를 읽습니다. – jfalexvijay

+0

문제가 있습니다. 실제로 AudioBufferList (나는 ioData를 의미한다)는 데이터를 가지고 있지 않다. 그게 왜,이 오류를주고있다. 그러나 나는 그것을 고치는 방법을 모른다. – jfalexvijay

답변

0

할당 취소 된 개체로 메시지를 보내고 있습니다. XCode에서 Project -> Edit Active Executable -> Arguments -> "plus"버튼을 클릭하고 NSZombieEnabled를 추가하고 값을 YES로 설정하십시오. 이렇게하면 응용 프로그램을 디버그하고 할당 취소 된 개체가 여전히 메시지를 받는지 확인할 수 있습니다.

하지만 나중에 프로젝트에서이 인수를 사용 중지하는 것을 잊지 마십시오.

+0

문제를 해결할 생각이십니까? 문제는; AudioBufferList (ioData)에 데이터가 없습니다. 그래서 그것은 단지 오류를주고 있습니다. – jfalexvijay