use*_*643 5 audiounit ios avaudiosession avaudiosessiondelegate
我试图在应用程序处于后台时获取麦克风。我正在使用音频单元技术,并且能够在后台录制音频。但是一旦我的 AudioSession 被中断,我就无法在后台使用应用程序重新启动 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,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Output,
                              outputBus,
                              &enableOutput,
                              sizeof (enableOutput)
                              );
checkStatus(oserr);
oserr = AudioUnitInitialize(m_audioUnit);
oserr = AudioOutputUnitStart(m_audioUnit);
大多数流行的录音应用程序似乎都不支持它,甚至 iOS 原生的“语音备忘录”在启动 Siri 时也会被暂停。
这些是我在 EndInterruption 中遇到的错误: AUIOClient_StartIO failed (-12985) AURemoteIO::ChangeHardwareFormats: error -10875
当应用程序处于后台时,是否有人成功重新获取麦克风?
添加后我得到了这个工作
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
在viewDidAppear。感谢帖子MPMoviePlayerController / AVAudioSession 在后台不会在来电后重新启动播放
我不清楚 beginReceivingRemoteControlEvents 如何影响此处的 AudioSession。
我观察到的另一件重要的事情是,与接听/拒绝电话无关,您确实会收到 endInterruption 事件。Apple 文档让您认为在接听电话的情况下您可能不会收到 endInterruption
| 归档时间: | 
 | 
| 查看次数: | 4598 次 | 
| 最近记录: |