iPhone人機界面常見任務處理方法之聲音處理 (3)
iPhone人機界面常見任務處理方法是本文要介紹的內(nèi)容,如果您具有使用桌面計算機或便攜式計算機應用程序的經(jīng)驗,那么您會發(fā)現(xiàn)iPhone應用程序處理很多常見任務的方式與它們不同。
本節(jié)從人機界面的角度描述了這些常見任務;關(guān)于代碼實現(xiàn)的技術(shù)細節(jié),請參考iPhone應用程序編程指南。繼續(xù)上一節(jié) iPhone人機界面常見任務處理方法 (2)開始介紹。
使用聲音
用戶期望iPhone OS設(shè)備具有非常美妙的聲音,無論是操作系統(tǒng)的聲音(比如鈴聲和警告聲),還是應用程序的聲音(比如媒體播放,環(huán)境聲音和配樂)。此外,用戶還希望設(shè)備發(fā)出的聲音能夠遵從他們的偏好和目的。
用戶決定聲音的音量,以及他們是否想要聽到這些聲音。但是有些時候,即使當前的設(shè)置表明用戶更傾向于靜音,他們還是希望聽到某些聲音。例如,用戶總是期望聽到他們設(shè)置的警告聲。從本質(zhì)上講,用戶想要聽到他們期待聽到的聲音,而不愿聽到他們不期待的聲音。
為了幫助您順應這樣的需求,iPhone OS提供了一些編程接口,您可以用來:
描述您應用程序的聲音應該如何與設(shè)備上的其他聲音保持一致。
確保應用程序的聲音能夠按照用戶的期望進行播放。
在您決定如何處理應用程序中的聲音之前,您需要了解,當用戶調(diào)整設(shè)備控件和使用外部設(shè)備(如耳機和耳麥)時,他們期望應用程序和設(shè)備如何運作。
振鈴/靜音切換—用戶的期望
如果用戶希望做到以下幾點,他們可以使用“振鈴/靜音”切換將他們的設(shè)備靜音:
避免被意外的聲音打擾,比如電話鈴聲和來信提示音。
避免聽到用戶操作的附帶聲音,比如鍵盤或其它反饋的聲音,偶然的聲音或應用程序啟動的聲音。
避免聽到游戲的聲音,包括附帶的聲音和配樂,它們并不是使用游戲程序所必需的。
例如,在劇場中,用戶會將他們的設(shè)備切換至靜音狀態(tài),以免打擾到劇場中的其他人。在這種情況下,用戶仍然想要使用他們設(shè)備上的應用程序,但他們不想被不期望的或沒有明確要求的聲音嚇到,比如鈴聲或新消息提示音。
但是,對于旨在產(chǎn)生聲音的用戶動作,“振鈴/靜音”切換不會消除它們產(chǎn)生的聲音。例如:
媒體應用程序中的媒體播放不會被“振鈴/靜音”切換靜音,因為媒體播放是用戶明確請求的。
時鐘應用程序的警告不會被“振鈴/靜音”切換靜音,因為此警告是用戶明確設(shè)置的。
語言學習程序中的音效素材不會被“振鈴/靜音”切換靜音,因為用戶采取明確行動想要聽到它。
語音聊天程序中的會話不會被“振鈴/靜音”切換靜音,因為用戶啟動此類應用程序的唯一目的就是進行語音聊天。
這種行為遵循用戶控制的原則,因為是由用戶(而不是設(shè)備)來決定聽到用戶明確請求的聲音是否合適。
音量按鈕—用戶的期望
用戶使用設(shè)備的音量按鈕來調(diào)節(jié)設(shè)備播放的所有聲音的音量,包括歌曲,應用程序的聲音和設(shè)備的聲音。這意味著用戶可以隨時使用音量按鈕關(guān)閉任何聲音,無論“振鈴/靜音”切換的當前狀態(tài)如何。
在某些情況下,應用程序適宜在其界面為用戶提供音量設(shè)置功能。例如,YouTube顯示了一個音量滑動器,用戶可以用它調(diào)整正在觀看的視頻的音量。盡管YouTube正在運行,用戶可以交替使用此滑動器和音量按鈕來調(diào)整視頻的音量。這是因為在應用程序運行時,滑動器起到音量按鈕代理的作用:滑動器同時作用于應用程序的音量和整個系統(tǒng)的音量(鈴聲音量除外)。
如果您需要顯示音量滑動器,當您使用
- MPVolumeView
類時一定要使用系統(tǒng)提供的滑動器。請注意,如果當前激活的音頻輸出設(shè)備不支持音量控制(比如A2DP設(shè)備),音量滑動器將被相應的設(shè)備名稱取代。
使用音量按鈕調(diào)整應用程序當前播放的音頻,也會同時調(diào)整整個系統(tǒng)的音量(鈴聲音量除外)。(在當前沒有播放任何音頻時,使用音量按鈕調(diào)整鈴聲的音量。)
這種行為遵循用戶控制的原則,因為用戶可以隨時決定設(shè)備發(fā)出的聲音應該有多大。
有時候,應用程序可能需要調(diào)整相對和絕對音量級,以便在其音頻輸出中產(chǎn)生最佳的混合。但是,最終的音頻輸出的音量應該始終受到系統(tǒng)音量的控制,無論它是通過音量按鈕還是音量滑動器進行調(diào)整的。這就意味著,對應用程序音頻輸出的控制仍然掌握在它所歸屬的用戶的手中。
耳機和耳麥—用戶的期望
用戶插入耳機和耳麥就可以獲得私人的聲音體驗并且解放他們的雙手。在使用和不使用附件的情況下,用戶對應用程序的行為有著不同的期望。
當用戶插入耳機和耳麥時,他們是打算繼續(xù)聽當前的聲音,只是轉(zhuǎn)為私下收聽。因此,他們希望當前正在播放音頻的應用程序繼續(xù)播放此音頻。
當用戶拔下耳機和耳麥時,他們不想自動將正在收聽的內(nèi)容分享給他人。因此,他們希望當前正在播放音頻的應用程序暫停播放,讓他們準備好之后顯式地重新開始播放。
無線音頻—用戶的期望
用戶非常喜歡無線耳機的便捷,比如藍牙A2DP設(shè)備。人們使用無線耳機和耳麥的理由與使用有線耳機和耳麥的理由是一樣的:他們想要私下聽到聲音,并希望解放他們的雙手。
用戶對無線耳機的用戶體驗也有著非常類似的期望:
當用戶連接到無線音頻設(shè)備時,他們打算繼續(xù)聽到當前的聲音,只是轉(zhuǎn)為私下收聽。在這種情況下,他們希望音頻能夠繼續(xù)播放。
當用戶斷開無線設(shè)備時(或者當設(shè)備超出作用范圍或關(guān)閉時),他們不想自動將正在收聽的內(nèi)容分享給他人。在這種情況下,他們希望暫停正在播放的音頻,讓他們準備好之后顯式地重新開始播放。
即使用戶沒有實際地插入或拔出無線音頻設(shè)備,他們?nèi)匀幌M軌蜻x擇一個不同的音頻通道。為了解決這個問題,iPhone OS自動顯示了一個控件,讓用戶選擇音頻輸出路線。由于選擇不同的音頻通道是用戶發(fā)起的動作,所以用戶希望正在播放的音頻繼續(xù)播放。
定義應用程序的音頻行為
如果聲音能夠增強用戶體驗或應用程序的功能,或者是用戶體驗或應用程序功能必不可少的一部分,您需要決定您的音頻應該如何與設(shè)備的音頻環(huán)境保持一致,以及應該如何響應用戶的動作。例如,你需要決定:
當設(shè)備鎖定或切換至靜音時,您的音頻是否應該繼續(xù)播放。
您的音頻是否應該與當前正在播放的其他音頻混合在一起(比如iPod中的歌曲)。
您的應用程序是否需要順序或并行地同時處理音頻輸入和輸出。
您的音頻是否應該在中斷后自動恢復播放。
要控制應用程序的音頻在這些情況下應該如何表現(xiàn),請使用“音頻會話服務”或AVAudioSession類。這些編程接口不能產(chǎn)生聲音;它們可以幫助您說明您的音頻應該如何與設(shè)備上的音頻進行交互,以及如何響應中斷和設(shè)備配置中的變化。音頻會話服務管理采用AV基礎(chǔ)框架,音頻隊列服務,OpenAL和I/O音頻單元等技術(shù)產(chǎn)生的聲音。
注意:如果您的應用程序僅需要產(chǎn)生功能附帶的用戶界面音效,您可以使用“系統(tǒng)聲音服務”。系統(tǒng)聲音服務是iPhone OS技術(shù),用于產(chǎn)生警告聲音和用戶界面音效,以及振動;它不適用于任何其他目的,而且它產(chǎn)生的聲音不由“音頻會話服務”管理。使用此技術(shù)的示例請參考SysSound示例項目。
重要:無論您使用何種技術(shù)產(chǎn)生音頻,無論您如何定義它的行為,電話可以隨時中斷當前正在運行的應用程序。這是因為任何應用程序都不應該阻止用戶接聽來電。
音頻會話是您應用程序和系統(tǒng)之間的音頻中介。從用戶體驗的角度來看,音頻會話最重要的一個方面就是定義應用程序的音頻行為的類別。
為了提供良好的音頻用戶體驗,應選擇能最好地描述應用程序音頻的類別。一定要基于類別的語義做出選擇,而不是其行為的確切集合。這將確保您的應用程序能夠按照用戶的期望運轉(zhuǎn)。此外,如果日后該類別的行為集合被重新修訂,它也能最大限度地保證您的應用程序正常工作。
在極少數(shù)情況下,您可能需要通過為音頻會話添加屬性,來增強或改進某個類別的標準行為。例如,您可以添加
- kAudioSessionProperty_OtherMixableAudioShouldDuck
屬性,以確保您應用程序的音頻比所有其他音頻(電話音頻除外)更響亮。如果能夠在其他音頻播放的同時聽到您應用程序的音頻對用戶來說很重要的話,您可以這樣做。但是,您應該注意,一個類別的標準行為代表了大多數(shù)用戶的期望,所以您應該在添加屬性完善此行為之前,認真仔細地考慮一下。要了解有關(guān)音頻會話屬性的更多內(nèi)容,請參考音頻會話編程指南中的“微調(diào)類別”一節(jié)。
您可以根據(jù)設(shè)備當前的音頻環(huán)境選擇您的類別。舉個例子,如果用戶可以在收聽其他音頻(不是您提供的配樂)的同時使用您的應用程序,您可能想要這樣做。如果這對于您的應用程序來說行得通,一定要避免強迫用戶停止收聽他們的音樂,或是在您的應用程序啟動時強迫用戶做出明確的配樂選擇。要了解如何做到這一點,參考“小結(jié)”中的場景2。
當應用程序正在運行時,您也可以改變音頻會話的類別,雖然很少有必要這樣做。這樣做的主要原因是,應用程序需要在不同的時刻支持錄音和播放。在這樣的應用程序中,更好的做法是根據(jù)需要在Record類別和Playback類別之間進行切換,而不是選擇Play和Record類別。這是因為選擇Record類別,會使警告(比如來信警告)在錄音正在進行時沒有聲音。
表4-1列出了您可以使用的音頻會話類別。iPhone OS默認為音頻會話分配了Solo Ambient類別。
注意:由于空間有限,表4-1只顯示了每個類別名稱的最后一部分。每個類別的實際符號名稱均以
- AVAudioSessionCategory
開始。例如,
- MixWithOthers
屬性的實際符號名稱是
- kAudioSessionProperty_OverrideCategoryMixWithOthers
表 4-1 您可以用來在應用程序中定義聲音行為的音頻會話類別(單擊放大)
小結(jié):iPhone人機界面常見任務處理方法 (3)的內(nèi)容介紹完了,希望本文對你有所幫助!請深入了解,推薦以下幾篇文章: