我们正在使用AVAudioRecorder录制音频,但是当我们收到任何来电时,录音会停止。如果我们尝试再次恢复录制,那么它将从头开始。我查看了语音备忘录(iOS Apple Application)&找到同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但是存在同样的问题。 那么请帮忙打电话后如何恢复录音?
注意: - 我知道有很多与录音相关的问题但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前谢谢。
答案 0 :(得分:1)
在iOS中可以在来电后恢复录音。这背后的基本概念是使用 AVAudioSession 和 AudioQueue ,当您收到来电时在你的设备上,它会提供一个 kAudioSessionBeginInterruption ,并且在断开呼叫时你收到一个 kAudioSessionEndInterruption ......接收来电时,只需暂停音频队列然后 [[AVAudioSession sharedInstance] setActive:NO error:nil]; ......然后在 kAudioSessionEndInterruption 上,当呼叫结束时,只需恢复暂停的队列并 [[AVAudioSession sharedInstance] setActive:YES error:nil]; < / p>
这样可行......我已成功运行该程序,并在接到来电后继续录音......
希望这会对你有帮助.......
答案 1 :(得分:1)
Apple解释AVAudioSessionInterruption
观察者作为处理中断的新方法。 Apple在this页面的Swift中对此进行了解释,但对于某些搜索objective-c代码的人来说,github issue必须有用。
你需要处理像
这样的音频中断AVAudioSession *session = [AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(audioSessionInterruptionNotification:)
name:AVAudioSessionInterruptionNotification
object:session];
您的音频会话中断通知AVAudioSessionInterruptionNotification类似于
-(void)audioSessionInterruptionNotification:(NSNotification*)notification {
NSString* seccReason = @"";
//Check the type of notification, especially if you are sending multiple AVAudioSession events here
NSLog(@"Interruption notification name %@", notification.name);
if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {
seccReason = @"Interruption notification received";
//Check to see if it was a Begin interruption
if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) {
seccReason = @"Interruption began";
} else if([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeEnded]]){
seccReason = @"Interruption ended!";
//Resume your audio
}
}
}
您需要编写处理代码,然后开始和结束中断。
答案 2 :(得分:0)
使用AVFoundation代表方法
-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
[audiorecorder pause];
}
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder
{
[audiorecorder record];
}