1、概要
在很多音樂播放器應用中,都可以播放系統內建音樂播放器內的音樂。這播放器以前叫iPod,音樂檔案儲存體在iPod Library中。
本文介紹如何通過iOS系統內建的音樂播放器來播放iPod Library內的音樂。
2、iOS開發文檔:iPod Library Access Programming Guide
3、需要的Framework:Media Player Framework
4、Framework準系統概述:
1)通過Media Query擷取iPod Library的播放隊列;
2)通過Media Picker Controller 選取播放隊列;
3)使用Music Player Controller 來播放音樂。
5、技術實現Step by Step
Step 1:建立一個MPMusicPlayerController的播放器,並選擇播放器的類型:applicationMusicPlayer 或iPodMusicPlayer。兩者的差別是使用iPodMusicPlayer那麼應用最小化後音樂還可以繼續播放,約等於直接使用系統內建的播放器來播放。
// Create a music player
self.musicPlayer = [MPMusicPlayerControlleriPodMusicPlayer];
self.musicPlayer.shuffleMode
= MPMusicShuffleModeOff;
self.musicPlayer.repeatMode
= MPMusicRepeatModeNone;
NSNotificationCenter *notificationCenter = [NSNotificationCenterdefaultCenter];
[notificationCenter
addObserver:self
selector:@selector(handleVolumeChanged:)
name:MPMusicPlayerControllerVolumeDidChangeNotification
object:self.musicPlayer];
[notificationCenter
addObserver:self
selector:@selector(handlePlaybackStateChanged:)
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
object:self.musicPlayer];
[notificationCenter
addObserver:self
selector:@selector(handleNowPlayingItemChanged:)
name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object:self.musicPlayer];
//
添加下面的code才能實現對musicplayer的notification
[self.musicPlayerbeginGeneratingPlaybackNotifications];
上面的Code包含了對musicPlayer的一些基本設定,並添加對notification的接收。
Step 2:建立播放隊列即MediaQuery並賦給musicPlayer。
擷取播放隊列有兩種方法:
1、直接擷取iPod Library中的播放隊列,然後可以選擇性的選取音樂。
//建立media query
MPMediaQuery *mediaQuery = [MPMediaQueryalbumsQuery];
//
添加Filter來選擇某個特定的隊列
MPMediaPropertyPredicate *artistNamePredicate = [MPMediaPropertyPredicatepredicateWithValue:@"五月天"forProperty:MPMediaItemPropertyArtist];
[mediaQueryaddFilterPredicate:artistNamePredicate];
// 添加隊列
self.mediaQueue = [mediaQueryitems];
self.userMediaItemCollection = [MPMediaItemCollectioncollectionWithItems:self.mediaQueue];
[self.musicPlayersetQueueWithItemCollection:self.userMediaItemCollection];
// 或者
//[self.musicPlayer setQueueWithQuery:mediaQuery];
2、使用MPMediaPickerController,要添加
MPMediaPickerControllerDelegate
MPMediaPickerController *mediaPickerController = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic];
mediaPickerController.delegate =self;
mediaPickerController.allowsPickingMultipleItems =YES;
mediaPickerController.prompt =@"Add songs to play";
通過
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection
*)mediaItemCollection
擷取mediaItemCollection然後在Method中加入musicPlayer播放隊列。
## 說明一下mediaItemCollection,mediaQuery和mediaItem的關係:
mediaItemCollection與mediaQuery類同,但mediaItemCollection可以包含各種group,比如按照album唱片來分類,而mediaQuery則沒有分類。mediaItem都是兩者的item。
mediaItemCollection 和 mediaQuery可以互相轉換
比如:[self.mediaQuery setGroupType:MPMediaGroupingAlbum];
NSArray *albums = [self.mediaQuery collections];
這時albums裡面就是MPMediaItemCollection的對象。
Step 3:設定及操作musicPlayer
基本的method和property就是play,pause,stop,skipToNextItem,volume,currentPlaybackTime,repeat,shuffle。這些都很簡單。重點在於notification
Step 4:擷取音樂資訊
通過[mediaItem valueForProperty:...] 來擷取mediaItem的各種資訊。
比如
self.songName.title = [mediaItemvalueForProperty:MPMediaItemPropertyTitle];
以上就是基本的實現方法。