2016-12-21 4 views
9

मैं एक HOST एप्लिकेशन लिख रहा हूं जो कोर ऑडियो का नया आईओएस 7 इंटर ऐप ऑडियो तकनीक का उपयोग करता है। मैंने Inter-App Audio Examples की सहायता से उपकरण ऐप्स और प्रभाव ऐप प्राप्त करने में कामयाब रहा है।इंटर ऐप ऑडियो तकनीक: प्रभाव नोड और उपकरण नोड स्वतंत्र

मुद्दा यह है कि प्रभाव नोडनिर्भर साधन नोड पर है। मैं प्रभाव नोड और उपकरण नोड स्वतंत्र बनाना चाहता हूं।

यहां मैं कोशिश करता हूं।

if (desc.componentType == kAudioUnitType_RemoteEffect) { 
//   if ([self isRemoteInstrumentConnected]) { 
       if (!_engineStarted)         // Check if session is active 
        [self checkStartOrStopEngine]; 

       if ([self isGraphStarted])        // Check if graph is running and or is created, if so, stop it 
        [self checkStartStopGraph]; 

       if ([self checkGraphInitialized ])      // Check if graph has been inititialized if so, uninitialize it. 
        Check(AUGraphUninitialize(hostGraph)); 

       Check (AUGraphAddNode (hostGraph, &desc, &effectNode)); // Add remote instrument 

       //Disconnect previous chain 
       // Check(AUGraphDisconnectNodeInput(hostGraph, mixerNode, remoteBus)); 

       //Connect the effect node to the mixer on the remoteBus 
       Check(AUGraphConnectNodeInput (hostGraph, effectNode, 0, mixerNode, remoteBus)); 

       //Connect the remote instrument node to the effect node on bus 0 
       Check(AUGraphConnectNodeInput (hostGraph, instrumentNode, 0, effectNode, 0)); 

       //Grab audio units from the graph 
       Check(AUGraphNodeInfo(hostGraph, effectNode, 0, &effect)); 
       currentUnit = &effect; 
      } 

if (currentUnit) { 
      Check (AudioUnitSetProperty (*currentUnit,     // Set stereo format 
             kAudioUnitProperty_StreamFormat, 
             kAudioUnitScope_Output, 
             playerBus, 
             &stereoStreamFormat, 
             sizeof (stereoStreamFormat))); 
      UInt32 maxFrames = 4096; 
      Check(AudioUnitSetProperty(*currentUnit, 
             kAudioUnitProperty_MaximumFramesPerSlice, 
             kAudioUnitScope_Global, playerBus, 
             &maxFrames, 
             sizeof(maxFrames))); 

      [self addAudioUnitPropertyListeners:*currentUnit];   // Add property listeners to audio unit 
      Check(AUGraphInitialize (hostGraph));      // Initialize the graph 

      [self checkStartStopGraph];         //Start the graph 
     } 

     [_connectedNodes addObject:rau]; 

लेकिन इस लाइन पर मेरे अनुप्रयोग क्रैश -

Check(AUGraphInitialize (hostGraph)); 

और त्रुटि मुझे मिल गया,

ConnectAudioUnit त्रुटि के साथ विफल

-10860 प्रारंभ त्रुटि

के साथ विफल

-10860 ई AUGraphInitialize (hostGraph) से rror -10860


नोट: - मैं भी बेहतर करने के लिए कोड हिस्से का स्क्रीनशॉट संलग्न है समझते हैं।

enter image description here

संपादित करें 1: -

- (void)createGraph { 
    // 1 
    NewAUGraph(&hostGraph); 

    // 2 
    AudioComponentDescription iOUnitDescription; 
    iOUnitDescription.componentType = 
    kAudioUnitType_Output; 
    iOUnitDescription.componentSubType = 
    kAudioUnitSubType_RemoteIO; 
    iOUnitDescription.componentManufacturer = 
    kAudioUnitManufacturer_Apple; 
    iOUnitDescription.componentFlags = 0; 
    iOUnitDescription.componentFlagsMask = 0; 
    AUGraphAddNode(hostGraph, &iOUnitDescription, &outNode); 

    // 3 
    AUGraphOpen(hostGraph); 

    // 4 
    Check(AUGraphNodeInfo(hostGraph, outNode, 0, &outputUnit)); 
    // 5 
    AudioStreamBasicDescription format; 
    format.mChannelsPerFrame = 2; 
    format.mSampleRate = 
    [[AVAudioSession sharedInstance] sampleRate]; 
    format.mFormatID = kAudioFormatLinearPCM; 
    format.mFormatFlags = 
    kAudioFormatFlagsNativeFloatPacked | 
    kAudioFormatFlagIsNonInterleaved; 
    format.mBytesPerFrame = sizeof(Float32); 
    format.mBytesPerPacket = sizeof(Float32); 
    format.mBitsPerChannel = 32; 
    format.mFramesPerPacket = 1; 

    AudioUnitSetProperty(mixerUnit, 
         kAudioUnitProperty_StreamFormat, 
         kAudioUnitScope_Output, 
         1, 
         &format, 
         sizeof(format)); 

    AudioUnitSetProperty(mixerUnit, 
         kAudioUnitProperty_StreamFormat, 
         kAudioUnitScope_Input, 
         0, 
         &format, 
         sizeof(format)); 
    CAShow(hostGraph); 
} 

उत्तर

0

तो त्रुटि आप प्रति apple docs के रूप में, देख रहे हैं, The specified node cannot be found के कारण है।

ऐसा लगता है कि आपने ऐप्पल उदाहरण ऐप को लिंक किया है और आपने 1 नोड को निकालने का प्रयास करने के लिए थोड़ा सा हटा दिया है, लेकिन मुझे यह इतना आसान नहीं लगता है। उदाहरण के दस्तावेज स्पष्ट रूप से बताता है कि दो नोड निर्भर हैं। बस रिमोट्स विधि को जोड़ने के लिए पर्याप्त नहीं होने वाला है, क्योंकि होस्ट अभी भी दोनों को बनाने की कोशिश कर रहा है, जैसा कि आप देख रहे त्रुटि से दिखाया गया है।

उदाहरण परियोजना में इस file से, आप केवल परिवर्तन आप addRemoteAU करने के लिए बनाया दिखा रहे हैं, लेकिन आप के रूप में अच्छी createGraph में परिवर्तन करने के किए जाने की जरूरत है, क्योंकि यह है कि जहां hostGraph अपने नोड्स के साथ आरंभ नहीं हो जाता। यदि आप ग्राफ को केवल 1 नोड के साथ प्रारंभ करते हैं, तो addRemoteAU में आपको नोड के कारण त्रुटि दिखाई देना बंद कर देना चाहिए, क्योंकि उस बिंदु पर ग्राफ दो नोड्स (जो अब इसकी रचना से करता है) की अपेक्षा नहीं करेगा।

+0

रीप्ले के लिए धन्यवाद। क्या आप कृपया थोड़ा और विस्तार से समझा सकते हैं? जैसे, ग्राफ़ बनाने में आवश्यक परिवर्तन क्या हैं ?? क्या आप कोड के साथ मदद कर सकते हैं कि वास्तव में क्या हटाया जाना चाहिए? –

+0

चूंकि आपने उस विधि में जो भी प्रयास किया है, उसे पोस्ट नहीं किया है, इसलिए मैं वास्तव में नहीं कर सकता।आपके द्वारा प्रदान की गई जानकारी के आधार पर, मैंने जितना विस्तार किया है उतना विस्तार प्रदान किया है, लेकिन इस तथ्य पर विचार करते हुए कि आपने उदाहरण ऐप से कुछ लाइनों को हटाने की कोशिश की है, मैं कोड लिखने वाला नहीं हूं आपको अपने प्रयासों को समझने में सक्षम होने के बिना आपको अपनी समस्या का समाधान करने की आवश्यकता है (जो अब तक मैंने देखा है, एक प्रतिलिपि बनाई गई उदाहरण ऐप सेक्शन को दो पंक्तियों के साथ हटाया गया है, कोई अन्य परिवर्तन नहीं है)। – BHendricks

+0

मैंने कोड संपादित किया है। क्या आप इसे देख सकते हैं? –