用戶通過音量鍵唐责、靜音鍵懈凹、耳機(jī)聲控和屏幕上的音量調(diào)節(jié)滑塊控制聲音。很多 第三方配件也有聲控功能沟堡。音頻可以通過內(nèi)部或外部揚(yáng)聲器侧但、耳機(jī)輸出,甚至 通過支持AirPlay或是藍(lán)牙的設(shè)備來無線輸出航罗。無論聲音是你App的重要功能還 只是一個點(diǎn)綴禀横,你都應(yīng)該知道用戶對聲音有什么期待并且去滿足他們。
音頻處理相對于其它來說是比較麻煩的粥血,即要顧及到音頻的輸入柏锄,同時也需要注意音頻輸入輸出設(shè)置的狀態(tài),同時音頻輸出又可以接入多種設(shè)備的控制复亏。
靜音(Silence)
用戶將他們的設(shè)備調(diào)至靜音來避免被突發(fā)的聲響(比如電話鈴聲和短信提示聲) 打擾趾娃。他們也想要關(guān)閉沒有意義的聲音,包括按鍵聲蜓耻、音效茫舶、游戲背景音樂以 及其它音頻反饋。當(dāng)設(shè)備被設(shè)置成靜音后刹淌,只能播放用戶確認(rèn)打開過的聲音饶氏, 比如媒體播放中的聲音、鬧鐘有勾、音頻和視頻信息疹启。
聲音(Volume)
無論是使用設(shè)備按鍵或是屏幕中的滑塊,用戶都期望音量的變化會改變整個系 統(tǒng)音量蔼卡,包括音樂聲和App內(nèi)的音效喊崖。但是提示鈴聲音量是例外,它只能在音 頻沒有播放的情況下雇逞,被單獨(dú)調(diào)節(jié)荤懂。
耳機(jī)(Headphones)
在私密環(huán)境中,用戶使用耳機(jī)聽聲音塘砸,并且能夠解放雙手节仿。當(dāng)插入耳機(jī)時,用 戶希望聲音能夠自動繼續(xù)播放而不被中斷掉蔬。當(dāng)拔掉耳機(jī)時廊宪,他們希望播放能夠 立即暫停矾瘾。
設(shè)計良好的音效體驗(Designing a Great Audio Experience)
有時自動調(diào)整音量,但不是總體音量:你的App可以調(diào)整特定的音量來達(dá)到很棒的音響效果箭启。但是最終的音量還是由系統(tǒng)音量來控制壕翩。
可以允許重置音頻:用戶經(jīng)常會想要選擇一個不同的音頻輸出設(shè)備。比如傅寡,他 們會想要用客廳的立體音響放妈、車載收音機(jī)或是蘋果電視來聽音樂。請支持這個 功能除非你有十足的理由不這么做荐操。
使用系統(tǒng)自帶的音量窗口來調(diào)節(jié)音量:音量窗口是調(diào)整音頻的最好方法大猛。這個 窗口是可以自定義的,它包括一個音量的滑塊淀零,甚至還包括了一個重置音頻輸 出的控件。
使用系統(tǒng)自帶音效來實現(xiàn)短音和振動:了解開發(fā)者指南膛壹,請參閱SystemSoundServices
如果聲音對你的App十分重要驾中,請先設(shè)置音頻類型:不同的音頻類型中,有的允許聲音被靜音鍵靜音模聋、有的與其它聲音混合肩民、或是允許App在后臺時播放。 根據(jù)不同的類別和當(dāng)前設(shè)備的音頻狀態(tài)來選擇合適的方案链方,然后將其配置到你 的音頻中去持痰。例如,非必要情況下祟蚀,請不要打斷用戶正在收聽的來自另一個App 的音樂工窍。總之前酿,當(dāng)你的App在運(yùn)行時患雏,最好不要改變其原有類型,當(dāng)然那種需 要錄制和重放不同時間音頻的App除外罢维。開發(fā)者指南淹仑,請參閱
AudioSessionProgrammingGuide0
上邊的類別這塊比較難理解當(dāng)時也不是理解類別里的只個名詞的意思,專門去查了下資料肺孵。
原英文版的意思如下:
個人環(huán)境:solo ambient 環(huán)境:ambient 播放:playback 錄制: record 播放并錄制:play and record
AVAudioSession主要能控制App的哪些表現(xiàn)以及如何控制的呢匀借?首先AVAudioSession將使用音頻的場景分成七大類,通過設(shè)置Session為不同的類別平窘,可以控制:
可以看到吓肋,其實默認(rèn)的就是“AVAudioSessionCategorySoloAmbient”類別。從表中我們可以總結(jié)如下:
- AVAudioSessionCategoryAmbient : 只用于播放音樂時初婆,并且可以和QQ音樂同時播放蓬坡,比如玩游戲的時候還想聽QQ音樂的歌猿棉,那么把游戲播放背景音就設(shè)置成這種類別。同時屑咳,當(dāng)用戶鎖屏或者靜音時也會隨著靜音萨赁,這種類別基本使用所有App的背景場景。
- AVAudioSessionCategorySoloAmbient: 也是只用于播放,但是和"AVAudioSessionCategoryAmbient"不同的是兆龙,用了它就別想聽QQ音樂了杖爽,比如不希望QQ音樂干擾的App,類似節(jié)奏大師紫皇。同樣當(dāng)用戶鎖屏或者靜音時也會隨著靜音慰安,鎖屏了就玩不了節(jié)奏大師了。
- AVAudioSessionCategoryPlayback: 如果鎖屏了還想聽聲音怎么辦聪铺?用這個類別化焕,比如App本身就是播放器,同時當(dāng)App播放時铃剔,其他類似QQ音樂就不能播放了撒桨。所以這種類別一般用于播放器類App。
- AVAudioSessionCategoryRecord: 有了播放器键兜,肯定要錄音機(jī)凤类,比如微信語音的錄制,就要用到這個類別普气,既然要安靜的錄音谜疤,肯定不希望有QQ音樂了,所以其他播放聲音會中斷现诀。想想微信語音的場景夷磕,就知道什么時候用他了。
- AVAudioSessionCategoryPlayAndRecord: 如果既想播放又想錄制該用什么模式呢仔沿?比如VoIP企锌,打電話這種場景,PlayAndRecord就是專門為這樣的場景設(shè)計的 于未。
- AVAudioSessionCategoryMultiRoute: 想象一個DJ用的App撕攒,手機(jī)連著HDMI到揚(yáng)聲器播放當(dāng)前的音樂,然后耳機(jī)里面播放下一曲烘浦,這種常人不理解的場景抖坪,這個類別可以支持多個設(shè)備輸入輸出。
- AVAudioSessionCategoryAudioProcessing: 主要用于音頻格式處理闷叉,一般可以配合AudioUnit進(jìn)行使用
音頻處理的七個狀態(tài)介紹完畢擦俐,應(yīng)該大體上能理解音頻各個狀態(tài)的工作原理了。
讓我們再回到原文
當(dāng)時可以重新播放被打斷的音頻:有時正在播放的音頻會被另一個App的音頻中 斷握侧。暫時性中斷(如來電鈴聲)被認(rèn)為是可恢復(fù)的蚯瞧。永久中斷(如Siri打開的音樂播 放列表)被認(rèn)為是無法恢復(fù)的嘿期。當(dāng)一個可恢復(fù)的中斷發(fā)生時,你的APP應(yīng)該在中 斷結(jié)束時自動重新播放被打斷的音頻埋合。例如备徐,一個正在播放配樂的游戲和一個播 放音頻的多媒體App都應(yīng)該可以恢復(fù)播放。
讓其他App知道何時將暫時性的音頻播放完畢:如果你的App可能會暫時中斷其 他App的音頻甚颂,它應(yīng)該對音頻會話進(jìn)行適當(dāng)?shù)臉?biāo)記蜜猾,這樣其他App就能知道何 時可以安全的恢復(fù)。
更多開發(fā)者指南振诬,請參閱AVFoundation中的
AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation蹭睡。
只在特定時間對聲音控件有反應(yīng):不管你的App是在前臺還是后臺運(yùn)行,用戶可 以從你App的外部控制音頻播放赶么,比如控制中心或耳機(jī)控制肩豁。如果你的App正 在音頻相關(guān)的環(huán)境中播放音頻,或者連接到一個支持AirPlay的設(shè)備上辫呻,那么它 可以對音頻控制做出回應(yīng)蓖救。否則,當(dāng)控件激活時印屁,你的App不能停止其他App 正在播放的音頻。
不要重新定義聲音控件:人們希望音頻控制在所有App中都能保持一致斩例。永遠(yuǎn)不 要重新定義聲音控件雄人。如果你的App不支持相應(yīng)控件,那么它就不應(yīng)該對它們 做出響應(yīng)念赶。
總結(jié)础钠,音頻處理的方式介紹完了,其中心點(diǎn)就是音頻的七大狀態(tài)和處理方式的理解叉谜,只要那段能理解這節(jié)基本就搞定旗吁。