概述
2019独角兽企业重金招聘Python工程师标准>>>
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.注册和开始发送通知
-
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
-
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>
主要是设置代理和选择多媒体类型,然后通过代理方法来获取选中的歌曲
-
#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
- - (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
-
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”的艺术家的歌曲
-
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"专辑
-
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获取本地音乐库音乐所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复