美文网首页
AVAudioSession 学习

AVAudioSession 学习

作者: 小猪圣骑士 | 来源:发表于2020-12-26 10:30 被阅读0次

    AVAudioSession

    image.png

    作用

    • 配置音频会话类别和模式,以与系统交流您打算如何在应用中使用音频的方式
    • 激活应用程序的音频会话以使类别和模式配置生效
    • 订阅并响应重要的音频会话通知,例如音频中断和路由更改
    • 执行高级音频设备配置,例如设置采样率,I / O缓冲区持续时间和通道数

    通知

    音频中断
    AVAudioSessionInterruptionNotification

    AVAudioSessionInterruptionTypeKey
    
    // 系统中断了您的音频会话
    AVAudioSessionInterruptionTypeBegan = 1, 
    // 中断已经结束
    AVAudioSessionInterruptionTypeEnded = 0,
    

    音频通道改变
    AVAudioSessionRouteChangeNotification

    AVAudioSessionRouteChangeReasonKey
    
    // 原因不明。
    AVAudioSessionRouteChangeReasonUnknown = 0,
    // 有新设备可用(例如已插入耳机)
    AVAudioSessionRouteChangeReasonNewDeviceAvailable = 1,
    // 旧设备不可用(例如拔下了耳机)。
    AVAudioSessionRouteChangeReasonOldDeviceUnavailable = 2,    
    // 音频类别已更改(例如,AVAudioSessionCategoryPlayback已更改为AVAudioSessionCategoryPlayAndRecord)。
    AVAudioSessionRouteChangeReasonCategoryChange = 3,
    // 路由已被覆盖(例如,类别为AVAudioSessionCategoryPlayAndRecord,输出为已从默认的接收器更改为扬声器)。
    AVAudioSessionRouteChangeReasonOverride = 4,
    // 设备从睡眠中醒来。
    AVAudioSessionRouteChangeReasonWakeFromSleep = 6,
    // 当前类别没有路由时返回(例如,类别AVAudioSessionCategoryRecord但没有可用的输入设备)。
    AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory = 7,
    // 表示输入和/或输出端口的集合没有更改,但是它们的某些方面配置已更改。 例如,端口的选定数据源已更改。
    AVAudioSessionRouteChangeReasonRouteConfigurationChange = 8
    

    AVAudioSession

    注意事项

    当想重新设置AudioSession的CategoryOptions的时候,需要把categoryoptions恢复到默认值0,在设置新的Categoryoptions 例如:
    从mixable模式切换到non-mixable模式:

    // 1. mixable
    [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionMixWithOthers error:nil];
    // 2. options
    [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions:0 error:nil];
     // 3. non-mixable
    [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionAllowBluetooth error:nil];
    [[AVAudioSession sharedInstance]setActive:YES error:nil];
    

    当APP正在播放内容,设置 active 为NO([AVAudioSession sharedInstancesetActive:NO error:nil];),会立即停止当前的音乐播放。

    锁屏界面上的播放按钮状态,是根据整个APP的播放情况来显示的,如果APP一直在播放音频,即使你设置
    MPNowPlayingInfoPropertyPlaybackRate为0,播放按钮依然显示为播放状态。

    相关文章

      网友评论

          本文标题:AVAudioSession 学习

          本文链接:https://www.haomeiwen.com/subject/xuygdktx.html