将kAudioUnitSubType_MultiChannelMixer添加到AUGraph时无声

问题描述:

我在将混音器单元插入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

...当然,在发布我的问题后,我偶然发现回答。

看来,至少在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