iOS 开发 初级:Audio音频之播放iPod Library音乐

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才能实现对musicplayernotification

    [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];


以上就是基本的实现方法。







你可能感兴趣的:(iOS,Development,iOS,开发从入门到超级,IOS,audio,iPod,音乐,库)