1

我们正在使用 AVAudioRecorder 录制音频,但是当我们收到任何来电时,录音就会停止。如果我们再次尝试恢复录制,那么它将从头开始。我检查了语音备忘录(iOS Apple 应用程序)并发现了同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但同样的问题也存在。那么请帮助如何在来电后恢复录音?

注意:- 我知道有很多与录音有关的问题,但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前致谢。

4

3 回答 3

1

在 iOS 中可以在来电后恢复录音。这背后的基本概念是使用AVAudioSessionAudioQueue,当您在设备上收到来电时,它会给出一个kAudioSessionBeginInterruption 并且在断开呼叫时您会得到一个kAudioSessionEndInterruption ......收到来电时,只需暂停音频队列,然后 [[AVAudioSession sharedInstance]setActive:NO er​​ror:nil]; ......然后在kAudioSessionEndInterruption上,当通话结束时,只需恢复暂停的队列和[[AVAudioSession sharedInstance]setActive:YES error:nil];

这样就可以了……我已经成功运行程序,接到来电后可以继续录音……

希望对你有帮助.......

于 2013-10-29T13:18:37.413 回答
1

苹果AVAudioSessionInterruption将​​观察者解释为一种处理中断的新方法。Apple 在此页面上用 Swift 解释了它,但对于搜索 Objective-c 代码的人来说,这个github 问题一定很有用。

您需要处理音频中断,例如

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
    }
}
}

您需要编写处理代码,然后中断开始和结束。

于 2018-05-23T20:20:58.863 回答
0

使用 AVFoundation 委托方法,

-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
    [audiorecorder pause];
}
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder
{
    [audiorecorder record];
} 
于 2013-12-19T10:06:11.713 回答