概述
首先是了解一下 iPod Library Access
,知道本地音乐文件的来源。接着就是知道如何使用播放器的类实例 MPMusicPlayerController
,去播放本地的音乐文件。这样基本就可以了,为了把Apple的文档使用多一些。尝试使用 Media item picker
,深入再操作一下 iPod Library
.
接触的类有:
- MPMediaItem
- MPMusicPlayerController
- MPMediaQuery
其他参考类
- MPMediaGroupingAlbum
- MPMediaLibrary
目录
使用前提醒
需要头文件
1 | /** |
About iPod Library Access
如果你想播放本地的音乐,首先你要知道它存放的位置,iPod Library 就是存放它的地方。
而这个地方也是一个数据库
先看图
然后就是,我们的应用使用
Media Query
去获取iPod Library
的音乐文件,然后应用交给Music Player
去播放它们。然后在对照上图,就可以大概知道一个情况了。
了解数据库的状态的改变,这需要
MPMediaLibraryDidChangeNotification
来作为通知。
返回的内容是一个 MPMediaItem
的数组,MPMediaItem
包含了一个媒体文件所有信息。
获取所有的音乐文件,我们还需要一个 MPMediaQuery
, 这个类的实例可以用于初始化播放器的播放内容。
1 | MPMediaQuery *mySong = [MPMediaQuery songsQuery]; // 这样我们就可以得到了本地音乐文件的所有内容啦 |
想对 MPMediaQuery 有更多的使用有更多的了解
更多关于播放队列
Media playback
- 播放的一些概念术语
说好的播放器,就需要一个播放器实例啦。那就是 MPMusicPlayerController
.
1
2/* 生成一个播放器的实例 */
MPMusicPlayerController *player = [MPMusicPlayerController applicationMusicPlayer];
但是,有了播放器,还需要播放的文件呢!上面我们的到了播放文件列表的一个 MPMediaQuery 实例。Just do it
1
2
3
4
5
6[player setQueueWithQuery: [MPMediaQuery songsQuery]];
/**
或者是
[player setQueueWithQuery: mySong];
*/
还没有完哦,如果播放器的播放状态改变了,我们也需要这个消息通知
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
( handle_NowPlayingItemChanged: ) 和 ( handle_PlaybackStateChanged: ) 是自定义的方法。
在注销的时候,记得也把通知给注销掉哦。。。。。
*/
// now playing
[notificationCenter addObserver:self
selector:@selector(handle_NowPlayingItemChanged:)
name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:_myPlayer];
// playback state change
[notificationCenter addObserver:self
selector:@selector(handle_PlaybackStateChanged:)
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:_myPlayer];
[player beginGeneratingPlaybackNotifications]; // player set the notification
然后就可以开始播放了。。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/**
遵循了 `MPMediaPlayback` Delegate,
*/
[player play]; // 播放
[_myPlayer pause]; // 暂停
[_myPlayer stop]; // 停止
[_myPlayer skipToBeginning]; // 重新开始播放
[_myPlayer skipToNextItem]; // 下一首
[_myPlayer skipToPreviousItem]; // 上一首
... (还有一些都在这个实例里面的)
到这里基本就没有了,一个简单的没有界面的播放器就完成了
更多关于 Media Query
Using a media query to access the device iPod library
上文我们得到的 MPMediaQuery 的实例 mySong.和图中的 myQuery 一样的。
media query
提供了一个对于 iPod Library
的一个搜索描述,告诉数据库如何去获取相应的 media item
,并且还有如何组织这些 item
有两个配置属性
- The `filter` is the description of what to retrieve. The filter is optional; a filterless query matches the entire iPod library.
- The `grouping` type is an optional key that specifies the arrangement to use for retrieved collections of media items.
更多关于播放队列
有两种方法去设置播放的队列内容
Use a media item
collection
1
2
3
4/**
musicPlayer 是 MPMusicPlayerController 的实例
*/
[musicPlayer setQueueWithItemCollection: userMediaItemCollection];Use a
media query
, which implicitly defines a collection1
2
3
4/**
musicPlayer 是 MPMusicPlayerController 的实例
*/
[musicPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];
更多关于使用iPod Library
- 如何使用更好的使用iPod Library
参考官方文档
关于如何使用item picker
- 使用 Item Picker
参考链接信息
iPod Library Access Programming Guide