2017-07-05 6 views
0

Ich versuche, den dynamischen Prozessor und eine Reihe von Filtern zu verwenden, um ein bestimmtes Frequenzband innerhalb der Spotify-Methode connectOutputBus zu komprimieren, aber wenn ich die Knoten in der kAudioUnitSubType_MultiChannelMixer nur den Klang der ersten hinzugefügter Knoten kommt heraus.Mischen Sie zwei AUNodes in Spotify iOS SDK

Obs: Ich benutze tatsächlich Filter auf sourceNodeCopy, um die Freqs zu entfernen, die auf der souceNode komprimiert werden, aber um die Dinge kurz zu halten, habe ich sie weggelassen.

Hier ist der Code:

override func connectOutputBus(_ sourceOutputBusNumber: UInt32, ofNode sourceNode: AUNode, toInputBus destinationInputBusNumber: UInt32, ofNode destinationNode: AUNode, in graph: AUGraph!) throws { 

    let sourceNodeCopy = sourceNode //original node without the harsh freq 

    //create a filter for the harsh frequencies 
    var filterDescription = AudioComponentDescription() 
    filterDescription.componentType = kAudioUnitType_Effect 
    filterDescription.componentSubType = kAudioUnitSubType_BandPassFilter 
    filterDescription.componentManufacturer = kAudioUnitManufacturer_Apple 
    filterDescription.componentFlags = 0 
    filterDescription.componentFlagsMask = 0 

    AUGraphAddNode(graph, &filterDescription, &filterNode!) // Add the filter node 
    AUGraphNodeInfo(graph, filterNode!, nil, &filterUnit!) // Get the Audio Unit from the node 
    AudioUnitInitialize(filterUnit!) // Initialize the audio unit 
    // Set filter params 
    AudioUnitSetParameter(filterUnit!, kBandpassParam_CenterFrequency, kAudioUnitScope_Global, 0, 10038, 0) 

    //create a processor to compress the frequency 
    var dynamicProcessorDescription = AudioComponentDescription() 
    dynamicProcessorDescription.componentType = kAudioUnitType_Effect 
    dynamicProcessorDescription.componentSubType = kAudioUnitSubType_DynamicsProcessor 
    dynamicProcessorDescription.componentManufacturer = kAudioUnitManufacturer_Apple 
    dynamicProcessorDescription.componentFlags = 0 
    dynamicProcessorDescription.componentFlagsMask = 0 

    // Add the dynamic processor node 
    AUGraphAddNode(graph, &dynamicProcessorDescription, &dynamicProcessorNode) 
    AUGraphNodeInfo(graph, dynamicProcessorNode, nil, &dynamicProcessorUnit) 
    AudioUnitInitialize(dynamicProcessorUnit!) 

    // Set compressor params 
    AudioUnitSetParameter(dynamicProcessorUnit!, kDynamicsProcessorParam_Threshold, kAudioUnitScope_Global, 0, -35, 0) 
    AudioUnitSetParameter(dynamicProcessorUnit!, kDynamicsProcessorParam_AttackTime, kAudioUnitScope_Global, 0, 0.02, 0) 
    AudioUnitSetParameter(dynamicProcessorUnit!, kDynamicsProcessorParam_ReleaseTime, kAudioUnitScope_Global, 0, 0.04, 0) 
    AudioUnitSetParameter(dynamicProcessorUnit!, kDynamicsProcessorParam_HeadRoom, kAudioUnitScope_Global, 0, 0, 0) 

    //mixer 
    var mixerDescription = AudioComponentDescription() 
    mixerDescription.componentType = kAudioUnitType_Mixer 
    mixerDescription.componentSubType = kAudioUnitSubType_MultiChannelMixer 
    mixerDescription.componentManufacturer = kAudioUnitManufacturer_Apple 
    mixerDescription.componentFlags = 0 
    mixerDescription.componentFlagsMask = 0 

    AUGraphAddNode(graph, &mixerDescription, &audioEffectsController.mixerNode) 
    AUGraphNodeInfo(graph, audioEffectsController.mixerNode, nil, 
        &audioEffectsController.mixerUnit) 
    AudioUnitInitialize(audioEffectsController.mixerUnit!) 

    AudioUnitSetParameter(mixerUnit!, kMultiChannelMixerParam_Volume, kAudioUnitScope_Input, 0, 1.0, 0); 
    AudioUnitSetParameter(mixerUnit!, kMultiChannelMixerParam_Volume, kAudioUnitScope_Output, 0, 1.0, 0); 


    //connect the nodes 
    AUGraphConnectNodeInput(graph, sourceNode, sourceOutputBusNumber, filterNode, 0) 
    AUGraphConnectNodeInput(graph, filterNode, sourceOutputBusNumber, dynamicProcessorNode, 0) 

    AUGraphConnectNodeInput(graph, sourceNodeCopy, sourceOutputBusNumber, mixerNode, 0) 
    AUGraphConnectNodeInput(graph, fiterNode, sourceOutputBusNumber, mixerNode, 0) 

    //connect the mixer to the output 
    AUGraphConnectNodeInput(graph, audioEffectsController.mixerNode, 0, destinationNode, destinationInputBusNumber) 

Antwort

0

In Ihrem Code Sie den Knoten wie folgt

AUGraphConnectNodeInput(graph, sourceNodeCopy, sourceOutputBusNumber, mixerNode, 0) 
AUGraphConnectNodeInput(graph, fiterNode, sourceOutputBusNumber, mixerNode, 0) 

verbinden Wenn Sie dies tun, werden Sie sourceNodeCopy und filterNode an den gleichen Eingang verbinden (0) von die MixerNode. Aber nur einer kann angeschlossen werden ...

Sie sollten versuchen, diese stattdessen

AUGraphConnectNodeInput(graph, sourceNodeCopy, sourceOutputBusNumber, mixerNode, 0) 
AUGraphConnectNodeInput(graph, fiterNode, sourceOutputBusNumber, mixerNode, 1) 
+0

Ich konnte es durch die Verwendung eines Splitters Knoten und Verbindungs ​​sie funktioniert wie Sie gesagt haben, danke! – Gustavo

Verwandte Themen