iOS 開發 初級:Audio 之 Audio Session

來源:互聯網
上載者:User

在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最基本的設定,在開發文檔中可以看到還有很多設定的內容。如果要開發進階的音頻應用,可以再去看開發文檔。






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.