来电后恢复录音?

时间:2013-10-24 07:09:18

标签: ios iphone objective-c avaudiorecorder audioqueueservices

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

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

3 个答案:

答案 0 :(得分:1)

在iOS中可以在来电后恢复录音。这背后的基本概念是使用 AVAudioSession AudioQueue ,当您收到来电时在你的设备上,它会提供一个 kAudioSessionBeginInterruption ,并且在断开呼叫时你收到一个 kAudioSessionEndInterruption ......接收来电时,只需暂停音频队列然后 [[AVAudioSession sharedInstance] setActive:NO er​​ror: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];
}