话不多说,直接上代码,代码中详细介绍了如何初始化,并设置一些常用的属性。
/** * MPMusicPlayerController用于播放音乐库中的音乐 */ /** * 初始化MPMusicPlayerController,类方法 + (MPMusicPlayerController *)applicationMusicPlayer; 获取应用播放器,注意此类播放器无法在后台播放 + (MPMusicPlayerController *)systemMusicPlayer 获取系统播放器,支持后台播放 */ MPMusicPlayerController *musicplayervc = [MPMusicPlayerController systemMusicPlayer]; /** * MPMusicPlayerController的对象属性 */ //@property (nonatomic, readonly) MPMusicPlaybackState playbackState /* 播放器状态,枚举类型: MPMusicPlaybackStateStopped:停止播放 MPMusicPlaybackStatePlaying:正在播放 MPMusicPlaybackStatePaused:暂停播放 MPMusicPlaybackStateInterrupted:播放中断 MPMusicPlaybackStateSeekingForward:向前查找 MPMusicPlaybackStateSeekingBackward:向后查找 */ if (musicplayervc.playbackState == MPMusicPlaybackStateStopped) { NSLog(@"停止播放"); } /* @property (nonatomic) MPMusicRepeatMode repeatMode 重复模式,枚举类型: MPMusicRepeatModeDefault:默认模式,使用用户的首选项(系统音乐程序设置) MPMusicRepeatModeNone:不重复 MPMusicRepeatModeOne:单曲循环 MPMusicRepeatModeAll:在当前列表内循环 */ musicplayervc.repeatMode = MPMusicRepeatModeNone; /* @property (nonatomic) MPMusicShuffleMode shuffleMode 随机播放模式,枚举类型: MPMusicShuffleModeDefault:默认模式,使用用户首选项(系统音乐程序设置) MPMusicShuffleModeOff:不随机播放 MPMusicShuffleModeSongs:按歌曲随机播放 MPMusicShuffleModeAlbums:按专辑随机播放 */ musicplayervc.shuffleMode = MPMusicShuffleModeOff; /* @property (nonatomic, copy) MPMediaItem *nowPlayingItem 正在播放的音乐项 */ MPMediaItem *item = musicplayervc.nowPlayingItem; /* @property (nonatomic, readonly) NSUInteger indexOfNowPlayingItem 当前正在播放的音乐在播放队列中的索引 */ NSUInteger index = musicplayervc.indexOfNowPlayingItem; /* @property(nonatomic, readonly) BOOL isPreparedToPlay 是否准好播放准备 */ BOOL isOK = musicplayervc.isPreparedToPlay; /* @property(nonatomic) NSTimeInterval currentPlaybackTime 当前已播放时间,单位:秒 */ NSTimeInterval currentTime = musicplayervc.currentPlaybackTime; /* @property(nonatomic) float currentPlaybackRate 当前播放速度,是一个播放速度倍率,0表示暂停播放,1代表正常速度 */ float playrate = musicplayervc.currentPlaybackRate; /** * 常用的对象方法 */ /* - (void)setQueueWithQuery:(MPMediaQuery *)query 使用媒体队列设置播放源媒体队列 - (void)setQueueWithItemCollection:(MPMediaItemCollection *)itemCollection 使用媒体项集合设置播放源媒体队列 - (void)skipToNextItem 下一曲 - (void)skipToBeginning 从起始位置播放 - (void)skipToPreviousItem 上一曲 - (void)beginGeneratingPlaybackNotifications 开启播放通知,注意不同于其他播放器,MPMusicPlayerController要想获得通知必须首先开启,默认情况无法获得通知 - (void)endGeneratingPlaybackNotifications 关闭播放通知 - (void)prepareToPlay 做好播放准备(加载音频到缓冲区),在使用play方法播放时如果没有做好准备回自动调用该方法 - (void)play 开始播放 - (void)pause 暂停播放 - (void)stop 停止播放 - (void)beginSeekingForward 开始向前查找(快进) - (void)beginSeekingBackward 开始向后查找(快退) - (void)endSeeking 结束查找 */ /* 通知: MPMusicPlayerControllerPlaybackStateDidChangeNotification 播放状态改变 MPMusicPlayerControllerNowPlayingItemDidChangeNotification 当前播放音频改变 MPMusicPlayerControllerVolumeDidChangeNotification 声音大小改变 MPMediaPlaybackIsPreparedToPlayDidChangeNotification 准备好播放 */
举个例子:下边代码是写了一个播放系统音乐的功能
#import "ViewController.h" #import <MediaPlayer/MediaPlayer.h> @interface ViewController ()<MPMediaPickerControllerDelegate> /** * 媒体选择控制器 */ @property (strong,nonatomic) MPMediaPickerController *mediaPicker; /** * 音乐播放器 */ @property (strong,nonatomic) MPMusicPlayerController *musicPlayer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } /** * 获得音乐播放器 */ -(MPMusicPlayerController *)musicPlayer{ if (!_musicPlayer) { _musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; _musicPlayer.repeatMode = MPMusicRepeatModeNone; //开启通知,否则监控不到MPMusicPlayerController的通知 [_musicPlayer beginGeneratingPlaybackNotifications]; //添加通知 [self addNotification]; } return _musicPlayer; } /** * 媒体选择器 */ -(MPMediaPickerController *)mediaPicker{ if (!_mediaPicker) { //初始化媒体选择器,这里设置媒体类型为音乐,其实这里也可以选择视频、广播等 _mediaPicker = [[MPMediaPickerController alloc]initWithMediaTypes:MPMediaTypeMusic]; //多选 _mediaPicker.allowsPickingMultipleItems = YES; _mediaPicker.prompt = @"请选择要播放的音乐"; //设置选择器代理 _mediaPicker.delegate = self; } return _mediaPicker; } /* 取得媒体队列 */ -(MPMediaQuery *)getLocalMediaQuery{ MPMediaQuery *mediaQueue = [MPMediaQuery songsQuery]; for (MPMediaItem * item in mediaQueue.items) { NSLog(@"标题:%@,%@",item.title,item.albumTitle); } return mediaQueue; } /* 取得媒体集合 */ -(MPMediaItemCollection *)getLocalMediaItemCollection{ MPMediaQuery *mediaQueue = [MPMediaQuery songsQuery]; NSMutableArray *arr = [NSMutableArray array]; for (MPMediaItem *item in mediaQueue.items) { [arr addObject:item]; NSLog(@"标题:%@,%@",item.title,item.albumTitle); } MPMediaItemCollection *mediaItemCollection = [[MPMediaItemCollection alloc]initWithItems:[arr copy]]; return mediaItemCollection; } #pragma mark - MPMediaPickerController代理 //选择完成 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{ MPMediaItem *mediaItem=[mediaItemCollection.items firstObject];//第一个播放音乐 //注意很多音乐信息如标题、专辑、表演者、封面、时长等信息都可以通过MPMediaItem的valueForKey:方法得到,但是从iOS7开始都有对应的属性可以直接访问 // NSString *title= [mediaItem valueForKey:MPMediaItemPropertyAlbumTitle]; // NSString *artist= [mediaItem valueForKey:MPMediaItemPropertyAlbumArtist]; // MPMediaItemArtwork *artwork= [mediaItem valueForKey:MPMediaItemPropertyArtwork]; //UIImage *image=[artwork imageWithSize:CGSizeMake(100, 100)];//专辑图片 NSLog(@"标题:%@,表演者:%@,专辑:%@",mediaItem.title ,mediaItem.artist,mediaItem.albumTitle); [self.musicPlayer setQueueWithItemCollection:mediaItemCollection]; [self dismissViewControllerAnimated:YES completion:nil]; } //取消选择 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - 通知 /** * 添加通知 */ -(void)addNotification{ NSNotificationCenter *notificationCenter=[NSNotificationCenter defaultCenter]; [notificationCenter addObserver:self selector:@selector(playbackStateChange:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:self.musicPlayer]; } /** * 播放状态改变通知 * * @param notification 通知对象 */ -(void)playbackStateChange:(NSNotification *)notification{ switch (self.musicPlayer.playbackState) { case MPMusicPlaybackStatePlaying: NSLog(@"正在播放...%@",self.musicPlayer.nowPlayingItem.title); break; case MPMusicPlaybackStatePaused: NSLog(@"播放暂停."); break; case MPMusicPlaybackStateStopped: NSLog(@"播放停止."); break; default: break; } } #pragma mark - UI事件 - (IBAction)selectClick:(UIButton *)sender { [self presentViewController:self.mediaPicker animated:YES completion:nil]; } - (IBAction)playClick:(UIButton *)sender { [self.musicPlayer play]; } - (IBAction)puaseClick:(UIButton *)sender { [self.musicPlayer pause]; } - (IBAction)stopClick:(UIButton *)sender { [self.musicPlayer stop]; } - (IBAction)nextClick:(UIButton *)sender { [self.musicPlayer skipToNextItem]; } - (IBAction)prevClick:(UIButton *)sender { [self.musicPlayer skipToPreviousItem]; }