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];
以上就是基本的实现方法。