处理音频中断

原创 2015年11月19日 15:39:30


//接受来电和来电结束调用的方法

//当播放器遇到中断的时候(如来电),调用该方法

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player

{

    //中断播放

}

 //中断事件结束后调用下面的方法

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)options

{

   //恢复播放

}

 //添加系统通知 当按下锁屏键时将发送通知 接受通知

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleInterruption:) name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]];

        

- (void)handleInterruption:(NSNotification *)not

{

    NSDictionary *info = not.userInfo;

    

    //拿到系统的通知的key

    AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];

    

    //AVAudioSessionInterruptionTypeEnd //系统中断停止音频

    if (type == AVAudioSessionInterruptionTypeBegan) {//系统中断音频

        

       //中断播放

        

    }else{

        

        

        AVAudioSessionInterruptionOptions options= [info[AVAudioSessionInterruptionOptionKey] unsignedIntegerValue];

       //中断被另一个音频会话已经结束,这个应用程序可以恢复音频会议。

        if (options == AVAudioSessionInterruptionOptionShouldResume) {//可以恢复播放

            

           //恢复播放

        }

    }

}


        //更换线路播放响应

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:[AVAudioSession sharedInstance]];


- (void)handleRouteChange:(NSNotification *)not

{

    NSDictionary *info = not.userInfo;

    

    AVAudioSessionRouteChangeReason key = [info[AVAudioSessionRouteChangeReasonKey] unsignedIntegerValue];

    

    if (key == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) { //前一个的音频输出路径不再可用

       //判断是否是耳机 如果是拔出断开时停止播放

        

        /* 

         系统知道设备断开连接后,需要向userInfo字典提出要求,以获取其中用于描述前一个线路的AVAudioSessionRouteDescription.线路描述整合在一个输入数组和输出数组里面

         数组中保存的都是AVAudioSessionPortDescription实例用于描述不同的I/O接口属性 ,

            */

        

        AVAudioSessionRouteDescription *desc = info[AVAudioSessionRouteChangePreviousRouteKey];

        

        AVAudioSessionPortDescription *prodesc = [desc.outputs firstObject];

        

        //prodesc是拿出的I/O接口属性描述

        

        NSString *porType = prodesc.portType;

       

        //判断是否为耳机接口

        if ([porType isEqualToString:AVAudioSessionPortHeadphones]) {

            

           //停止播放

        }

    }

    

}



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

音视频:AVAudioPlayer:中断处理

1.配置音频会话 1.1处理”铃声/静音”开关切换 测试上一节  使用AVAudioPlayer播放音频 的程序,当开始播放音频时切换设备侧面的”铃声/静音”开关,会发现音频输出也会在这两...

iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断

学习总是在进行。 一、AVAudioPlayer如何处理中断AVAudioPlayer类提供了代理方法,用来处理当播放音频文件时,发生来电、闹钟等事件。二、AVAudioPlayer代理方法实现设置代...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

中断处理的问题

中断服务函数可能会导致一些非常有趣的bugs: 1.变量没有被声明为volatile 如果一个中断服务函数改变变量,而其他函数也需要访问该变量,那么这些变量必须被声明为volatile. 2.原...

interruptionListener iOS 音频打断处理

最近做项目,要求程序切后台后可以继续播放声音,这没什么,但有一些问题,就是你的程序在后台播放声音的时候,如果再运行一些可以播放声音的程序或者来电话了,你的程序播放的声音就会被系统打断,而你却收不到任何...
  • MSSS00
  • MSSS00
  • 2013-08-27 16:16
  • 1427

中断和中断处理(一)

(一):中断中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器在接收到中断后,会马上向操作系统反映此信号的到来,然后就u由操作系统来处理这些新到来的数据。不同的设备对应的中断不同,而每个中断都...

中断与中断处理(二)

**书接上回**(六):中断上下文当执行一个中断处理程序的时候,内核处于中断上下文中.中断上下文由于没有后备进程,所以不可以睡眠,同时中断上下文具有严格的时间限制,因为他打断了其他代码.中断处理程序栈...

音频处理(录音一)

简单录音更能实 AVFoundation.framework与CoreAudio.framework

【iOS录音与播放】实现利用音频队列,通过缓存进行对声音的采集与播放

作者:Ray Wenderlich在面向iPhone开发游戏之前我对音频格式真的非常陌生。我只知道.WAVs和.MP3之间的区别,但是我却怎么都说不出.AAC或.CAF到底是什么,或者在Mac上转换音...

音频信号处理——基音周期

音频信号处理——基音周期

windows音频处理

WINDOWS下对音频的处理,大致可分为两部分,即音频的输入、输出,和ACM压缩处理。  一般情况下在WINDOWS下可以调用诸如sndPlaySound等API(MCI)来播放一个WAV文件,但那显...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)