美文网首页
AVAudioSession

AVAudioSession

作者: 玄裳 | 来源:发表于2017-02-22 19:40 被阅读0次

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;
暂无概述。

相关文章

  • ios 播放没声音

    AVAudioSession *session = [AVAudioSession sharedInstance]...

  • 代码淘沙0801(A-录音权限验证)

    AVAudioSession *avSession = [AVAudioSession sharedInstance];

  • iOS AVAudioSession 详解

    AVAudioSession 简要说说AVAudioSession,AVAudioSession是苹果用来管理Ap...

  • 后台播放

    //开启后台播放 AVAudioSession *session = [AVAudioSession shared...

  • iOS 音频-AVAudioSession

    AVAudioSession 概述 最近在做 webrtc 采集与播放音频,使用AVAudioSession进行播...

  • AVAudioSession -- 音频管理

    AVAudioSession介绍 音频输出作为硬件资源,对于ios系统来说是唯一的;AVAudioSession可...

  • AVAudioSession

    这里首先感谢CZ_iOS看了他的博客,自己做了下记录.iOS给出的解决方案是"AVAudioSession" ,通...

  • AVAudioSession

    AVAudioSessionCategory AVAudioSessionCategoryOptions

  • AVAudioSession

    APP启动的时候会自动激活AVAudioSession单例,但是建议在使用前再次进行激活。 AVAudioSess...

  • AVAudioSession

    场景: 音乐播放软件正在播放音乐,进入某APP,叮,系统提示音导致音乐播放被打断,并无法恢复播放。 为你引流:ht...

网友评论

      本文标题:AVAudioSession

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