2012-03-28 17 views
5

我在將混音器單元插入AUGraph時遇到問題,該問題在Mac OS和iOS上均可正常工作。將kAudioUnitSubType_MultiChannelMixer添加到AUGraph時無聲

我的工作曲線圖如下所示:

(My Audio render callback) <- [Format converter] <- [DefaultOutput] 

此外,我能夠成功插入EQ單元是這樣的:

(My Audio render callback) <- [Format converter] <- [GraphicEQ] <- [DefaultOutput] 

我的目標是要插入一個混頻器單元,但沒有EQ,所以我可以獨立於iOS上的系統音量來控制圖表的音量。但是,當我設置圖表,似乎看起來好吧,但我得到的只是沉默。

這裏的圖是什麼樣子:

(My Audio render callback) <- [Format converter] <- [MultiChannelMixer] <- [DefaultOutput] 

...和CAShow的輸出:

AudioUnitGraph 0x397000: 
    Member Nodes: 
    node 1: 'auou' 'def ' 'appl', instance 0x8039704d O I 
    node 2: 'aumx' 'mcmx' 'appl', instance 0x8039704e O I 
    node 3: 'aufc' 'conv' 'appl', instance 0x8039704f O I 
    Connections: 
    node 3 bus 0 => node 2 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved] 
    node 2 bus 0 => node 1 bus 0 [ 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved] 
    Input Callbacks: 
    {0x100035d90, 0x10037cd60} => node 3 bus 0 [2 ch, 44100 Hz] 
    CurrentState: 
    mLastUpdateError=0, eventsToProcess=F, isRunning=T (1) 

而且,最後,這是建立與錯誤檢查和iOS-圖碼刪除特定的代碼:

// A description of the output device we're looking for. 
AudioComponentDescription outputDescription; 
outputDescription.componentType = kAudioUnitType_Output; 
outputDescription.componentSubType = kAudioUnitSubType_DefaultOutput; 
outputDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
outputDescription.componentFlags = 0; 
outputDescription.componentFlagsMask = 0; 

// A description of the mixer unit 
AudioComponentDescription mixerDescription; 
mixerDescription.componentType = kAudioUnitType_Mixer; 
mixerDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer; 
mixerDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
mixerDescription.componentFlags = 0; 
mixerDescription.componentFlagsMask = 0; 

// A description for the libspotify -> standard PCM device 
AudioComponentDescription converterDescription; 
converterDescription.componentType = kAudioUnitType_FormatConverter; 
converterDescription.componentSubType = kAudioUnitSubType_AUConverter; 
converterDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
converterDescription.componentFlags = 0; 
converterDescription.componentFlagsMask = 0;  

// Create an AUGraph 
OSErr status = NewAUGraph(&audioProcessingGraph); 

// Open the graph. AudioUnits are open but not initialized (no resource allocation occurs here) 
AUGraphOpen(audioProcessingGraph); 

// Add audio output... 
status = AUGraphAddNode(audioProcessingGraph, &outputDescription, &outputNode); 

// Add mixer 
status = AUGraphAddNode(audioProcessingGraph, &mixerDescription, &mixerNode); 

// Get mixer unit so we can change volume etc 
status = AUGraphNodeInfo(audioProcessingGraph, mixerNode, NULL, &mixerUnit); 

// Set mixer bus count 
UInt32 busCount = 1; 
status = AudioUnitSetProperty(mixerUnit, kAudioUnitProperty_ElementCount, kAudioUnitScope_Input, 0, &busCount, sizeof(busCount)); 

// Create PCM converter 
status = AUGraphAddNode(audioProcessingGraph, &converterDescription, &inputConverterNode); 

// Connect converter to mixer 
status = AUGraphConnectNodeInput(audioProcessingGraph, inputConverterNode, 0, mixerNode, 0); 

// Connect mixer to output 
status = AUGraphConnectNodeInput(audioProcessingGraph, mixerNode, 0, outputNode, 0); 

// Set render callback 
AURenderCallbackStruct rcbs; 
rcbs.inputProc = AudioUnitRenderDelegateCallback; 
rcbs.inputProcRefCon = (__bridge void *)(self); 

status = AUGraphSetNodeInputCallback(audioProcessingGraph, inputConverterNode, 0, &rcbs); 

// Init Queue 
status = AUGraphInitialize(audioProcessingGraph); 

AUGraphUpdate(audioProcessingGraph, NULL); 
AUGraphStart(audioProcessingGraph); 
+0

所以這與GraphicEQ而不是混音器?使用相同的回調?你能在沒有回調的情況下工作嗎? – hooleyhoop 2012-03-28 09:47:01

回答

13

...當然,在發佈我的問題後,我偶然發現回答。

看來,至少在Mac OS上,混音器的輸入音量默認爲0.0。手動設置輸入音量固定它:

status = AudioUnitSetParameter(mixerUnit, kMultiChannelMixerParam_Volume, kAudioUnitScope_Input, 0, 1.0, 0); 
+1

對於我設置kAudioUnitScope_Output而不是KAudioUnitScope_Input。 – user523234 2012-09-25 00:24:25

+2

供參考:我必須設置輸入和輸出以獲取信號。 – hobotron 2012-11-19 17:01:39