1. 总结一下
I/O Unit有两个element(bus),每一个都有input及output两个scope
input element的input scope,直接与mic hardware相连,不用配置
output element的output scope,直接与speaker hardware相连,不用配置
在我的应用中,只需要配置output element的input scope就可以了。
2。过程
Q:AudioUnitRender是否需要?
发现conferenceinterface.h未include,但居然编译也通过了,奇怪。加入后,结果一样。
staticOSStatus renderCallback(void *inRefCon,AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber,UInt32 inNumberFrames,AudioBufferList *ioData) {
Q: why inNumberFames=186 ? 但ioData.mNumberBuffers=1?
ioData.mBuffers[0].mDataByteSize=744( 744/4=186)
另,renderCallback被呼叫频率是约11ms
ASSERT_OK(AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_SetRenderCallback, //
//kAudioOutputUnitProperty_SetInputCallback, Q: which one is correct ? why ?
kAudioUnitScope_Input,
0,
&callback_struct,
sizeof(callback_struct)));