レコーダー コールバック(kAudioOutputUnit_SetInputCallback) があり、コールバックが返す 1 つの情報だけで AudioBufferList にバッファを割り当てる必要があります。これをmallocするにはどうすればよいですか?フレーム数のみを使用して、使用可能なデータ量を判断するにはどうすればよいですか?
1739 次
1 に答える
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;
}
于 2012-05-25T05:02:51.107 に答える