2012-05-25 2 views
0

콜백이 반환하는 하나의 informatin-inNUmberFrames로 AudioBufferList에 버퍼를 할당해야하는 레코더 콜백 (kAudioOutputUnit_SetInputCallback)이 있습니다. 어떻게 이것을 malloc합니까? 프레임 수만 사용하여 사용 가능한 데이터의 양을 결정하려면 어떻게합니까?inNumberFrames 정보 만있는 AudioBufferList에 버퍼 할당 iOS

답변

2
OSStatus AudioCapturer::recordingCallback(void *inRefCon, 
           AudioUnitRenderActionFlags *ioActionFlags, 
           const AudioTimeStamp *inTimeStamp, 
           UInt32 inBusNumber, 
           UInt32 inNumberFrames, 
           AudioBufferList *ioData) { 

AudioCapturer *capturer=(AudioCapturer *)inRefCon; 

    AudioBuffer buffer; 
    buffer.mNumberChannels = 1; 
    buffer.mDataByteSize = inNumberFrames * 2; 
    buffer.mData = malloc(inNumberFrames * 2); 

    // Put buffer in a AudioBufferList that is to be filled in the AudioUnitRender 
    AudioBufferList bufferList; 
    bufferList.mNumberBuffers = 1; 
    bufferList.mBuffers[0] = buffer; 

    // Then: 
    // Obtain recorded samples 
    OSStatus status; 
    status = AudioUnitRender(capturer->m_audioUnit, 
          ioActionFlags, 
          inTimeStamp, 
          inBusNumber, 
          inNumberFrames, 
          &bufferList); 
    capturer->checkStatus(status); 


    //use the bufferlist data and free the allocated buffer 
    free(bufferList.mBuffers[0].mData); 

return noErr; 
} 
+1

u [link] (http://atastypixel.com/blog/using-remoteio-audio-unit/) – Saraswati