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

    /**
* 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. php 生成.txt文件

    $content =array('color'=> array('blue','red','green'),'size'=> array('small','medium','large') ...

  2. Glusterfs[转]

    原文地址:http://support.huawei.com/ecommunity/bbs/10253434.html 1.      GlusterFS概述 GlusterFS是Scale-Out存 ...

  3. bzoj1417: Pku3156 Interconnect

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1417 1417: Pku3156 Interconnect Time Limit: 10 ...

  4. GROUP_CONCAT()多条数据.拼接字符串 最大长度1024

    mysql cmd show variables like "group_concat_max_len"; concat  合并多条数据 成一个逗号分隔的字符串 查找mysql的配 ...

  5. sql新建数据库表,及添加多个主键

    create table tb_Modules(module_Id int identity(1,1) primary key,  (自增)model_Name varchar(50) not nul ...

  6. 单尺度二维离散小波重构(逆变换)idwt2

    clc,clear all,close all; load woman; %单尺度二维离散小波分解.分解小波函数haar [cA,cH,cV,cD]=dwt2(X,'haar'); %单尺度二维离散小 ...

  7. NSCondition

    一.NSCondition是对条件变量和互斥量的一个封装,用于线程之间的同步. 其中的互斥量用于保护对条件变量的修改,条件变量变化以信号量的方式通知其它线程实现线程之间的同步. 二.NSConditi ...

  8. 测试word 2013发布blog

    测试图片和各种格式   使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 (亲测可用)   我的一些感受: 缺点 (1) Word201 ...

  9. jq选择器对象筛选

    1.选择对象 1).基本 ·#id 根据给定的ID匹配一个元素.例如:$("#id")·element 根据给定的元素名匹配所有元素.例如:$("div")·. ...

  10. Python 学习笔记7

    今天很残酷,明天很残酷,后天很美好.但绝大多数人会死在明天的路上.只有真正的勇士才能看到后天的太阳! Python学习是枯燥的.但是一定要坚持! 昨天学习了数据结构和模块. 今天学习输入和输出.错误与 ...