我是靠谱客的博主 激动白猫,最近开发中收集的这篇文章主要介绍ios获取本地音乐库音乐,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> 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
播放状态 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  
    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];  
}  
</span>  


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

 

  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 (@"tt%@", 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 (@"tt%@", 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

最后

以上就是激动白猫为你收集整理的ios获取本地音乐库音乐的全部内容,希望文章能够帮你解决ios获取本地音乐库音乐所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部