Причины AudioUnitInitialize, позволяющие запрашивать доступ к микрофону в симуляторе iOS

#ios #avfoundation #ios-simulator

#iOS #avfoundation #ios-simulator

Вопрос:

Я использую его AudioUnit для воспроизведения звука с сервера TeamSpeak, но когда я звоню AudioUnitInitialize в симуляторе iOS, я постоянно получаю запрос macOS разрешить доступ к микрофону, даже если я хочу только воспроизведение.

введите описание изображения здесь

На реальном устройстве все работает нормально без каких-либо встроенных подсказок, но это действительно раздражает при запуске приложения в симуляторе, потому что эти подсказки появляются каждый раз, когда я запускаю приложение.

 - (void)setupRemoteIO
{
    AudioUnit audioUnit;
    // Describe audio component
    AudioComponentDescription desc;
    desc.componentType = kAudioUnitType_Output;
    desc.componentSubType = kAudioUnitSubType_RemoteIO;
    desc.componentFlags = 0;
    desc.componentFlagsMask = 0;
    desc.componentManufacturer = kAudioUnitManufacturer_Apple;

    // Get component
    AudioComponent inputComponent = AudioComponentFindNext(NULL, amp;desc);

    // Get audio unit
    OSStatus status = AudioComponentInstanceNew(inputComponent, amp;audioUnit);
    if (status != noErr)
    {
        printf("AudioIO could not create new audio component: status = %in", status);
    }

    UInt32 enableIO;
    AudioUnitElement inputBus = 1;
    AudioUnitElement outputBus = 0;
    //Disabling IO for recording
    enableIO = 0;

    AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, inputBus, amp;enableIO, sizeof(enableIO));

    //Enabling IO for playback
    enableIO = 1;
    AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, outputBus, amp;enableIO, sizeof(enableIO));

    // initialize
    status = AudioUnitInitialize(audioUnit);
    if (status != noErr)
    {
        printf("AudioIO could not initialize audio unit: status = %in", status);
    }
}
  

Ответ №1:

Это известная ошибка с Xcode (предыдущая версия 10.2) от macOS Mojave (я говорю известная, потому что это случалось со мной много раз при воспроизведении видео, а также потому, что, когда я искал ее, я обнаружил, что у многих людей была такая же проблема); хотя я не смог найти никакого отчета от Apple. Возможно, может быть какой-то обходной путь в зависимости от среды, способа запуска приложения, версии Xcode и версии macOS Mojave, которые у вас есть.

Это произойдет только в симуляторе, и, как вы также сказали, этого не произойдет на реальном устройстве, поскольку большинству приложений не требуется доступ к микрофону для воспроизведения аудио / видео функций.

Тем временем эта ошибка будет устранена, вы можете попробовать:

  1. Переход к "Security amp; Privacy" настройкам на вашем macOS

  2. "Microphone" на левой панели

  3. Затем на правой панели disable опция для Xcode

отключить микрофон

Еще одна вещь, от которой вы можете попытаться избавиться, — это изменить аппаратный аудиовход на внутренний микрофон:

Аппаратный аудиовход

Обновление в Xcode 10.2:

Теперь вам предлагается разрешить доступ к микрофону только один раз на всех устройствах симулятора. (45715977)

Комментарии:

1. К сожалению, диалоговое окно все еще отображается, даже если я отключу это

2. @Jan Я обновил свой ответ, включив в него больше способов фактически попытаться устранить обходной путь для этой ошибки

3. @Jan в последней версии Xcode Beta 10.2 эта проблема должна была быть решена. В случае, если вы не хотите переходить на бета-версию до выхода стабильной версии, вам придется прибегнуть к обходным путям.

4. спасибо за обновление вашего ответа. Кажется, это работает. Я также попробую с бета-версией

5. @Jan Теперь с Xcode 10.2 «Теперь вам предлагается разрешить доступ к микрофону только один раз на всех устройствах симулятора. (45715977)».