AVAudioSession
AVAudioSession
是一个单例对象,提供了应用程序的音频会话交互的接口。
AVAudioSession的作用
使用此类可以:
- 启用或停用应用程序的音频会话阶段
- 设置音频会话类别和模式,以便与系统通信在应用程序中使用音频
- 配置音频设置,如采样率,
I / O
缓冲区持续时间和通道数 - 处理音频路由更改
- 响应重要的音频事件,例如更改底层
Media Services
守护程序的可用性
获取AVAudioSession单例
+ (AVAudioSession *)sharedInstance;
返回单例音频会话。
请求记录权限
- (void)requestRecordPermission:(PermissionBlock)response;
请求用户对音频录制的权限。
- (AVAudioSessionRecordPermission)recordPermission;
记录当前权限状态。
管理音频会话
@property(readonly) NSString *category;
音频会话类别。默认值为AVAudioSessionCategorySoloAmbient
。
@property(readonly) NSArray<NSString *> *availableCategories;
设备上可用的音频会话类别, 不是每个音频会话类别在每个设备上都可用。 例如,AVAudioSessionCategoryRecord
类别在不支持音频输入的设备上不可用。 访问此属性,以查看设备可以使用哪些类别。
@property(readonly) AVAudioSessionCategoryOptions categoryOptions;
与音频会话类别相关联的选项,使用类别选项调整应用程式的音效行为。 可用值在AVAudioSessionCategoryOptions
中 。
- (BOOL)setCategory:(NSString *)category error:(NSError * _Nullable *)outError;
音频会话类别,以及返回错误信息。
- (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError * _Nullable *)outError;
使用指定的音频行为选项设置音频会话类别并返回错误信息。
@property(readonly) NSString *mode;
默认值为AVAudioSessionModeDefault
,会话模式。
@property(readonly) NSArray<NSString *> *availableModes;
设备上可用的音频会话模式。
- (BOOL)setMode:(NSString *)mode error:(NSError * _Nullable *)outError;
设置音频会话模式并返回错误信息。成功时返回YES
,失败时返回NO
。
- (BOOL)setActive:(BOOL)active error:(NSError * _Nullable *)outError;
激活或停用应用程序的音频会话的活动状态并返回错误信息。成功时返回YES
, 失败时返回NO
。
- (BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError * _Nullable *)outError;
激活或停用应用程序指定音频行为会话的活动状态并返回错误信息。成功时返回YES
, 失败时返回NO
。
使用音频设备设置
@property(readonly) float outputVolume;
系统级输出音量。
@property(readonly) float inputGain;
控制增益输入。浮点值[0.0,1.0]
。
@property(readonly, getter=isInputGainSettable) BOOL inputGainSettable;
是否可以设置输入增益。
- (BOOL)setInputGain:(float)gain error:(NSError * _Nullable *)outError;
将输入增益设为为指定值并返回错误信息。如果新增益值设置成功,则为YES
,否则为NO
。
@property(readonly) NSTimeInterval inputLatency;
音频输入的延迟(以秒为单位)。
@property(readonly) NSTimeInterval outputLatency;
音频输出的延迟(以秒为单位)。
@property(readonly) double sampleRate;
音频采样频率。
@property(readonly) double preferredSampleRate;
首选音频采样频率,以Hz
(赫兹)为单位。
- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError * _Nullable *)outError;
设置输入和输出的首选采样率。sampleRate
是要使用的硬件采样率。 硬件采样率的可用范围是设备相关的。通常取值在[8000,48000]
赫兹之间。如果请求成功,则为YES
,否则为NO
。
@property(readonly) NSTimeInterval IOBufferDuration;
设置I / O
缓冲区持续时间(以秒为单位)。
@property(readonly) NSTimeInterval preferredIOBufferDuration;
首选I / O
缓冲区持续时间(以秒为单位)。
- (BOOL)setPreferredIOBufferDuration:(NSTimeInterval)duration error:(NSError * _Nullable *)outError;
设置首选音频I / O
缓冲区持续时间并返回错误消息。
@property(readonly) BOOL secondaryAudioShouldBeSilencedHint;
另一个应用程序是否正在播放音频。当具有不可混合音频会话的另一个应用程序播放音频时,该值为YES
。例如,使用AVAudioSessionCategoryAmbient
的游戏可以使用此属性决定静音其音轨,同时保持其音效不被静音。
使用音频声道
@property(readonly) NSInteger inputNumberOfChannels;
采集音频输入的声道数。
@property(readonly) NSInteger maximumInputNumberOfChannels;
并非所有采集设备都支持多声道数据的采集,可以通过检查此属性得到当前采集设备支持音频输入的最大声道数。
@property(readonly) NSInteger preferredInputNumberOfChannels;
首选音频输入声道数。
- (BOOL)setPreferredInputNumberOfChannels:(NSInteger)count error:(NSError * _Nullable *)outError;
设置首选音频输入声道数的数量并返回错误信息。成功返回YES
,失败则返回NO
。
@property(readonly) NSInteger outputNumberOfChannels;
采集音频输出的声道数。
@property(readonly) NSInteger maximumOutputNumberOfChannels;
可以通过检查此属性得到当前采集设备支持的音频输出最大声道数。
@property(readonly) NSInteger preferredOutputNumberOfChannels;
首选音频输出声道数。
- (BOOL)setPreferredOutputNumberOfChannels:(NSInteger)count error:(NSError * _Nullable *)outError;
设置首选音频输出声道数的数量并返回错误信息。成功返回YES
,失败则返回NO
。
使用音频输入输出路由
@property(readonly) AVAudioSessionRouteDescription *currentRoute;
与当前音频路由关联的输入和输出端口。
@property(readonly, getter=isInputAvailable) BOOL inputAvailable;
设备当前是否支持音频输入。可用则为YES
,否则为NO
。
@property(readonly, getter=isOtherAudioPlaying) BOOL otherAudioPlaying;
是否还有其他应用程序在播放音频。在iOS 8以上推荐使用secondaryAudioShouldBeSilencedHint
。
- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError * _Nullable *)outError;
重定向音频的路由并返回错误信息。 成功返回YES
,失败返回NO
。
@property(readonly) NSArray<AVAudioSessionPortDescription *> *availableInputs;
可用的输入端口数组。
@property(readonly) AVAudioSessionPortDescription *preferredInput;
首选输入端口。
- (BOOL)setPreferredInput:(AVAudioSessionPortDescription *)inPort error:(NSError * _Nullable *)outError;
设置首选输入端口并返回错误信息。成功返回YES
, 失败返回NO
。
@property(readonly) NSArray<AVAudioSessionDataSourceDescription *> *inputDataSources;
表示可用输入源的AVAudioSessionDataSourceDescription
对象数组,如果当前不可能在多个输入源之间切换,则为nil
。 此功能仅在某些设备和外围设备上支持,例如,在配备前置和后置麦克风的iPhone
上。
@property(readonly) AVAudioSessionDataSourceDescription *inputDataSource;
当前选择的输入数据源。
- (BOOL)setInputDataSource:(AVAudioSessionDataSourceDescription *)dataSource error:(NSError * _Nullable *)outError;
设置当前选择的输入数据源并返回错误信息。 成功返回YES
, 失败返回NO
。
@property(readonly) NSArray<AVAudioSessionDataSourceDescription *> *outputDataSources;
表示可用输出源的AVAudioSessionDataSourceDescription
对象数组,如果当前不可能在多个输出源之间切换,则为nil
。 此功能仅在某些USB
配件上受支持。
@property(readonly) AVAudioSessionDataSourceDescription *outputDataSource;
当前选择的输出数据源。
- (BOOL)setOutputDataSource:(AVAudioSessionDataSourceDescription *)dataSource error:(NSError * _Nullable *)outError;
设置当前选择的输出数据源并返回错误信息。 成功返回YES
, 失败返回NO
。
常量
typedef void (^PermissionBlock)(BOOL granted);
如果用户已明确授予应用程序音频录制权限,则为YES
; 如果用户拒绝了权限,则为NO
。
此块类型由requestRecordPermission:
方法使用。
Audio Session Categories
音频会话的类别标识符,苹果定义了以下常量:
Audio Session Categories.png
AVAudioSessionCategoryOptions
指定可选音频行为的常量。如下:
AVAudioSessionCategoryOptions.png
Audio Session Modes
音频会话的模式标识符,定义了如下常量:
音频会话的模式标识符.png
AVAudioSessionInterruptionOptions
中断后的音频会话的状态的常数。定义了一个常量:
AVAudioSessionInterruptionOptionShouldResume
中断另一个音频会话已结束,应用程序可以恢复其音频会话。
AVAudioSessionSetActiveOptions
音频会话激活或停用时提供有关应用程序的音频其他信息的标志。定义了一个常量:
AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
当前音频会话取消激活时,已被会话中断的其他音频会话可以返回到其活动状态。
AVAudioSessionPortOverride
是否重定向端口。
AVAudioSessionPortOverrideNone
不覆盖当前的输入和输出。系统默认输出。
AVAudioSessionPortOverrideSpeaker
覆盖当前的输入和输出,并将音频路由到内置扬声器和麦克风。 仅适用于AVAudioSessionCategoryPlayAndRecord
类别。
AVAudioSessionRouteChangeReason
音频路由更改的原因。定义了以下常量:
AVAudioSessionRouteChangeReason.png
AVAudioSessionInterruptionType
音频中断状态的常量。如下:
AVAudioSessionInterruptionTypeBegan
开始处理中断。
AVAudioSessionInterruptionTypeEnded
处理中断结束。
Notification User Info Keys
中断通知的用户信息字典中可用的键。如下:
Notification User Info Keys.png
AVAudioSessionErrorCode
由AVAudioSession
方法返回的NSError
对象中使用的错误代码。
AVAudioSessionErrorCode.png
Port Types
定义引用输入或输出的端口类型的值。提供以下常量:
AVAudioSessionPortUSBAudio
USB
设备上的端口。
AVAudioSessionPortBluetoothHFP
蓝牙免提配置文件设备上端口。
AVAudioSessionPortCarAudio
汽车音频端口。
AVAudioSessionRecordPermission
录音权限,提供了以下常量:
AVAudioSessionRecordPermission.png
AVAudioSessionSilenceSecondaryAudioHintType
另一设备音频的状态类型。定义以下常量:
AVAudioSessionSilenceSecondaryAudioHintTypeBegin
另一设备音频输出开始。
AVAudioSessionSilenceSecondaryAudioHintTypeEnd
另一设备音频输出结束。
通知
AVAudioSessionInterruptionNotification
发生音频中断时,在主线程上发布。
AVAudioSessionRouteChangeNotification
系统的音频路由更改,在主线程上发布。
AVAudioSessionMediaServicesWereLostNotification
媒体服务器终止,在主线程上发布。
AVAudioSessionMediaServicesWereResetNotification
媒体服务器重新启动, 在主线程上发布。
AVAudioSessionSilenceSecondaryAudioHintNotification
主音频从其他应用程序启动和停止, 在主线程上发布。
方法
- (BOOL)setAggregatedIOPreference:(AVAudioSessionIOType)inIOType error:(NSError * _Nullable *)outError;
暂无概述。
- (BOOL)setCategory:(NSString *)category mode:(NSString *)mode options:(AVAudioSessionCategoryOptions)options error:(NSError * _Nullable *)outError;
暂无概述。
网友评论