HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在iOS中重新获取背景中的麦克风大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在应用程序处于后台获取麦克风.我正在使用音频单元技术,能够在后台录制音频.但是一旦我的AudioSession被中断,我就无法在后台使用app重启AudioSession.
注意:如果应用程序位于前台,我可以重新启动AudioSession.
这是与中断相对应的代码

- (void) beginInterruption {
    [[AVAudioSession sharedInstance] setActive:NO error:&error];
    AudioOutputUnitStop(m_audioUnit);
}
- (void) endInterruptionWithFlags:(NSUInteger) flags{
    [[AVAudioSession sharedInstance] setActive:YES error:&error];
    AudioOutputUnitStart(m_audioUnit);
}

与AudioSession设置对应的代码

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];

与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 units
oserr = AudioComponenTinstanceNew(inputComponent,&m_audioUnit);
checkStatus(oserr);

// Enable IO for recording
UInt32 flag = 1;
oserr = AudioUnitSetProperty(m_audioUnit,kAudioOutputUnitProperty_EnableIO,kAudioUnitScope_Input,1,&flag,sizeof(flag));
checkStatus(oserr);

UInt32 enabLeoutput        = 0;    // to disable output
AudioUnitElement outputBus = 0;

// Disable output
oserr = AudioUnitSetProperty (
                              m_audioUnit,kAudioUnitScope_Output,outputBus,&enabLeoutput,sizeof (enabLeoutput)
                              );
checkStatus(oserr);

oserr = AudioUniTinitialize(m_audioUnit);

oserr = AudioOutputUnitStart(m_audioUnit);

大多数流行的录制应用程序似乎都不支持它,甚至iOS本地“语音备忘录”在启动Siri时被暂停.

这些是我在EndInterruption中遇到的错误
 AUIOClient_StartIO失败(-12985)
 AURemoteIO :: ChangeHardwareFormats:错误-10875

当应用程序处于后台时,有没有人成功重新获取麦克风?

解决方法

添加后我就开始工作了

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

在viewDidAppear中.感谢MPMoviePlayerController / AVAudioSession in background doesn’t restart play after incoming call的帖子

我不清楚beginReceivingRemoteControlEvents如何影响AudioSession.

我观察到的另一个重要事项是独立于接听/拒绝电话,你会收到endInterruption事件. Apple文档会让您认为在接听电话时可能无法获得endInterruption

大佬总结

以上是大佬教程为你收集整理的在iOS中重新获取背景中的麦克风全部内容,希望文章能够帮你解决在iOS中重新获取背景中的麦克风所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。