文档章节

ios获取音乐库信息

mahb520
 mahb520
发布于 2014/10/13 17:28
字数 986
阅读 672
收藏 4
点赞 0
评论 0

1.访问音乐库的两种方法,如下图

(只能访问音频文件,如music,podcast,audiobook等)

2.MPMusicPlayerController的使用

有两种播放器可以选择,一种是application music player,另外一种是iPod music player。

第一种播放器是一种内部播放器,当程序对出后停止播放;而第二种播放器则与iPod播放器内的信息相关,退出之后不会停止播放。获取方式如下:

 

  • + applicationMusicPlayer

  • + iPodMusicPlayer

 

播放之前需要设置播放器的播放队列

  • – setQueueWithQuery:

  • – setQueueWithItemCollection:

管理播放模式和播放状态的一些属性

  •   currentPlaybackTime  property

  •   nowPlayingItem  property

  •   playbackState  property

  •   repeatMode  property

  •   shuffleMode  property

  •   volume  property

播放状态 MPMusicPlaybackState

enum {

   MPMusicPlaybackStateStopped,

   MPMusicPlaybackStatePlaying,

   MPMusicPlaybackStatePaused,

   MPMusicPlaybackStateInterrupted,

   MPMusicPlaybackStateSeekingForward,

   MPMusicPlaybackStateSeekingBackward

};

typedef NSInteger MPMusicPlaybackState;


播放控制方法

  • – play

  • – pause

  • – stop

  • – beginSeekingForward

  • – beginSeekingBackward

  • – endSeeking

  • – skipToNextItem

  • – skipToBeginning

  • – skipToPreviousItem

播放状态发生变化时可以发送通知

  • – beginGeneratingPlaybackNotifications

  • – endGeneratingPlaybackNotifications

MPMusicPlayerControllerPlaybackStateDidChangeNotification

可以通过该通知来改变播放按钮的样式

MPMusicPlayerControllerNowPlayingItemDidChangeNotification

MPMusicPlayerControllerVolumeDidChangeNotification

 

具体步骤

1.注册和开始发送通知

 

  1. Listing 2-1  Registering for and activating music player notifications  

  2. NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];  

  3.    

  4. [notificationCenter  

  5.     addObserver: self  

  6.     selector:    @selector (handle_NowPlayingItemChanged:)  

  7.     name:        MPMusicPlayerControllerNowPlayingItemDidChangeNotification  

  8.     object:      musicPlayer];  

  9.    

  10. [notificationCenter  

  11.     addObserver: self  

  12.     selector:    @selector (handle_PlaybackStateChanged:)  

  13.     name:        MPMusicPlayerControllerPlaybackStateDidChangeNotification  

  14.     object:      musicPlayer];  

  15.    

  16. [musicPlayer beginGeneratingPlaybackNotifications];  

 

 

  1. Listing 2-2  Unregistering and deactivating music player notifications  

  2. [[NSNotificationCenter defaultCenter]  

  3.     removeObserver: self  

  4.     name:           MPMusicPlayerControllerNowPlayingItemDidChangeNotification  

  5.     object:         musicPlayer];  

  6.    

  7. [[NSNotificationCenter defaultCenter]  

  8.     removeObserver: self  

  9.     name:           MPMusicPlayerControllerPlaybackStateDidChangeNotification  

  10.     object:         musicPlayer];  

  11.    

  12. [musicPlayer endGeneratingPlaybackNotifications];  


2.创建并配置一个Music Player

 

 

  1. Listing 2-3  Creating an application music player  

  2. MPMusicPlayerController* appMusicPlayer =  

  3.     [MPMusicPlayerController applicationMusicPlayer];  

  4.    

  5. [appMusicPlayer setShuffleMode: MPMusicShuffleModeOff];  

  6. [appMusicPlayer setRepeatMode: MPMusicRepeatModeNone];  

 

 

  1. Listing 2-4  Creating an iPod music player  

  2. MPMusicPlayerController* iPodMusicPlayer =  

  3.     [MPMusicPlayerController iPodMusicPlayer];  

  4.    

  5. if ([iPodMusicPlayer nowPlayingItem]) {  

  6.     // Update the UI (artwork, song name, volume indicator, etc.)  

  7.     //        to reflect the iPod state  

  8. }  


3.设置播放队列

 

 

  • – setQueueWithQuery:

  • – setQueueWithItemCollection:

4.控制播放


 

 

3.MPMediaPickerController的使用

 

  1. <span style="font-size:18px;">- (IBAction)addSongsToMusicPlayer:(id)sender  

  2. {  

  3.     MPMediaPickerController *mpController = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];  

  4.     mpController.delegate = self;  

  5.     mpController.prompt = @"Add songs to play";  

  6.     mpController.allowsPickingMultipleItems = YES;  

  7.       

  8.     [self presentModalViewController:mpController animated:YES];  

  9.     [mpController release];  

  10. }  

  11. </span>  


主要是设置代理和选择多媒体类型,然后通过代理方法来获取选中的歌曲

 

 

 

  1. <span style="font-size:18px;">#pragma mark - Media Picker Delegate Methods  

  2.   

  3. - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection  

  4. {  

  5.     [self.musicPlayer setQueueWithItemCollection:mediaItemCollection];  

  6.     [self dismissModalViewControllerAnimated:YES];  

  7. }  

  8.   

  9. - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker  

  10. {  

  11.     [self dismissModalViewControllerAnimated:YES];  

  12. }</span>  


 

4.MPMediaItem

用此方法来获取item的metadata

  1. - (id) valueForProperty: (NSString *) property  

 

NSString *const MPMediaItemPropertyTitle;                   

NSString *const MPMediaItemPropertyAlbumTitle;              

NSString *const MPMediaItemPropertyArtist;                 

 

 

5.MPMediaItemCollection

collection是一组有序的item集合,可用同样的方法来获取collection的metadata

  1. - (id) valueForProperty: (NSString *) property  

 

创建

  • + collectionWithItems:

  • – initWithItems:

属性

  •   items  property

  •   representativeItem  property

  •   count  property

  •   mediaTypes  property

6.MPMediaPlaylist

  1. MPMediaQuery *myPlaylistsQuery = [MPMediaQuery playlistsQuery];  

  2. NSArray *playlists = [myPlaylistsQuery collections];  

  3.    

  4. for (MPMediaPlaylist *playlist in playlists) {  

  5.     NSLog (@"%@", [playlist valueForProperty: MPMediaPlaylistPropertyName]);  

  6.    

  7.     NSArray *songs = [playlist items];  

  8.     for (MPMediaItem *song in songs) {  

  9.         NSString *songTitle =  

  10.             [song valueForProperty: MPMediaItemPropertyTitle];  

  11.         NSLog (@"\t\t%@", songTitle);  

  12.     }  

  13. }  


 

7.MPMediaQuery

需要设置两个属性: filter  and  grouping type

filter描述查询内容,grouping type 描述返回内容的排列方式

 

 

查询可以获取items,也可以获取collections

  • When you ask for items, the query returns a collection containing all the items that match the filter. The items are in “natural” order, meaning that they are ordered as iTunes shows them on the desktop.

  • When you ask for collections, the media query employs not only its filter but also its grouping type.


 

获取全部歌曲

  1. MPMediaQuery *everything = [[MPMediaQuery alloc] init];   

  2. NSLog(@"Logging items from a generic query...");  

  3. NSArray *itemsFromGenericQuery = [everything items];  

  4. for (MPMediaItem *song in itemsFromGenericQuery) {  

  5.     NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];  

  6.     NSLog (@"%@", songTitle);  

  7. }  

 

获取名为“Happy the Clown”的艺术家的歌曲

  1. MPMediaPropertyPredicate *artistNamePredicate =  

  2.     [MPMediaPropertyPredicate predicateWithValue: @"Happy the Clown"  

  3.                                      forProperty: MPMediaItemPropertyArtist];  

  4.    

  5. MPMediaQuery *myArtistQuery = [[MPMediaQuery alloc] init];  

  6. [myArtistQuery addFilterPredicate: artistNamePredicate];  

  7.    

  8. NSArray *itemsFromArtistQuery = [myArtistQuery items];  


多个查找条件,查找名为"Sad the Joker"的艺术家的"Stair Tumbling"专辑

  1. MPMediaPropertyPredicate *artistNamePredicate =  

  2.     [MPMediaPropertyPredicate predicateWithValue: @"Sad the Joker"  

  3.                                      forProperty: MPMediaItemPropertyArtist];  

  4.    

  5. MPMediaPropertyPredicate *albumNamePredicate =  

  6.     [MPMediaPropertyPredicate predicateWithValue: @"Stair Tumbling"  

  7.                                      forProperty: MPMediaItemPropertyAlbumTitle];  

  8.    

  9. MPMediaQuery *myComplexQuery = [[MPMediaQuery alloc] init];  

  10.    

  11. [myComplexQuery addFilterPredicate: artistNamePredicate];  

  12. [myComplexQuery addFilterPredicate: albumNamePredicate];  

 

 

  1. Listing 4-4  Applying multiple predicates when initializing a media query  

  2. NSSet *predicates =  

  3.     [NSSet setWithObjects: artistNamePredicate, albumNamePredicate, nil];  

  4.    

  5. MPMediaQuery *specificQuery =  

  6.     [[MPMediaQuery alloc] initWithFilterPredicates: predicates];  


  1. Listing 4-5  Testing if a property key can be used for a media property predicate  

  2. if ([MPMediaItem canFilterByProperty: MPMediaItemPropertyGenre]) {  

  3.     MPMediaPropertyPredicate *rockPredicate =  

  4.         [MPMediaPropertyPredicate predicateWithValue: @"Rock"  

  5.                                          forProperty: MPMediaItemPropertyGenre];  

  6.     [query addFilterPredicate: rockPredicate];  

  7. }  

 

 

  1. Listing 4-6  Using grouping type to specify media item collections  

  2. MPMediaQuery *query = [[MPMediaQuery alloc] init];  

  3.    

  4. [query addFilterPredicate: [MPMediaPropertyPredicate  

  5.                                predicateWithValue: @"Moribund the Squirrel"  

  6.                                       forProperty: MPMediaItemPropertyArtist]];  

  7. // Sets the grouping type for the media query  

  8. [query setGroupingType: MPMediaGroupingAlbum];  

  9.    

  10. NSArray *albums = [query collections];  

  11. for (MPMediaItemCollection *album in albums) {  

  12.     MPMediaItem *representativeItem = [album representativeItem];  

  13.     NSString *artistName =  

  14.         [representativeItem valueForProperty: MPMediaItemPropertyArtist];  

  15.     NSString *albumName =  

  16.         [representativeItem valueForProperty: MPMediaItemPropertyAlbumTitle];  

  17.     NSLog (@"%@ by %@", albumName, artistName);  

  18.    

  19.     NSArray *songs = [album items];  

  20.     for (MPMediaItem *song in songs) {  

  21.         NSString *songTitle =  

  22.             [song valueForProperty: MPMediaItemPropertyTitle];  

  23.         NSLog (@"\t\t%@", songTitle);  

  24.     }  

  25. }  

 

 

query的一些简便构造方法



专辑封面的使用

 

  1. Listing 4-7  Displaying album artwork for a media item  

  2. MPMediaItemArtwork *artwork =  

  3.     [mediaItem valueForProperty: MPMediaItemPropertyArtwork];  

  4. UIImage *artworkImage =  

  5.     [artwork imageWithSize: albumImageView.bounds.size];  

  6. if (artworkImage) {  

  7.     albumImageView.image = artworkImage;  

  8. } else {  

  9.     albumImageView.image = [UIImage imageNamed: @"noArtwork.png"];  

  10. }  


© 著作权归作者所有

共有 人打赏支持
mahb520
粉丝 21
博文 73
码字总数 24908
作品 0
广州
项目经理
ZipperDown漏洞来了!微博、陌陌、快手等常用 iOS 应用恐要中招

雷锋网(公众号:雷锋网)消息,5月15日,盘古实验室对外宣布,他们在针对不同客户的 iOS 应用安全审计过程中,发现了一类通用的安全漏洞---ZipperDown漏洞。 10%的iOS应用可能受ZipperDow...

郭佳 ⋅ 05/15 ⋅ 0

iOS曝ZipperDown漏洞 快手、陌陌等均受影响

  【IT168 评论】智能手机作为大家日常生活中越来越不可分割的一部分,往往储存有用户的大量个人信息,一旦手机出现漏洞被黑客利用,那对于受害用户来讲将造成相当大的影响。   有些用户...

it168网站 ⋅ 05/17 ⋅ 0

ZipperDown漏洞简单分析及防护

0x00 序 盘古实验室在针对不同客户的iOS应用安全审计过程中,发现了一类通用的安全漏洞。该漏洞被发布在了[1]。经过盘古的分析,确认微博、陌陌、网易云音乐、QQ音乐、快手等流行应用受影响,另...

技术小能手 ⋅ 05/18 ⋅ 0

iOS小白点效果、打地鼠游戏、轮播效果、画板、富文本编辑器等源码

iOS精选源码 美团外卖商家点菜页面(http://www.code4app.com/thread-29383-1-1.html) 板书录制演示程序(http://www.code4app.com/thread-29384-1-1.html) 分类轮播、直播间礼物列表轮播 -- O...

sunnyaigd ⋅ 04/24 ⋅ 0

iOS逆向工程- 学习整理(工具详解)

前言 一、逆向工程的要求 具备丰富的 iOS 开发经验 最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理。 拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MVC模...

_小迷糊 ⋅ 05/11 ⋅ 0

如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊 ⋅ 05/26 ⋅ 0

iOS基于FreeStreamer的仿网易云音乐播放器

前言 前段时间写过一个基于VLCKit实现的网易云音乐播放demo-GKAudioPlayerDemo,以及3篇文章 iOS-VLCKit实现仿网易云音乐播放音乐(一) iOS-VLCKit实现仿网易云音乐播放音乐(二) iOS-VLCK...

QuintGao ⋅ 05/11 ⋅ 0

面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课 ⋅ 04/26 ⋅ 0

2018 一份"有点难"的iOS面试题(5年iOS开发)

序言: 之前一时兴致在本站上出过一份iOS的中级面试题,引起一些关注,不少同学表示对”隐藏关卡“感兴趣。升级版iOS面试题来了,目测难倒90%iOS程序员,目测一大波程序员撸着袖子在靠近。 ...

原来是泽镜啊 ⋅ 05/26 ⋅ 0

UISegmentedControl segmentedControl

一、简介 <UIControl-->UIView-->UIResponder-->NSObject 格式为 1-->初始化(作用) typedef NS_OPTIONS(NSUInteger, UIDataDetectorTypes) { UIDataDetector......

无邪8 ⋅ 05/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部