一、Values for the category property
AVAudioSessionCategoryAmbient:后台播放(可与其他音乐混合):下雨声、骑车发动机噪音等。静音停止!
AVAudioSessionCategorySoloAmbient:后台播放,其他音乐都会停止。静音停止!
AVAudioSessionCategoryPlayback:音乐轨道,独占。静音不停止!
AVAudioSessionCategoryRecord:录制音频。静音不停止!
AVAudioSessionCategoryPlayAndRecord:播放音频并且录制。静音不停止!
AVAudioSessionCategoryAudioProcessing:在硬件解码信号过程中不能播放和录制音频,静音不停止!
AVAudioSessionCategoryMultiRoute (6.0以上):通过可以用的音频辅助设备和内置音频硬件设备,我们可以自定义使用类型;
前提input/output限制为下面几种:
Eligible Input
AVAudioSessionPortUSBAudio
AVAudioSessionPortHeadsetMic
AVAudioSessionPortBuiltInMic
Eligible Output
AVAudioSessionPortUSBAudio
AVAudioSessionPortLineOut
AVAudioSessionPortHeadphones
AVAudioSessionPortHDMI
AVAudioSessionPortBuiltInSpeaker
二、Values for the mode property
类别的选择是基于App的基本行为;
而模式的选择多用于专业音频的范畴,选择一个模式将进一步确认App的音频行为。一共7种模式。
AVAudioSessionModeDefault:默认模式
AVAudioSessionModeVideoRecording:使用摄像头捕捉视频。Record类别搭配
AVAudioSessionModeMeasurement:减少设备在处理音频I/O 的信号量时的影响
AVAudioSessionModeMoviePlayback:只能用于内置扬声器,电影播放场景中适当的信号处理
AVAudioSessionModeVideoChat:
AVAudioSessionModeSpokenAudio:
AVAudioSessionModeVoiceChat:Voip,这样模式只能跟PlayAndRecord模式搭配。信号通过系统优化语音,(再理解)
AVAudioSessionModeGameChat:游戏程序(不介绍)
三、ENUM
1.AVAudioSessionInterruptionOptions
AVAudioSessionInterruptionOptionShouldResume:重启
2.AVAudioSessionSetActiveOptions
AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation:通知中断的应用程序被中断已结束,可以申请恢复播放。只有有效的Session才会失活。
3.AVAudioSessionPortOverride
AVAudioSessionPortOverrideNone:返回当前音频默认状态
AVAudioSessionPortOverrideSpeaker:音频输出到扬声器,重写‘播放和录音’属性,通过默认输出路径到接受者。(重新理解)
4.AVAudioSessionRouteChangeReason
这个枚举值是AVAudioSessionRouteChangeNotification字典中的value值。
AVAudioSessionRouteChangeReasonUnknown:原因不明
AVAudioSessionRouteChangeReasonNewDeviceAvailable:一个新设备可用(例如:耳机已经插入)
AVAudioSessionRouteChangeReasonOldDeviceUnavailable:一个旧设备不可用(例如:耳机已经拔出)
AVAudioSessionRouteChangeReasonCategoryChange:音频类别已经改变(例如:Audio从Play back 已给变为Play And Record)
AVAudioSessionRouteChangeReasonOverride:音频route 已经被重写(例如:类别是Play And Record,输出设备已经从默认的接收器改变成为扬声器)
AVAudioSessionRouteChangeReasonWakeFromSleep:设备从休眠中醒来
AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory:没有路径能返回当前的类别(例如:Record类别当前没有输入设备)
AVAudioSessionRouteChangeReasonRouteConfigurationChange:当前输入/输出端口没变,但设置已经修改(例如:一个端口的数据选择已经改变)
5.AVAudioSessionCategoryOptions
使用方法:setCategory:withOptions:error:
AVAudioSessionCategoryOptionMixWithOthers
AVAudioSessionCategoryOptionDuckOthers
AVAudioSessionCategoryOptionAllowBluetooth
AVAudioSessionCategoryOptionDefaultToSpeaker
AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers
6.AVAudioSessionInterruptionType
AVAudioSessionInterruptionTypeBegan
AVAudioSessionInterruptionTypeEnded
7.AVAudioSessionSilenceSecondaryAudioHintType
AVAudioSessionSilenceSecondaryAudioHintTypeBegin
AVAudioSessionSilenceSecondaryAudioHintTypeEnd
8.AVAudioSessionRecordPermission(录音权限)
AVAudioSessionRecordPermissionUndetermined :待定的
AVAudioSessionRecordPermissionDenied :拒绝的
AVAudioSessionRecordPermissionGranted :授予的
9.AVAudioSessionErrorCode(错误原因)
typedef NS_ENUM(NSInteger, AVAudioSessionErrorCode)
{
AVAudioSessionErrorCodeNone = 0,
AVAudioSessionErrorCodeMediaServicesFailed = 'msrv', /* 0x6D737276, 1836282486 /
AVAudioSessionErrorCodeIsBusy = '!act', / 0x21616374, 560030580 /
AVAudioSessionErrorCodeIncompatibleCategory = '!cat', / 0x21636174, 560161140 /
AVAudioSessionErrorCodeCannotInterruptOthers = '!int', / 0x21696E74, 560557684 /
AVAudioSessionErrorCodeMissingEntitlement = 'ent?', / 0x656E743F, 1701737535 /
AVAudioSessionErrorCodeSiriIsRecording = 'siri', / 0x73697269, 1936290409 /
AVAudioSessionErrorCodeCannotStartPlaying = '!pla', / 0x21706C61, 561015905 /
AVAudioSessionErrorCodeCannotStartRecording = '!rec', / 0x21726563, 561145187 /
AVAudioSessionErrorCodeBadParam = -50,
AVAudioSessionErrorInsufficientPriority = '!pri', / 0x21707269, 561017449 /
AVAudioSessionErrorCodeResourceNotAvailable = '!res', / 0x21726573, 561145203 /
AVAudioSessionErrorCodeUnspecified = 'what' / 0x77686174, 2003329396 */
} NS_AVAILABLE_IOS(7_0);
四、constants for port types
1.input port types
AVAudioSessionPortLineIn
AVAudioSessionPortBuiltInMic :内置麦克风
AVAudioSessionPortHeadsetMic :耳机线中的麦克风
2.output port types
AVAudioSessionPortLineOut
AVAudioSessionPortHeadphones :耳机或者耳机式输出设备
AVAudioSessionPortBuiltInReceiver :帖耳朵时候内置扬声器(打电话的时候的听筒)
AVAudioSessionPortBuiltInSpeaker :iOS设备的扬声器
AVAudioSessionPortBluetoothA2DP :A2DP协议式的蓝牙设备
AVAudioSessionPortHDMI :高保真多媒体接口设备
AVAudioSessionPortAirPlay :远程AirPlay设备
AVAudioSessionPortBluetoothLE :蓝牙低电量输出设备
3.可以支持input or output 端口类型
AVAudioSessionPortBluetoothHFP :在蓝牙免提上的input or output
AVAudioSessionPortUSBAudio
AVAudioSessionPortCarAudio
五、SourceLocation&Orientations&PolarPattern&ChannelRoles(~ ~!)
1.Source Location
AVAudioSessionLocationUpper
AVAudioSessionLocationLower
2.Orientation
AVAudioSessionOrientationTop
AVAudioSessionOrientationBottom
AVAudioSessionOrientationFront
AVAudioSessionOrientationBack
AVAudioSessionOrientationLeft
AVAudioSessionOrientationRight
3.Polar pattern
AVAudioSessionPolarPatternOmnidirectional
AVAudioSessionPolarPatternCardioid
AVAudioSessionPolarPatternSubcardioid
六、Helper Class Interface
AVAudioSessionChannelDescription
AVAudioSessionPortDescription
AVAudioSessionRouteDescription
七、 AVAudioSessionDelegate protocol
beginInterruption : 一些东西导致音频被打断(监听回调)
endInterruptionWithFlags :参数只有一个:AVAudioSessionInterruptionOptions,打断结束了
endInterruption :如果执行这个方法,就会默认执行endInterruptionWithFlags
inputIsAvailableChanged:通知input设备是有效的或者无效的