2014-01-16 2 views
6

Ну, я пытаюсь реализовать IAA в своем приложении iOS и тщательно изучил Apple «InterAppAudioSuite», а также видео WWDCXIII 602. Мое приложение ведет себя как Apple InterAppAudioSampler, и я использовал как можно больше кода из этого примера.Inter-App Audio: я даже не могу подключить свой узел

Запустится мое приложение, и я получаю сообщение «AudioOutputUnitPublish stub called» в окне журнала, которое говорит - я думаю, что все в порядке. Затем я запускаю приложение «InterAppAudioHost» от Apple и пытаюсь подключить мое приложение (которое действует как аудиоустройство удаленного инструмента). Мое приложение доступно в списке приложений. Но тогда он не сможет подключиться и я получаю следующий журнал:

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; 
} 

(. Ни один из моих связанных IAA методов не называется в моем приложении)

Тогда «InterAppAudioHost» завершает работу и его журнал говорит:

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) 

Я тщательно проверил мой PLIST, и он идет, как:

<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> 

...

Мой метод публикации:

- (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); 
} 

Похоже, есть некоторые вопросы, URL между хостом и узлом, но я просто не могу понять это.

Любая помощь будет очень, очень, очень приветствуется, поскольку я действительно застрял. Большое спасибо.

André

ответ

2

В конечном счете это сработало. Не знаю, как я туда попал. Вот мой текущий код:

- (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); 
} 

Теперь вы также используете SDK Audiobus, который включает в себя соединения IAA. Это проще, чем делать сами.

1

И мой текущий 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> 
Смежные вопросы