2014-01-16 3 views
6

gut, ich versuche, IAA in meine iOS-App zu implementieren und habe sorgfältig die Apple "InterAppAudioSuite" sowie das WWDCXIII 602 Video für diese Angelegenheit studiert. Meine App verhält sich wie der Apple InterAppAudioSampler und ich habe so viel Code wie möglich aus diesem Beispiel verwendet.Inter-App Audio: kann nicht einmal meinen Knoten verbinden

Meine App startet und ich bekomme eine Meldung "AudioOutputUnitPublish Stub genannt" im Protokollfenster, die besagt - ich denke - dass die Dinge in Ordnung sind. Ich starte dann die "InterAppAudioHost" -App von Apple und versuche, meine App (die als Audio-Remote-Instrument fungiert) zu verbinden. Meine App ist in der App-Liste verfügbar. Doch dann scheitert es zu verbinden, und ich erhalte das folgende Protokoll:

2014-01-16 11:10:27.556 DM1[141:60b] Could not search: { 
    NSNetServicesErrorCode = "-72000"; 
    NSNetServicesErrorDomain = 10; 
} 
2014-01-16 11:10:27.558 DM1[141:60b] Could not publish service: { 
    NSNetServicesErrorCode = "-72000"; 
    NSNetServicesErrorDomain = 10; 
} 

(. Keiner meiner IAA bezogenen Methoden wird in meiner app genannt)

Dann wird das „InterAppAudioHost“ beendet und ihr Protokoll sagt:

2014-01-16 11:10:47.555 IAA Host[150:60b] 11:10:47.554 ERROR:  [0x3b2e718c] 168: Timed out waiting for app to launch 
2014-01-16 11:10:47.557 IAA Host[150:60b] 11:10:47.557 ERROR:  [0x3b2e718c] >audiocomp> 59: null from factory proc 
2014-01-16 11:10:47.559 IAA Host[150:60b] error -1 from AUGraphAddNode (hostGraph, &desc, &instrumentNode) 

ich habe sorgfältig geprüft meinen plist und es geht so:

<plist version="1.0"> 
<dict> 
    <key>AudioComponents</key> 
    <array> 
     <dict> 
      <key>type</key> 
      <string>aurg</string> 
      <key>subtype</key> 
      <string>fld1</string> 
      <key>manufacturer</key> 
      <string>fglb</string> 
      <key>name</key> 
      <string>appName<string> 
      <key>version</key> 
      <integer>1</integer> 
     </dict> 
     <dict> 
      <key>type</key> 
      <string>auri</string> 
      <key>subtype</key> 
      <string>fld1</string> 
      <key>manufacturer</key> 
      <string>fglb</string> 
      <key>name</key> 
      <string>appName</string> 
      <key>version</key> 
      <integer>1</integer> 
     </dict> 
    </array> 

...

Meine Veröffentlichungsmethode:

- (void) publishOutputAudioUnit { 
    OSStatus result; 
    const UInt32 version = 1; 
    //----------------------- 
    // Publish as Remote Generator 
    //----------------------- 
    AudioComponentDescription IAAGeneratorDesc = { kAudioUnitType_RemoteGenerator,'fld1','fglb',0,0 }; 
    result = AudioOutputUnitPublish(&IAAGeneratorDesc, CFSTR("CompanyName : AppName"),version, auRemoteIO); 
    if (result != noErr) 
     NSLog(@"AudioOutputUnitPublish generator result: %d", (int)result); 
    //----------------------- 
    // Publish as Remote Instrument 
    //----------------------- 
    AudioComponentDescription IAARemoteDesc = { kAudioUnitType_RemoteInstrument,'fld1','fglb',0,0 }; 
    result = AudioOutputUnitPublish(&IAARemoteDesc, CFSTR("CompanyName : AppName"),version,auRemoteIO); 
    if (result != noErr) 
     NSLog(@"AudioOutputUnitPublish instrument result: %d", (int)result); 
} 

Es sieht aus wie es einige URL Probleme zwischen dem Host und dem Knoten sind, aber ich kann es einfach nicht herausfinden.

Jede Hilfe wird sehr, sehr, sehr willkommen, da ich wirklich feststecke. Danke vielmals.

André

Antwort

2

Schließlich funktionierte es. Ich bin mir nicht sicher, wie ich dort hingekommen bin. Hier ist mein aktueller Code:

- (void) publishOutputAudioUnit { 
    OSStatus result; 
    const UInt32 version = 1; 
    SoundEngine *se = [SoundEngine instance]; 
    //----------------------- 
    // Publish as Remote Instrument 
    //----------------------- 
    AudioComponentDescription remoteDesc = { kAudioUnitType_RemoteInstrument,IAA_SUB_TYPE,IAA_MANUFACTURER,0,0 }; 
    result = AudioOutputUnitPublish(&remoteDesc, CFSTR(IAA_NAME),version,se->auRemoteIO); 
    if (result != noErr) NSLog(@"AudioOutputUnitPublish instrument result: %d", (int)result); 
} 

Sie verwenden jetzt auch das Audiobus SDK, das IAA-Verbindungen enthält. Es ist viel einfacher als sich selbst zu tun.

1

Und mein aktueller plist:

<plist version="1.0"> 
<dict> 
    <key>AudioComponents</key> 
    <array> 
     <dict> 
      <key>manufacturer</key> 
      <string>fglb</string> 
      <key>name</key> 
      <string>DM1 - The Drum Machine</string> 
      <key>subtype</key> 
      <string>dm1a</string> 
      <key>type</key> 
      <string>auri</string> 
      <key>version</key> 
      <integer>1</integer> 
     </dict> 
    </array> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>English</string> 
    <key>CFBundleDisplayName</key> 
    <string>DM1</string> 
    <key>CFBundleDocumentTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeName</key> 
      <string>DM1 File</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>net.fingerlab.beat.file</string> 
      </array> 
      <key>LSTypeIsPackage</key> 
      <false/> 
     </dict> 
    </array> 
Verwandte Themen