2012-07-09 86 views
1

我基本上試圖獲得使用GenericOutput Node和到AudioUnitRender呼叫由AUGraph生產的樣品。作爲我的程序的起點,我使用Apple的MixerHost示例,並更改outputNode如下。AudioUnitRender失敗GenericOutput(-10877 /無效的元素)

AudioComponentDescription iOUnitDescription; 
iOUnitDescription.componentType   = kAudioUnitType_Output; 
iOUnitDescription.componentSubType  = kAudioUnitSubType_GenericOutput; 
iOUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
iOUnitDescription.componentFlags   = 0; 
iOUnitDescription.componentFlagsMask  = 0; 

後來,當我想獲得我的樣本,我打電話

AudioUnitRenderActionFlags ioActionFlags = kAudioOfflineUnitRenderAction_Render; 
AudioTimeStamp  inTimeStamp = {0}; 

inTimeStamp.mHostTime = mach_absolute_time(); 
inTimeStamp.mFlags = kAudioTimeStampSampleHostTimeValid; 

result = AudioUnitRender (
       ioUnit, 
       &ioActionFlags, 
       &inTimeStamp, 
       1, 
       1024, 
       ioData 
       ); 

這將產生一個

「-10877 /無效的元素」

錯誤。我的假設是,錯誤來自沒有正確設置inTimeStamp.mSampleTime字段。說實話,我還沒有找到找到除AudioQueueDeviceGetCurrentTime以外的樣本時間的方法,我不能使用它,因爲我沒有使用AudioQueue。但是,將ioActionFlag更改爲kAudioTimeStampHostTimeValid不會更改錯誤行爲。

回答

0

與元素(AKA'bus')相關的錯誤引用您的AudioUnitRender調用的第4個參數(1)。通用輸出單元只有一個元素/總線:0,它具有輸入,輸出和全局範圍。如果您向元素#傳遞0而不是1,則該錯誤應該消失。