Tôi gặp sự cố khi lắp bộ trộn vào AUGraph
nếu không hoạt động OK trên cả Mac OS và iOS.Im lặng khi thêm kAudioUnitSubType_MultiChannelMixer vào AUGraph
đồ thị làm việc của tôi trông như thế này:
(My Audio render callback) <- [Format converter] <- [DefaultOutput]
Bên cạnh đó, tôi có thể chèn thành công một đơn vị EQ như thế này:
(My Audio render callback) <- [Format converter] <- [GraphicEQ] <- [DefaultOutput]
Mục tiêu của tôi là để chèn một đơn vị trộn nhưng không có EQ nên tôi có thể kiểm soát lượng đồ thị của mình một cách độc lập với khối lượng hệ thống trên iOS. Tuy nhiên, khi tôi thiết lập biểu đồ, có vẻ như trông OK, nhưng tất cả những gì tôi nhận được là sự im lặng.
Dưới đây là những gì mà đồ thị dưới trông giống như:
(My Audio render callback) <- [Format converter] <- [MultiChannelMixer] <- [DefaultOutput]
... và đầu ra của 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)
Và, cuối cùng, các mã đó là thiết lập đồ thị với kiểm tra lỗi và iOS- mã cụ thể loại bỏ:
// 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);
vì vậy điều này đã làm việc với GraphicEQ thay vì máy trộn? Với cùng một cuộc gọi lại? bạn có thể làm cho nó hoạt động mà không cần gọi lại không? – hooleyhoop