`
jguangyou
  • 浏览: 375769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios 获取音乐库音乐相关(转)

    博客分类:
  • iOS
 
阅读更多


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. }  
分享到:
评论
1 楼 123456789zss 2013-03-31  
这个可以查看本地有多少音乐吗,可以给一个小demo吗,万分感谢。。。1785008095@qq.com

相关推荐

    iOS 获取本地音乐文件

    在iOS平台上,获取本地音乐文件并进行播放是开发音视频应用的一个重要环节。这个过程涉及到多媒体框架、文件系统操作以及音频播放控制等多个方面。本文将详细介绍如何在iOS中实现这一功能,并提供相关知识点。 首先...

    iOS 获取手机的本地音乐

    在iOS开发中,获取手机本地音乐是常见的需求,这通常涉及到多媒体编程,特别是与Apple的Media Library服务交互。本文将详细介绍如何使用Objective-C或Swift语言来实现这一功能,以及涉及的相关知识点。 首先,我们...

    iOS 获取本地音乐Demo

    在iOS开发中,获取本地音乐是一项常见的需求,特别是在构建音乐播放类应用时。这个"iOS 获取本地音乐Demo"提供了一个示例,展示了如何访问并管理用户的设备音乐库。以下是关于这个主题的详细知识: 首先,我们需要...

    ios豆瓣音乐播放器 含图片、代码等资源

    在iOS平台上,开发一款音乐播放器是许多开发者和爱好者热衷的项目,特别是与知名服务如豆瓣音乐结合的播放器。本项目名为“ios豆瓣音乐播放器”,它提供了完整的源码和图片资源,旨在帮助开发者学习和理解如何构建...

    iOS获取唯一标识uuid

    iOS获取唯一标识,在不刷机的前提下,无论多次获取,还是卸载后重装程序,获取的 uuid 都不会发生改变

    iOS 音频时长获取不正确

    在iOS开发中,音频处理是一项常见的任务,尤其是在创建音乐应用或者需要播放、转换音频的场景。本篇文章将深入探讨在iOS中使用lame库进行音频转换为MP3格式时遇到的时长获取不准确的问题,并提供解决方案。 首先,...

    ios获取视频长度和当前播放时间

    在iOS开发中,获取视频长度和当前播放时间是多媒体应用中的常见需求,尤其是在视频播放器、社交媒体、在线教育等场景下。以下将详细介绍如何在iOS中实现这一功能,包括使用的框架、具体步骤以及代码示例。 ### 使用...

    ios 获取IP Mac地址

    在iOS开发中,获取设备的IP地址和MAC地址是常见的需求,这主要涉及到网络编程和系统接口调用。本文将详细讲解如何在iOS平台上获取这两种关键的网络标识。 首先,让我们了解一下IP地址和MAC地址的基本概念。IP地址...

    IOS获取设备名称

    本教程将详细讲解如何在iOS中获取设备名称,以及涉及到的相关知识点。 首先,我们需要理解iOS设备模型的表示方式。苹果设备的名称通常由一系列型号标识符组成,例如"iPhone6,1"或"iPad4,7"。这些标识符并不直接对应...

    iOS播放音乐库音乐 播放系统音乐 IPod音乐库音乐

    标题“iOS播放音乐库音乐 播放系统音乐 IPod音乐库音乐”所提及的核心技术点是利用iOS的媒体播放框架来访问并播放用户设备上的音乐库音乐,以及系统内置的音乐。这通常涉及到苹果的Media Player框架(MediaPlayer....

    iOS 获取本地ip和路由器ip

    在iOS开发中,获取本地IP和路由器IP是常见的需求,特别是在网络通信或者设备间互动的场景下。本文将深入探讨如何在iOS应用中实现这一功能,并介绍相关技术知识点。 首先,我们要了解网络接口(network interface)...

    IOS 获取最新设备型号方法

    IOS 获取最新设备型号及当前设备及app的信息方法

    iOS获取拼音首字母

    "iOS获取拼音首字母"这个话题正是围绕这一需求展开的。通过一行代码快速获取汉字拼音首字母,开发者可以轻松实现基于拼音的中文字符串排序,从而提供更符合用户习惯的界面体验。 首先,我们要了解iOS中实现这个功能...

    IOS-音乐播放器

    在iOS平台上开发一款音乐播放器是一项技术性强且充满挑战的任务,因为这涉及到音频处理、用户界面设计、多媒体库集成以及iOS平台的特定编程规范。以下是一些关于"iOS音乐播放器"开发的关键知识点: 1. **...

    IOS获取设备MAC地址及MD5加密

    在iOS开发中,有时我们需要获取设备的唯一标识符来实现特定功能,如用户跟踪或个性化设置。虽然UDID(Unique Device Identifier)曾是常见的选择,但出于隐私保护的原因,Apple在后来的iOS版本中禁止了直接访问UDID...

    iOS获取手机安装的所有应用信息(bundle id,icon,名称等)

    在iOS开发中,有时我们需要获取用户设备上安装的所有应用程序的相关信息,例如应用的bundle ID、图标(icon)、名称等。这个任务通常对于系统分析、数据分析或者个性化推荐等场景很有用。在提供的标题和描述中,提到...

    ios获取崩溃日志方法

    iOS 崩溃日志获取方法 iOS 崩溃日志获取是 iOS 开发和测试中非常重要的一步,能够帮助开发者和测试人员快速定位崩溃原因,提高应用程序的稳定性和可靠性。下面将详细介绍获取 iOS 崩溃日志的方法。 什么是崩溃日志...

    iOS 获取系键盘

    在iOS开发中,与键盘相关的交互是不可或缺的一部分。本文将深入探讨如何在iOS应用中获取并处理系统键盘,包括键盘的高度和弹出速度,以及如何实现与第三方键盘的兼容。 首先,我们需要理解iOS中的键盘机制。苹果...

    IOS自制音乐播放器

    【iOS自制音乐播放器】项目概述 iOS自制音乐播放器是一款专为苹果设备设计的应用程序,它能够提供本地音乐播放以及在线音乐流媒体服务。该播放器具备音乐下载功能,并支持断点续传,这意味着用户在下载过程中即使...

    ios获取手机系统信息源码

    在iOS开发中,获取设备的系统信息是一项常见的需求,这对于调试、日志记录以及提供个性化用户体验都至关重要。本文将深入探讨如何使用Objective-C(OC)语言来获取iPhone或iPad的系统版本号、MAC地址等关键数据信息...

Global site tag (gtag.js) - Google Analytics