话不多说,直接上代码,代码中详细介绍了如何初始化,并设置一些常用的属性。

    /**
* 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];
}

AVFoundation(二)---MPMusicPlayerController的更多相关文章

  1. Swift AVFoundation 二维码扫描和生成

    项目最终不须要支持iOS6了(泪崩),在二维码扫描这一块,可以全然的放弃ZXing库,改用系统的AVFoundation了,拿swift写了个Demo,效果例如以下: github地址:点这里 有关A ...

  2. iOS使用AVFoundation实现二维码扫描(ios7以上)——转载

    关于二维码扫描有不少优秀第三方库: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use ...

  3. iOS使用AVFoundation实现二维码扫描

    原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应 ...

  4. 【转】 iOS使用AVFoundation实现二维码扫描

    原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应 ...

  5. Swift:使用系统AVFoundation实现二维码扫描和生成

    系统提供的AVCaptureSession仅仅适用于iOS7.0以上的系统.之前的请用Zbar来替代 下载地址:http://download.csdn.net/detail/huobanbengku ...

  6. AVFoundation 框架初探究(二)

    接着第一篇总结 系列第一篇地址:AVFoundation 框架初探究(一) 在第一篇的文章中,我们总结了主要有下面几个点的知识: 1.对AVFoundation框架整体的一个认识 2.AVSpeech ...

  7. iOS原生的AVFoundation扫描二维码/条形码

    #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputO ...

  8. iOS 原生库(AVFoundation)实现二维码扫描,封装的工具类,不依赖第三方库,可高度自定义扫描动画及界面(Swift 4.0)

    Create QRScanner.swift file // // QRScanner.swift // NativeQR // // Created by Harvey on 2017/10/24. ...

  9. iOS 生成二维码

    首先先下载生成二维码的支持文件 libqrencode 添加依赖库 CoreGraphics.framework. QuartzCore.framework.AVFoundation.framewor ...

随机推荐

  1. Counting Stars

    Counting Stars 题目链接:http://acm.xidian.edu.cn/problem.php?id=1177 离线+一维树状数组 一眼扫过去:平面区间求和,1e6的数据范围,这要h ...

  2. POIXV Permutation

    Description Multiset is a mathematical object similar to a set, but each member of a multiset may ha ...

  3. cobaltstrike3.5使用记录

    一.服务器搭建与连接(1)团队服务器上: sudo ./teamserver 服务器IP 连接密码 (VPS的话要写外网ip,并且可以进行端口映射,默认使用50050端口) 但是这个一关闭团队服务器也 ...

  4. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  5. 3、Hibernate三态间的转换

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  6. Entity Framework Code First -- Migrations 迁移

    在开始使用迁移(Migrations)之前,我们需要一个 Project 和一个 Code First Model, 对于本文将使用典型的 Blog 和 Post 模型 创建一个新的控制台应用程序 M ...

  7. AOE 网络

    1.定义 如果在无向环的带权有向图中 - 用有向边表示一个工程中的活动 - 用边上的权值表示活动的持续时间 - 用顶点表示事件 则这样的有向图叫做用边表示活动的网络,简称AOE网络 AOE在工程方面非 ...

  8. FZU 1894 志愿者选拔 单调队列

    训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...

  9. JavaScript的一些流行的框架

    1.Underscore.js   扩展了很多原生js没有的方法,如集合 数组 对象 函数的一些基础和衍生方法,简单实用!2.Backbone.js   前段js代码的一个MVC框架,正在学习来着

  10. pgadmin3 新建服务器出现错误 Peer authentication failed for user "postgres" 的解决办法

    转自:http://blog.csdn.net/tingyuanss/article/details/43763899 用pgadmin3 新建服务器出现错误 Peer authentication ...