2012-05-25 48 views

回答

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

你也可以勾選這個[link](http://atastypixel.com/blog/using-remoteio-audio-unit/) – Saraswati