我想重塑一個AUGraph
看起來像這樣:不能轉換音頻單元連接到混響效果
multichannel mixer -> remote I/O
弄成這個樣子:
callback -> converter1 -> bandpass -> reverb -> converter2 -> mixer(bus 0) -> remote I/O
圖表後已初始化並開始(即「即時」)。爲了使流格式傳播和音頻單位前來洽談每個連接的格式,我追加新創建的音頻單元順序如下:
- 清除所有現有連接(
AUGraphClearConnections()
)。 - 重建默認連接(
mixer
- >remote I/O
) - 附加
converter2
到mixer
,總線#0 (converter2其輸出到混頻器相匹配:整數) - 附加
reverb
到converter2
(converter1其輸入相匹配至混響:浮動) - 附加
bandpass
至reverb
(均使用浮動) - 附加
converter1
到bandpass
(converter1 應該匹配其輸出到帶通:浮動)
(converter1的輸入預先設定爲整數,手動,使用AudioUnitSetProperty
)
...和最後,將渲染回調連接到轉換器#1的輸入。
我檢查所有核心音頻功能的返回值(錯誤代碼)。另外,連接每個節點後,我在圖上調用AUGraphUpdate()
和CAShow()
。
最後一步(「5.轉換器#1連接到帶通效應」)失敗,代碼爲-10868(kAudioUnitErr_FormatNotSupported
)。
這是CAShow()
輸出只是違規調用AUGraphUpdate()
前:
AudioUnitGraph 0x305A000:
Member Nodes:
node 1: 'aumx' 'mcmx' 'appl', instance 0x17822d0e0 O I
node 2: 'auou' 'rioc' 'appl', instance 0x17822cd80 O I
node 3: 'aufc' 'conv' 'appl', instance 0x170833e40 O
node 4: 'aufx' 'bpas' 'appl', instance 0x170827b60 O I
node 5: 'aufx' 'rvb2' 'appl', instance 0x170835100 O I
node 6: 'aufc' 'conv' 'appl', instance 0x170a21460 O I
Connections:
node 1 bus 0 => node 2 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 6 bus 0 => node 1 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node 5 bus 0 => node 6 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
node 4 bus 0 => node 5 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
CurrentState:
mLastUpdateError=0, eventsToProcess=F, isInitialized=T, isRunning=T (1)
那麼,這是怎麼回事?
備註最後致電AUGraphConnectNodeInput()
本身返回noErr
;它是圖表更新後拋出的錯誤。
如果有人發佈答案解釋* *進一步**發生了什麼,例如你需要做什麼以及在這種情況下你不需要做什麼,我會接受它。我仍然發現這個東西... –
更新:沒有人出現,所以我接受了我自己的答案。 –
保存我的一天!奇怪的是必須得到'reverbUnit'格式,而不是僅僅使用規範的格式。如果有人有一個想法爲什麼,我會感興趣。 – MonsieurDart