ios獲取音樂庫信息

1.訪問音樂庫的兩種方法,以下圖

(只能訪問音頻文件,如music,podcast,audiobook等)app

2.MPMusicPlayerController的使用

有兩種播放器能夠選擇,一種是application music player,另一種是iPod music player。ui

第一種播放器是一種內部播放器,當程序對出後中止播放;而第二種播放器則與iPod播放器內的信息相關,退出以後不會中止播放。獲取方式以下:spa

 

  • + applicationMusicPlayer代理

  • + iPodMusicPlayerorm

 

播放以前須要設置播放器的播放隊列server

  • – setQueueWithQuery:隊列

  • – setQueueWithItemCollection:ip

管理播放模式和播放狀態的一些屬性ci

  •   currentPlaybackTime  propertyrem

  •   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. }  

相關文章
相關標籤/搜索