1.創建session
- (AVAudioSession*)sharedInstance;
2.設置session的激活狀態
因為激活一個session是同步操作,會阻塞線程,因此,我們如果在一個線程執行一個很久的阻塞操作是有問題的。不建議這么做。
而且,注意,當這個session運行或者暫停在I/O時候,去激活這個session是會拋出一些異常的。(I/O 如 Audio Queue、Player、Recorders、Convertters、remote I/O等)
- (BOOL)setActive:(BOOL)active error:(NSError **)outError;
- (BOOL)setActive:(BOOL)active withOptions:(AVAudioSessionSetActiveOptions)options error:(NSError **)outError NS_AVAILABLE_IOS(6_0);
3.得到當前設備可用的類別,某些協議可能在特定的設備上是失效的(iOS9.0以上可用,坑爹)
- @property(readonly) NSArray<NSString *> *availableCategories NS_AVAILABLE_IOS(9_0);
4.設置session的類別
- (BOOL)setCategory:(NSString *)category error:(NSError **)outError;
5.設置session的列別和選項
- (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError NS_AVAILABLE_IOS(6_0);
6.獲取session的類別
- @property(readonly) NSString *category;
7.返回設備用戶是否去授權錄音(8.0 坑~)
- (AVAudioSessionRecordPermission)recordPermission NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;
8.檢查是否授予錄音權限的block
typedef void (^PermissionBlock)(BOOL granted);
- (void)requestRecordPermission:(PermissionBlock)response NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
9.獲取session的AVAudioSessionCategoryOptions
- @property(readonly) AVAudioSessionCategoryOptions categoryOptions NS_AVAILABLE_IOS(6_0);
10.設置session的模式和獲取當前session模式
- (BOOL)setMode:(NSString *)mode error:(NSError *)outError NS_AVAILABLE_IOS(5_0); / set session mode */
- @property(readonly) NSString mode NS_AVAILABLE_IOS(5_0); / get session mode */
11.重寫output音頻端口
- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError **)outError NS_AVAILABLE_IOS(6_0);
12.判斷其他App是否播放音頻
- @property(readonly, getter=isOtherAudioPlaying) BOOL otherAudioPlaying NS_AVAILABLE_IOS(6_0);
Will be true when another application is playing audio.
Note: As of iOS 8.0, Apple recommends that most applications use secondaryAudioShouldBeSilencedHint instead of this property.
The otherAudioPlaying property will be true if any other audio (including audio from an app using AVAudioSessionCategoryAmbient)
is playing, whereas the secondaryAudioShouldBeSilencedHint property is more restrictive in its consideration of whether
primary audio from another application is playing.
- @property(readonly) BOOL secondaryAudioShouldBeSilencedHint NS_AVAILABLE_IOS(8_0); (8.0 坑)
13.獲取當前route
- @property(readonly) AVAudioSessionRouteDescription *currentRoute NS_AVAILABLE_IOS(6_0);
14.選擇最佳的input 端口 和獲取當前input 端口信息
- (BOOL)setPreferredInput:(nullable AVAudioSessionPortDescription *)inPort error:(NSError **)outError NS_AVAILABLE_IOS(7_0);
- @property(readonly, nullable) AVAudioSessionPortDescription * preferredInput NS_AVAILABLE_IOS(7_0);