AudioUnitInitialize导致iOS模拟器上允许麦克风访问的提示

时间:2019-03-16 15:21:34

标签: ios avfoundation ios-simulator

我正在使用AudioUnit从TeamSpeak服务器播放音频,但是当我在iOS Simulator上调用AudioUnitInitialize时,我不断收到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 个答案:

答案 0 :(得分:1)

这是macOS Mojave中Xcode(10.2之前的版本)的一个已知错误(我说是众所周知的,因为在播放视频时它发生在我身上的时间很多,而且还因为我在寻找它时,我发现了很多人有相同的问题);尽管我找不到苹果的任何报道。 根据环境,启动应用程序的方式,Xcode版本和macOS Mojave版本,可能存在一些解决方法。

这只会在模拟器中发生,并且您也说过,在大多数设备上都不需要麦克风访问才能使用音频/视频功能,因此不会在真实设备上发生。

在此错误得到解决的同时,您可以尝试:

  1. 在macOS上进行"Security & Privacy"设置

  2. 左侧面板上的
  3. "Microphone"

  4. 然后在右侧面板disable中选择Xcode的选项

disable microphone

您可以尝试摆脱的另一件事是将硬件音频输入更改为内置麦克风

Hardware Audio Input

在Xcode 10.2中更新:

  

现在仅提示您一次授权麦克风访问所有模拟器设备。 (45715977)