2012-03-28 11 views
5

Mam problem z włożeniem miksera do urządzenia AUGraph, które w przeciwnym razie działa poprawnie zarówno w systemie Mac OS, jak i iOS.Cisza podczas dodawania kAudioUnitSubType_MultiChannelMixer do AUGraph

Mój wykres pracy wygląda następująco:

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

Ponadto, jestem w stanie z powodzeniem wstawić jednostkę EQ tak:

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

Moim celem jest, aby wstawić jednostkę mieszacza ale brak korekcji, dzięki czemu mogę kontrolować głośność mojego wykresu niezależnie od woluminu systemowego w systemie iOS. Jednak kiedy ustawiam wykres, wydaje mi się, że wygląda to tak: OK, ale wszystko, co dostaję, to cisza.

Oto co na wykresie wygląda następująco:

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

... i wyjściu 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) 

i wreszcie kod, który jest utworzenie wykresu z błędem kontroli oraz iOS- określony kod został usunięty:

// 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

tak ten pracował z GraphicEQ zamiast miksera? Z tym samym oddzwanianiem? czy możesz to zrobić działając bez wywołania zwrotnego? – hooleyhoop

Odpowiedz

13

... i oczywiście zaraz po opublikowaniu mojego pytania, natknę się na odpowiedź.

Wygląda na to, że na Mac OS przynajmniej wolumin wejściowy na mikserze wynosi domyślnie 0.0. Ręczne ustawienie głośności wejścia stałe to aż:

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

Dla mnie ustawienie parametru kAudioUnitScope_Output zamiast KAudioUnitScope_Input. – user523234

+2

FYI: Musiałem ustawić In- i Output, aby uzyskać sygnał. – hobotron

Powiązane problemy