您好,登錄后才能下訂單哦!
About iPod Library Access
關于iPod庫訪問
iPod library access 是檢索和播放從設備的iPod庫中獲取的項目的iOS界面。iPod庫是設備上媒體項的集合。這些媒體項是用戶從iTunes上同步過來的。
如 圖 1-1 所示, 應用程序有兩種方式取得項目。媒體選擇器,顯示在左側,是一個易于使用的、封裝的視圖控制器。它的行為類似一個iPod應用程序內置的音樂選擇接口。 對于很多應用程序來說,這就足夠了。
如果你想要選擇器沒有提供的專業的訪問控制,則媒體查詢接口(顯示在圖的右下方)將提供。 它提供基于斷言的從設備iPod庫中獲取的項的說明。
圖 1-1 使用iPod庫訪問
如圖中應用程序的右側所示,你可以用這個API提供的播放器播放取得的媒體項。
如你所見,在這個API中這些類有兩種處理方式,通常的開發區域:數據庫訪問——找到媒體項用于播放——和音樂播放。然而,你不需要在兩個區域中利用專門的主題去直接使用這個API。iPod庫訪問為你做了這個“重任”。
舉個例子,你的全部音樂播放代碼只有一行——無論是播放DRM-encrypted AAC文件、來自于CD的蘋果無損格式、用iLBC編碼的博客、或是有聲書。系統自動設置緩存,選擇適當的編×××,并直接發送音頻到設備輸出硬件。
使用音樂播放器和媒體項目選擇器,你能夠實現音樂的選擇和播放而無需去編寫任何代碼去訪問iPod庫。當你需要它的時候,數據庫訪問類會提供完整的查詢系統,而當你不需要的時候,它則不會出現。
Note: iPod庫訪問僅適用于音頻媒體項目。不能播放iPod庫里的視頻博客、電影或是電視。
About Music Players
關于音樂播放器
你的應用程序使用音樂播放器就類似于最終用戶操作內置的iPod應用程序。你能通過編程的方式進行播放、暫停、查找等。
音樂播放器的基礎和術語
音樂播放器 用來播放媒體項目的對象。它有一個播放隊列, 播放隊列是一個需播放媒體項的列表。媒體項可以是歌曲、博客,或者有聲書。
用戶從iTunes同步時獲取媒體項到設備中。在設備中,所有的媒體項被稱為iPod庫。
音樂播放器知道哪個項正在被播放或是被指定播放,并且知道項要被播放的時間軸上的位置。這些屬性的概要描述見 圖 1-2. (這個圖只是用于解釋。音樂播放器不提供用戶界面。)
圖 1-2 音樂播放器對象示意圖
現在播放 項有特別的狀態。例如,如果用戶在內置的iPod應用程序上暫停一首歌, 然后啟動你的應用程序,你的音樂播放器能從相同的點繼續播放這個項目。
圍繞音樂播放器的附加屬性,使它具有高度的靈活性。如圖所示,音樂播放器具有模式、播放狀態和音量等屬性。
隨機播放模式 和 重復播放模式 操作和內置的iPod應用程序一樣。
播放狀態 是你從音頻播放系統想要得到的:播放、停止、暫停、快進、或快退。另外,你可以跳到下一個媒體項的開頭或是回到播放隊列的開頭。
音量 默認狀態下是滿值,并且可以設置任何的的值包括靜音。
你可以設置兩種風格的音樂播放器,這取決于你想讓應用程序達到何種目標。
應用程序音樂播放器 播放應用程序本地的音樂。 它不受、也不影響內置的iPod應用程序。具體來說,你的音樂播放器具有不同的正在播放項、播放狀態和模式。當用戶退出應用程序的時候,音樂隨之停止。
iPod 音樂播放器,事實上,它采用的是內置的iPod應用程序。當用戶退出應用程序時,音樂繼續播放。
最后,記住下面兩個關于使用音樂播放器的重要事項:
同一時間只能有一個音樂播放器運行。
音樂播放器只能在你的應用程序的主線程上使用。
你好,音樂播放器
這是一個極簡單的示例,hello world,這個示例演示了庫訪問和音樂播放。幾分鐘后,你將有一個能工作的音樂播放器。這個代碼排列了整個iPod庫并且在程序啟動后立即播放。
Note: 接下來的步驟你需要一個真機。因為虛擬機不提供iPod庫訪問。
1.創建一個新的Xcode項目,使用應用程序模板窗口創建一個新的項目。在項目窗口,添加 MediaPlayer 框架到框架組。 保存項目。
2.包含Media Player 框架的頭文件,在 AppDelegate.h 文件添加, #import <MediaPlayer/MediaPlayer.h>。
3.添加代碼創建一個音樂播放器, 分配要播放的音樂并開始播放。打開工程的 AppDelegate.m 實現文件。 在 applicationDidFinishLaunching: 代碼塊結束前, 添加三行如 代碼清單 1-1 所示的代碼.
代碼清單 1-1 極簡單的音樂播放器
// instantiate a music player
MPMusicPlayerController *myPlayer =
[MPMusicPlayerController applicationMusicPlayer];
// assign a playback queue containing all media items on the device
[myPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];
// start playing from the beginning of the queue
[myPlayer play];
現在,為你的開發設備配置恰當的工程,其中包括設置代碼代碼簽名身份(code-signing identity)和束標示符。同時確保設備中至少有一首歌在iPod庫中。構建并運行項目。當應用程序在設備上啟動的時候,iPod庫中得第一首歌就開始播放。音樂播放器會一直播放iPod庫里面的個所有項目直到你退出應用程序。
About Music Player Change Notifications
關于音樂播放器改變的通知
想要保持對音樂播放器正在做的事進行跟蹤,你要注冊音樂播放器改變的通知。這對于確保應用程序的狀態和音樂播放器的狀態的協調至關重要。
舉個例子,下面是正常啟動音樂播放器的事件順序。注意,因為音樂播放器在它自己的線程上操作,所以在接收到相應的通知之前,你不能更新你的用戶界面。
1.用戶點擊播放按鈕。
2.應用程序調用音樂播放器進行播放。
3.音樂播放器開始播放,且發送一個回放狀態改變的通知。
4.應用程序接受這個通知,并且查詢播放器的狀態,確認它是否真的在播放。
5.應用程序更新相應的用戶界面——或許是改變播放按鈕為暫停按鈕。
音樂播放器改變通知支持跟蹤播放狀態、正在播放的項目、和音樂播放器的播放音量。 “Using Media Playback” 解釋了如何使用它們。
Home Sharing and iPod Music Players
家庭共享和iPod音樂播放器
從iOS 4開始,內置iPod和視頻應用程序能夠播放來自使用家庭共享庫中的媒體。然而,第三方應用程序使用Media Player 框架仍然只能訪問設備中的iPod庫。這意味著你的應用程序不能在你的用戶界面顯示家庭分享歌曲的標題。但是,當播放共享媒體時,其他播放信息——例如當前的播放時間和播放狀態——是顯示的。
About Media Items and the iPod Library
關于媒體項目和iPod庫
媒體項目——在iPod庫中的歌曲、有聲書、和播客——能擁有廣泛的元數據。你能使用這些元數據構建查詢或是在用戶界面上創建有吸引力的媒體項顯示。圖 1-3 給你一個媒體項特性的例子。
圖 1-3 媒體項和它的一些元數據
所有媒體項元數據都是只讀的。然而,通過媒體項固有的ID值,你能夠聯合使用你所管理的應用程序的額外元數據。
如圖 1-3 所示的,一個項的元數據恩能夠包括多個類別的信息。所以被稱作一般屬性是那些能夠適用于所有媒體項的屬性。包括“標題”、“藝術家”、“插圖”等等。這些屬性的值通常不隨時間改變。
一個媒體項也能有用戶自定義屬性,例如評級和最后播放日期。這些屬性根據用戶的活動進行更新,就像在桌面上操作一樣。
The Media Item Picker
媒體項選擇器
用戶選擇音樂的最簡單方法是使用media item picker——一個全配制模式視圖控制器。它的用戶界面是類似于內置iPod應用程序活躍時的界面,如 圖1-4 所示。
圖 1-4 媒體項選擇器的用戶界面
當用戶點擊完成時,一個你才實現的代理方法接收選擇的媒體項形成的列表,然后將選擇器視圖不顯示。
一定要知道,媒體項選擇器和內置iPod應用程序之間的相似只是一種表面現象。使用iPod,用戶能夠構建一個活躍的播放列表。這個播放列表的行為就像其他的播放列表。舉個例子,它出現在iPod應用程序播放列表選項卡上,且它在用戶改變或刪除它前它一直存在。
對于選擇器,是用戶指定的一個媒體項集合。這個集合沒有播放列表狀態。它在用戶退出應用程序后不會存在——除非你保存了它。在任何情況下,在選擇器的播放列表中兩個集合都不會被顯示。
Getting Media Items Programmatically
獲取媒體項的編程方式
如果媒體項選擇器沒有提供你想要的控制,你能夠使用API的數據庫訪問類。這些類是為了讓你創建任意復雜的查詢。例如,你能檢索得到所有在特定類型中標題包含有特定單詞或短語的歌曲。
使用編程方式訪問分兩步:
1.配置一個查詢。
2.查詢檢索到的匹配的媒體項。
媒體查詢 是對從設備的iPod庫中檢索到的項目,以及對這些項目進行如何安排的描述。它又兩個屬性需要配置。
過濾器 是對檢索內容的描述。過濾器是可選的。當沒有過濾器的時候,查詢匹配整個iPod庫。
分組類型 一個可選的鍵,它指定檢索得到的媒體項的結合如何安排。
擴大一點說,過濾器能夠根據應用程序的需求而變得簡單或復雜。它由一個或多個媒體屬性斷言描述組成。 媒體屬性斷言 是一個邏輯條件語句,用來檢測每個媒體項。所得到的媒體項是當你調用查詢的時候,從iPod庫里檢索的滿足過濾器條件的項。
可選的分組類型指定的安排以及集合的排序是和每個集合中的媒體項排序是一樣的。舉個例子,使用“專輯”分組類型的結果,返回的是按專輯分組的媒體項,每個專輯的歌曲是按照追蹤的順序排序的。
圖 1-5 顯示了一個媒體查詢的配置和它在應用程序和iPod庫之間的位置。
圖 1-5 使用媒體查詢訪問設備的iPod庫
As the figure shows, a query can fetch items or collections.如圖所示,查詢可以取得項目或者集合。
當你請求項目時,查詢返回一個包括所有匹配過濾器的項目的集合。這些項目按照“自然”順序排列,意思是他們的排序和在iTunes上顯示的排序是一樣的。
當你請求一個集合時,媒體查詢不僅使用過濾器也使用分組類型。
About Collections and Playlists
關于集合和播放列表
媒體項集合 是一個媒體項目的數組。你通過訪問媒體查詢的collections屬性從設備的iPod庫獲取集合。返回值是一個集合的有序數組,每個集合都是查詢的分組類型的實例。
例如,你通過指派MPMediaGroupingAlbum 鍵指定一個“專輯”的分組類型到一個媒體查詢——那就是說這個查詢沒有過濾器。這個collections 屬性的值是包含整個iPod庫里所有的音頻按照專輯進行組織,每個集合就是一個專輯。 這個集合(專輯)按照字母進行排序。在每個集合中的這些歌(每個媒體項) 按照跟蹤號碼進行排列。圖 1-6 說明了這一點。
圖 1-6 從設備的iPod庫中獲取集合
在圖的底部你看到的是設備的iPod庫。In this illustrative case,在這個說明例子里,這個庫只有兩個音樂專輯,一個有七個跟蹤項,另一個有八個。這些項目是按照他們的“自然”順排列,就像在iTunes里出現的那樣。
在圖中間位置的上一點箭頭代表的是定義一個通用(無過濾器)查詢、應用程序“專輯”分組類型、和訪問查詢的collections屬性。
圖的頂部代表的是collections調用的結果。它是一個數組,它的元素是媒體項的數組。集合數組按照專輯名字排序。每個集合按照跟蹤(track)號碼排序。
你也可以構建自己的集合。這是有用的,例如,管理用戶用媒體項選取器取得的選項。不過要注意,這個集合不是可變的。
播放列表 是一個特殊的媒體項排序集合。它又一些常規集合不具有的屬性,例如名字和持久的ID。播放列表是通過用戶在桌面創建的;在設備中他們是只讀的。
Using iPod Library Change Notifications
使用iPod庫改變通知
MPMediaLibrary 對象代表設備iPod庫的狀態。你能使用它來確保你的庫的儲存內容是最新的。This is useful because a user may sync their device, changing the content of the iPod library, while your application is running.這非常有用,因為用戶可能會在當應用程序運行的時候同步他們的設備,改變iPod庫的內容。
Mixing Your Own Sounds with iPod Library Sounds
用iPod庫的聲音混合你的私有聲音
Note: 想要用設備iPod庫中的聲音混合應用程序的聲音,你需要理解音頻會話、音頻會話類別、音頻硬件線路變化、和音頻中斷。學寫這些內容,請參考 Audio Session Programming Guide。
你也需要理解你選擇的音頻格式會影響你的聲音在設備上的同時播放。詳見Core Audio Overview中的“Playing Multiple Sounds Simultaneously”。
音樂播放器自動的使用媒體播放音頻會話類別。如果應用程序使用音樂播放器且沒有別的聲音,你應該不必寫音頻會話代碼。具體來說,你不應該初始化、配置或者激活音頻會話。系統自動為音樂播放器處理播放、音頻硬件線路改變、和音頻中斷。
另一方面,用iPod庫的聲音混合應用程序的聲音,你需要配置和使用應用程序的音頻會話。使用環境類別(Ambient category)來支持混合。處理音頻中斷、音頻硬件線路改變、和音頻會話激活需參照Audio Session Programming Guide。用iPod聲音混合應用程序聲音的例子,詳見AddMusic。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。