博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios获取本地音乐库音乐
阅读量:7158 次
发布时间:2019-06-29

本文共 8842 字,大约阅读时间需要 29 分钟。

hot3.png

1.MPMediaItem 转换成 NSUrl

NSURL* assetUrl = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];

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播放状态 MPMusicPlaybackStateenum {   MPMusicPlaybackStateStopped,   MPMusicPlaybackStatePlaying,   MPMusicPlaybackStatePaused,   MPMusicPlaybackStateInterrupted,   MPMusicPlaybackStateSeekingForward,   MPMusicPlaybackStateSeekingBackward};typedef NSInteger MPMusicPlaybackState;播放控制方法– play– pause– stop– beginSeekingForward– beginSeekingBackward– endSeeking– skipToNextItem– skipToBeginning– skipToPreviousItem播放状态发生变化时可以发送通知– beginGeneratingPlaybackNotifications– endGeneratingPlaybackNotificationsMPMusicPlayerControllerPlaybackStateDidChangeNotification可以通过该通知来改变播放按钮的样式MPMusicPlayerControllerNowPlayingItemDidChangeNotificationMPMusicPlayerControllerVolumeDidChangeNotification

具体步骤

1.注册和开始发送通知

  1. Listing 2-1  Registering for and activating music player notifications  NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];     [notificationCenter      addObserver: self      selector:    @selector (handle_NowPlayingItemChanged:)      name:        MPMusicPlayerControllerNowPlayingItemDidChangeNotification      object:      musicPlayer];     [notificationCenter      addObserver: self      selector:    @selector (handle_PlaybackStateChanged:)      name:        MPMusicPlayerControllerPlaybackStateDidChangeNotification      object:      musicPlayer];     [musicPlayer beginGeneratingPlaybackNotifications];  Listing 2-2  Unregistering and deactivating music player notifications  [[NSNotificationCenter defaultCenter]      removeObserver: self      name:           MPMusicPlayerControllerNowPlayingItemDidChangeNotification      object:         musicPlayer];     [[NSNotificationCenter defaultCenter]      removeObserver: self      name:           MPMusicPlayerControllerPlaybackStateDidChangeNotification      object:         musicPlayer];     [musicPlayer endGeneratingPlaybackNotifications];  
    2.创建并配置一个Music Player
  1. Listing 2-3  Creating an application music player  MPMusicPlayerController* appMusicPlayer =      [MPMusicPlayerController applicationMusicPlayer];     [appMusicPlayer setShuffleMode: MPMusicShuffleModeOff];  [appMusicPlayer setRepeatMode: MPMusicRepeatModeNone];  Listing 2-4  Creating an iPod music player  MPMusicPlayerController* iPodMusicPlayer =      [MPMusicPlayerController iPodMusicPlayer];     if ([iPodMusicPlayer nowPlayingItem]) {      // Update the UI (artwork, song name, volume indicator, etc.)      //        to reflect the iPod state  }  

     

3.设置播放队列

  • – setQueueWithQuery:
  • – setQueueWithItemCollection:

4.控制播放

 

3.MPMediaPickerController的使用

- (IBAction)addSongsToMusicPlayer:(id)sender  {      MPMediaPickerController *mpController = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];      mpController.delegate = self;      mpController.prompt = @"Add songs to play";      mpController.allowsPickingMultipleItems = YES;            [self presentModalViewController:mpController animated:YES];      [mpController release];  }    

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

 

  1. #pragma mark - Media Picker Delegate Methods    - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection  {      [self.musicPlayer setQueueWithItemCollection:mediaItemCollection];      [self dismissModalViewControllerAnimated:YES];  }    - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker  {      [self dismissModalViewControllerAnimated:YES];  }

     

4.MPMediaItem

用此方法来获取item的metadata

 

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

 

NSString *const MPMediaItemPropertyTitle;                   

NSString *const MPMediaItemPropertyAlbumTitle;              

NSString *const MPMediaItemPropertyArtist;                 

 

 

5.MPMediaItemCollection

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

- (id) valueForProperty: (NSString *) property  

 

创建

  • + collectionWithItems:
  • – initWithItems:

属性

  •   items  property
  •   representativeItem  property
  •   count  property
  •   mediaTypes  property

6.MPMediaPlaylist

  1. MPMediaQuery *myPlaylistsQuery = [MPMediaQuery playlistsQuery];  NSArray *playlists = [myPlaylistsQuery collections];     for (MPMediaPlaylist *playlist in playlists) {      NSLog (@"%@", [playlist valueForProperty: MPMediaPlaylistPropertyName]);         NSArray *songs = [playlist items];      for (MPMediaItem *song in songs) {          NSString *songTitle =              [song valueForProperty: MPMediaItemPropertyTitle];          NSLog (@"\t\t%@", songTitle);      }  }  

     

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.

 

获取全部歌曲

MPMediaQuery *everything = [[MPMediaQuery alloc] init];   NSLog(@"Logging items from a generic query...");  NSArray *itemsFromGenericQuery = [everything items];  for (MPMediaItem *song in itemsFromGenericQuery) {      NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];      NSLog (@"%@", songTitle);  }  

 

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

 

  1. MPMediaPropertyPredicate *artistNamePredicate =      [MPMediaPropertyPredicate predicateWithValue: @"Happy the Clown"                                       forProperty: MPMediaItemPropertyArtist];     MPMediaQuery *myArtistQuery = [[MPMediaQuery alloc] init];  [myArtistQuery addFilterPredicate: artistNamePredicate];     NSArray *itemsFromArtistQuery = [myArtistQuery items];  

     

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

  1. MPMediaPropertyPredicate *artistNamePredicate =      [MPMediaPropertyPredicate predicateWithValue: @"Sad the Joker"                                       forProperty: MPMediaItemPropertyArtist];     MPMediaPropertyPredicate *albumNamePredicate =      [MPMediaPropertyPredicate predicateWithValue: @"Stair Tumbling"                                       forProperty: MPMediaItemPropertyAlbumTitle];     MPMediaQuery *myComplexQuery = [[MPMediaQuery alloc] init];     [myComplexQuery addFilterPredicate: artistNamePredicate];  [myComplexQuery addFilterPredicate: albumNamePredicate];  Listing 4-4  Applying multiple predicates when initializing a media query  NSSet *predicates =      [NSSet setWithObjects: artistNamePredicate, albumNamePredicate, nil];     MPMediaQuery *specificQuery =      [[MPMediaQuery alloc] initWithFilterPredicates: predicates];  Listing 4-5  Testing if a property key can be used for a media property predicate  if ([MPMediaItem canFilterByProperty: MPMediaItemPropertyGenre]) {      MPMediaPropertyPredicate *rockPredicate =          [MPMediaPropertyPredicate predicateWithValue: @"Rock"                                           forProperty: MPMediaItemPropertyGenre];      [query addFilterPredicate: rockPredicate];  }  Listing 4-6  Using grouping type to specify media item collections  MPMediaQuery *query = [[MPMediaQuery alloc] init];     [query addFilterPredicate: [MPMediaPropertyPredicate                                 predicateWithValue: @"Moribund the Squirrel"                                        forProperty: MPMediaItemPropertyArtist]];  // Sets the grouping type for the media query  [query setGroupingType: MPMediaGroupingAlbum];     NSArray *albums = [query collections];  for (MPMediaItemCollection *album in albums) {      MPMediaItem *representativeItem = [album representativeItem];      NSString *artistName =          [representativeItem valueForProperty: MPMediaItemPropertyArtist];      NSString *albumName =          [representativeItem valueForProperty: MPMediaItemPropertyAlbumTitle];      NSLog (@"%@ by %@", albumName, artistName);         NSArray *songs = [album items];      for (MPMediaItem *song in songs) {          NSString *songTitle =              [song valueForProperty: MPMediaItemPropertyTitle];          NSLog (@"\t\t%@", songTitle);      }  }  

     

 

 

query的一些简便构造方法

专辑封面的使用

 

Listing 4-7  Displaying album artwork for a media item  MPMediaItemArtwork *artwork =      [mediaItem valueForProperty: MPMediaItemPropertyArtwork];  UIImage *artworkImage =      [artwork imageWithSize: albumImageView.bounds.size];  if (artworkImage) {      albumImageView.image = artworkImage;  } else {      albumImageView.image = [UIImage imageNamed: @"noArtwork.png"];  }  

转载于:https://my.oschina.net/mexiaobai1315/blog/740580

你可能感兴趣的文章
设置电脑间指定用户共享
查看>>
测试一下。
查看>>
kvm(七)客户机vm主机磁盘扩容
查看>>
微软Silverlight Analytics Framework(开源分析框架)
查看>>
Nginx如何反向代理网站和设置虚拟主机
查看>>
【Linux系统安装】之Centos 6.5包组安装建议
查看>>
congst与指针
查看>>
一种测试方向的探讨-基于模型测试调研引发的思考 - 3
查看>>
Exchange 2007的自动发现
查看>>
考考你:为栈实现高效的max操作
查看>>
基于OHCI的USB主机 —— USB标准请求
查看>>
Mysql数据库的使用总结之Innodb简介(二)
查看>>
剖析ASP.NET2.0站点导航功能之建立导航
查看>>
Android平台通用安全问题分析及策略(一)
查看>>
安装Exchange2010步骤
查看>>
SQL Server 2005群集更换存储
查看>>
Win2003下Exchange2003部署图解之七
查看>>
DELL 32位诊断工具PEDIAGS使用
查看>>
mysql备份方案
查看>>
统一沟通-技巧-12-Lync-CX600-3000-5000-配置-intranet
查看>>