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

    /**
* 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. 第九十一节,html5+css3pc端固定布局,完成首页

    html5+css3pc端固定布局,完成首页 此时我们的首页就完成了 首页效果 其他页面我就不做了,原理相同,做其他页面时将头尾css分离调用即可 大纲算法 我们看看大纲算法比较清晰,说明符合规则 h ...

  2. Tomcat 配置支持APR

    对ARP支持,需要安装以下库: APR library JNI wrappers for APR used by Tomcat (libtcnative) OpenSSL libraries 其中JN ...

  3. php 原生能力进阶

    <?php header("Content-type:text/html;charset=utf-8"); $arr=200; $result =($arr%2==0||$a ...

  4. HDU 2461 Rectangles#容斥原理

    http://acm.hdu.edu.cn/showproblem.php?pid=2461 题目很简单,但是由于询问数M可以很大,所以容易超时,这道题学到了在结构体里面写函数的方法,这样子效率更高, ...

  5. hdu 5664 Lady CA and the graph(树的点分治+容斥)

    题意: 给你一个有n个点的树,给定根,叫你找第k大的特殊链 .特殊的链的定义:u,v之间的路径,经过题给的根节点. 题解:(来自BC官方题解) 对于求第k大的问题,我们可以通过在外层套一个二分,将其转 ...

  6. mysql导出数据表结构,必须退出mysql命令.重新使用msyqldump命令

    只导出数据库中所有表结构(-d 减去数据) 导出所有表结构和数据 mysqldump -uroot --default-character-set=utf8 -p123-d必须空格good>H: ...

  7. sqlplus登录Oracle时ORA-01017: invalid username/password; logon denied的错误

    今天用scott用户登录Oracle数 据库时,竟然出现了ORA-01017: invalid username/password; logon denied错误,原以为是因为我的scott用户没有解 ...

  8. ubuntu下安装BeyondCompare比较工具

    在ubuntu12.04下使用比较工具,这里参考了网上的一个方法来安装BeyondCompare3 首先,下载相关软件: 这里选择了BCompare: http://www.scootersoftwa ...

  9. CCleaner(著名清理软件) 5.21.5700 中文免费版(著名清理软件) 5.21.5700 中文免费版

    软件名称: CCleaner(著名清理软件) 5.21.5700 中文免费版著名清理软件(CCleaner)软件语言: 多国语言授权方式: 免费软件运行环境: Win 32位/64位软件大小: 5.6 ...

  10. go pkg

    fmt Scanln用来读取输入数据 示例: package main import ( "fmt" "os" "time" ) func ...