• AVAudioSession应用指南


    转coco-LG

    audiosession负责调节你的app和ios系统里的音频行为.一旦加载了audiosession你可以获得一个audiosession的单例.你可以配置这个audiosession来控制你的app的音频行为.例如:

    • 当你的app播放声音的时候,你是希望其他正在播放声音的app静音还是混合两个app的声音?
    • 你的app如何回应突发的打断,例如这时候闹铃突然响了?
    • 你的app又该如何回应耳机口的拔插呢?

    AuioSession的配置会影响你的app在运行中所有的音频活动,除了利用System Sounds Services API控制的音频.

    你还可以利用AudioSession来检测你所用硬件的参数,例如声道和采样率.

    你还可以随时激活或者停止你的audioSession,当你的app播放声音或者正在录音的时候,你必须确保AudioSession处于激活状态.

    系统也有权利随时中断你的audioSession,例如,当你来电话的时候.当然,AudioSession提供了api来让你的app从这种中断中恢复.

    一、实例化

    [objc] view plain copy
     
    1. AVAudioSession *audioSession = [AVAudioSession sharedInstance];  

    可以看出AVAudioSession是个单例对象。

    二、类别设置

    在获得一个AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:实例方法,来从IOS应用可用的不同类别中作出选择。类别分为一下几种:

    [objc] view plain copy
     
    1. #pragma mark -- Values for the category property --  
    2.   
    3. /*  Use this category for background sounds such as rain, car engine noise, etc.   
    4.  Mixes with other music. */  
    5. AVF_EXPORT NSString *const AVAudioSessionCategoryAmbient;  
    6.       
    7. /*  Use this category for background sounds.  Other music will stop playing. */  
    8. AVF_EXPORT NSString *const AVAudioSessionCategorySoloAmbient;  
    9.   
    10. /* Use this category for music tracks.*/  
    11. AVF_EXPORT NSString *const AVAudioSessionCategoryPlayback;  
    12.   
    13. /*  Use this category when recording audio. */  
    14. AVF_EXPORT NSString *const AVAudioSessionCategoryRecord;  
    15.   
    16. /*  Use this category when recording and playing back audio. */  
    17. AVF_EXPORT NSString *const AVAudioSessionCategoryPlayAndRecord;  
    18.   
    19. /*  Use this category when using a hardware codec or signal processor while 
    20.  not playing or recording audio. */  
    21. AVF_EXPORT NSString *const AVAudioSessionCategoryAudioProcessing NS_DEPRECATED_IOS(3_0, 10_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED;  

    1.AVAudioSessionCategoryAmbient

    用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音
     
     2.AVAudioSessionCategorySoloAmbient
     类似于AVAudioSessionCategoryAmbient不同之处在于它会中止其它应用播放声音。 这个category为默认category。该Category无法在后台播放声音
     
     3.AVAudioSessionCategoryPlayback
     用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音
     
     4.AVAudioSessionCategoryRecord
     用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。
     
    5. AVAudioSessionCategoryPlayAndRecord
     用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。
     
     注意:并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。

    三、恢复外部音乐

    从上面的类别可以看出,在录音或播音的的时候是会关闭外部正在播放的音频。比如微信发语音的时候,正在播放的音乐会停止。但是录完之后需要让外部音效继续播放。这个需要手动设置

    [objc] view plain copy
     
    1. [[AVAudioSession sharedInstance] setActive:NO  
    2.                  withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation  
    3.                      error:nil];  

    这里需要注意一个问题,如果在录音或播音前本来就没有外部音效播放,直接执行这一句会使cocos2d里面的部分音效异常。所以,在开始录音或播音之前先判断一下是否有外部音效播放,然后用一个标志位记录,在录音或播音完成之后对这个标志位做判断,如果有外部音效,则执行上边的代码去恢复外部音效。下面是判断外部音效的代码:

    [objc] view plain copy
     
    1. -(BOOL) isOtherAudioPlaying {  
    2.     UInt32 isPlaying = 0;  
    3.     UInt32 varSize = sizeof(isPlaying);  
    4.     AudioSessionGetProperty (kAudioSessionProperty_OtherAudioIsPlaying, &varSize, &isPlaying);  
    5.     return (isPlaying != 0);  
    6. }  

    四、协调当前应用的背景音效

    如果当我们遇到这样一种情况:自己的应用有背景音乐,这时候需要录音,录完音还要恢复播放背景音乐。这个只需要再设置一次背景音乐的类别,一般背景音乐都是系统默认类别:

    [objc] view plain copy
     
    1. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];  

    五、注意点

    1.如果在录音或播音前本来就没有外部音效播放,直接执行这一句会使cocos2d里面的部分音效异常。所以,在开始录音或播音之前先判断一下是否有外部音效播放,然后用一个标志位记录,在录音或播音完成之后对这个标志位做判断,如果有外部音效,则执行上边的代码去恢复外部音效;

    2.有背景音乐的时候执行“恢复外部音乐”出现警告Deactivating an audio session that has running I/O

            具体讲解请参考:http://blog.csdn.net/gang544043963/article/details/53323270

  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/8335IT/p/8406864.html
Copyright © 2020-2023  润新知