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设备是有效的或者无效的
posted @ 2016-06-01 11:30  lvable  阅读(2931)  评论(0编辑  收藏  举报