AudioUnitInitialize вызывает разрешение Разрешить доступ к микрофону на симуляторе iOS - PullRequest
2 голосов
/ 16 марта 2019

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

enter image description here

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

- (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, &desc);

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

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

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

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

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

1 Ответ

1 голос
/ 16 марта 2019

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

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

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

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

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

  3. Тогда на правой панели disable опция для Xcode

disable microphone

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

Hardware Audio Input

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

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

...