在iOS開發中,音視頻最重要的framework就是AVFoundation Framework了。從本文開始,主要談基於AVFoundation的音頻使用與處理。要掌握音訊使用,首先要瞭解的就是Audio Session了。
1、什麼是Audio Session?
先給出官方的英文解釋:
An audio session is
the intermediary between your application and iOS for configuring audio behavior. Upon launch, your application automatically gets a singleton audio
session. You configure it to express your application’s audio intentions.
我的理解就是一個應用最基本的音頻配置,來設定基本的應用與系統之間的音頻處理方式,比如:
1)應用裡的音頻播放時是否要和其他應用的音頻實現混音?或者讓其他音頻靜音?
2)當iOS的鬧鐘響時應用內的音頻是否要暫停?
3)當使用者插拔耳機時應用應該如何反應?拔出耳機時是否要停止音樂?
4)關閉螢幕後音頻是否暫停?
以上這些問題就是Audio Session要設定的東西。可以說要使用AVFoundation播放音樂,第一步就是要設定Audio Session,它影響應用內所以相關音訊播放方式。
2、Audio Session的設定實踐
1)設定的根本方式:更改Audio Session的Category類別。
一個Audio Session Category就是一個Key,來描述應用音頻處理方式的一個種類。通過設定Audio Session 不同的Category來更改配置。
總體上,Category有以下4類:
(1)是否允許混音
(2)開啟靜音和關閉螢幕時是否要靜音
(3)是否支援音頻輸入,比如要錄製音頻
(4)是否支援音訊輸出,比如要播放音頻
2)預設的Audio Session是怎樣的?
如果你的應用正好符號Audio Session的預設設定,那麼你也就不用特地來設定它了。預設的Audio Session具有如下設定:
(1)允許播放Playback不允許錄製;
(2)當使用者開啟靜音時,就是裝置側邊的那個靜音開關,那麼應用內現正播放的音頻將靜音;
(3)當使用者鎖定螢幕或螢幕自動變暗時,應用內的應用內現正播放的音頻將靜音;
(4)當你應用內的音頻開始時,如果這個時候有其他應用比如iPod現正播放音樂,那麼iPod將暫停播放。
以上這一系列方式已經被打包成一個類別,就是AVAudioSessionCategorySoloAmbient,預設的類別
3)Audio Session不起作用的情況
兩種:
(1)應用內根本不使用音頻。(這不是白說嗎?)
(2)應用使用System Sound Services 或者UIKit 的playInputClick。
前一種在上一篇文章中有說,後一種就是設定點擊鍵盤的鍵盤音。
4)開始設定Audio Session(前提:在Xcode中加入AVFoundation.framework
(1)擷取Audio Session對象
AVAudioSession *session = [AVAudioSession sharedInstance];
(2)基本設定
使用setCategory:error:或setCategory:option:error: 方法來實現
比如:
[session setCategory:kAudioSessionCategoryPlayback error:nil];
(3)Category介紹
// 下面這個類別用於音頻比較次要的應用,應用的音頻會和其他應用的音頻實現混音
// 然後關閉螢幕或者靜音開關開啟時音頻將靜音。
NSString *const AVAudioSessionCategoryAmbient;
// 預設類別
NSString *const AVAudioSessionCategorySoloAmbient;
// 下面這個類別應用側重音頻播放,使用這個類別時,關閉螢幕或靜音開關開啟
// 時音頻將繼續播放,與其他應用音頻不混音。要使應用能後台繼續需要相關設定。
NSString *const AVAudioSessionCategoryPlayback;
// 下面這個類別應用將側重錄音。將使播放的音頻靜音,螢幕關閉時錄製音頻將繼續。
// 要使應用能後台繼續需要相關設定。
NSString *const AVAudioSessionCategoryRecord;
// 下面這個類別應用允許音頻播放和錄製,比如用於VOIP語音通話應用。播放和錄音
// 可以同時進行,關閉螢幕將可以繼續。要使應用能後台繼續需要相關設定。
NSString *const AVAudioSessionCategoryPlayAndRecord;
// 下面這個類別用於音頻處理,詳細見開發文檔
NSString *const AVAudioSessionCategoryAudioProcessing;
// 下面這個類別可以實現同時多個輸出,詳細見開發文檔
NSString *const AVAudioSessionCategoryMultiRoute;
4、總結
以上只是Audio Session最基本的設定,在開發文檔中可以看到還有很多設定的內容。如果要開發進階的音頻應用,可以再去看開發文檔。