AVFoundation - AVAudioSession.h (ENUM 、Value)
参考资料Apple
一、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
1. AVAudioSessionChannelDescription
2. AVAudioSessionPortDescription
3. AVAudioSessionRouteDescription
七、 AVAudioSessionDelegate protocol
- beginInterruption : 一些东西导致音频被打断(监听回调)
- endInterruptionWithFlags :参数只有一个:AVAudioSessionInterruptionOptions,打断结束了
- endInterruption :如果执行这个方法,就会默认执行endInterruptionWithFlags
- inputIsAvailableChanged:通知input设备是有效的或者无效的