2016-12-21 8 views
9

私は、コアオーディオの新しいiOS 7 アプリケーション間オーディオ技術を使用するHOSTアプリケーションを作成しています。私は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初期化がエラー

で失敗しまし

エラーで失敗しました

-10860e 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ノードを削除しようと少し削除したようですが、それは単純だとは思いません。この例のドキュメントは、2つのノードがに従属していることを明確に示しています。です。 ホストは、表示されているエラーのように、両方を作成しようとしているため、リモートメソッドの追加だけでは十分ではありません。

サンプルプロジェクトでは、このfileから、あなただけがaddRemoteAUに加えられた変更を示しているが、hostGraphは、そのノードで初期化された場所なので、あなたは、同様createGraphに変更を加えることが必要です。 1ノードのみでグラフを初期化する場合、addRemoteAUでは、ノードが見つからないためにエラーが表示されなくなります。その時点のグラフには、2つのノード(現在は作成から得られる)が必要でないためです。

+0

リプレイに感謝します。もっと詳しく説明できますか? like、グラフを作成する際に必要な変更は何ですか?正確に何を削除すべきかをコードで助けてくれますか? –

+0

その方法で試したことを投稿していないので、私は本当にできません。あなたが提供した情報に基づいて、私はできるだけ詳細を提供しましたが、サンプルアプリケーションからいくつかの行を削除しようとしたことを考えると、あなたはあなたの試行を理解することができずに問題を解決する必要があります(今まで私が見てきたのはコピーされたサンプルアプリセクションです。 – BHendricks

+0

私はコードを編集しました。あなたはそれを参照していただけますか? –

関連する問題