iOS音乐播放器相关
iOS音乐播放器框架主要有两大类:AvPlayer、AvaudioPlayer
AvPlayer 能播放本地及网络歌曲
AvaudioPlayer 能播放本地歌曲、有相关代理方法(其实也可以播放网络歌曲,只不过该播放器播放网络歌曲是先将歌曲下载下来再进行播放)
下面记录一下相关要用到的方法
1.获取本地歌曲库(ipod路径)歌曲
// 读取本地音乐
MPMediaPropertyPredicate *albumNamePredicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType];
[everything addFilterPredicate:albumNamePredicate];
_itemsFromGenericQuery = [everything items];
2.锁屏状态下的歌曲名、歌手名、专辑图设置
//锁屏
- (void)configPlayingInfo
{
if (NSClassFromString(@"MPNowPlayingInfoCenter"))
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
if (_songName&&_singer) {
[dict setObject:_songName forKey:MPMediaItemPropertyTitle];//歌曲名设置
[dict setObject:_singer forKey:MPMediaItemPropertyArtist];//歌手名设置
if (![imgURL isEqualToString:@"专辑默认背景"] && imgURL.length > 0 )
{
[dict setObject:[[MPMediaItemArtwork alloc] initWithImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgURL] options:NSUTF8StringEncoding error:nil]]] forKey:MPMediaItemPropertyArtwork];//专辑图片设置
}
else
{
[dict setObject:[[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"专辑默认背景"]] forKey:MPMediaItemPropertyArtwork];//专辑图片设置
}
}
[dict setObject:[NSNumber numberWithDouble:CMTimeGetSeconds(self.avplayer.currentItem.currentTime)] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime]; //音乐当前已经播放时间
[dict setObject:[NSNumber numberWithFloat:1.0] forKey:MPNowPlayingInfoPropertyPlaybackRate];//进度光标的速度(这个随自己的播放速率调整,默认是原速播放)
[dict setObject:[NSNumber numberWithDouble:CMTimeGetSeconds(self.avplayer.currentItem.duration)] forKey:MPMediaItemPropertyPlaybackDuration];//歌曲总时间设置
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];
}
}
3.如果播放的歌曲为网络歌曲,则要设置一下后台控制打断的事件,否则无法进行正常的自动下一曲
//后台播放相关,且将蓝牙重新连接
-(void)setAudioSession{
//AudioSessionInitialize用于控制打断
//这种方式后台,可以连续播放非网络请求歌曲,遇到网络请求歌曲就废,需要后台申请task
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
BOOL success = [session setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
if (!success)
{
return;
}
NSError *activationError = nil;
success = [session setActive:YES error:&activationError];
if (!success)
{
return;
}
}
4.因为AvPlayer是没有队列这个概念,只能播放一首歌曲,所以每次播放完毕都监听一次以便进行自动下一曲
//监听是否播放完毕
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
//结束播放
- (void)playEnd:(id)sender
{
[self next];(next是私有方法)
return;
}
5.在播放器程序中一点小的心得
如果要让播放器接受远程控制则要设置第一响应状态
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
//设置为第一响应
-(BOOL)canBecomeFirstResponder{
return YES;
}
后台控制(耳机线控制)
-(void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent;
播放器最好设置成一个单例,还有一种思路是将整个播放器作为一个工具,这样可以直接调用上下曲等方法
iOS音乐播放器相关的更多相关文章
- 一个功能齐全的IOS音乐播放器应用源码
该源码是在ios教程网拿过来的,一个不错的IOS音乐播放器应用源码,这个是我当时进公司时 我用了一晚上写的 图片都是在别的地方扒的,主要是歌词同步,及上一曲,下一曲,功能齐全了 ,大家可以学习一下吧 ...
- 卡拉OK效果的实现-iOS音乐播放器
自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...
- ios音乐播放器demo
闲暇时间,写了一个音乐播放器. 个人认为,基于Demo 的学习是最有效果的. 想学习的同学,欢迎下载.知识,只有在传播的时候才有价值. 不懂之处,欢迎留言询问,将热情解答. 运行图 项目结构图 Git ...
- iOS - 音乐播放器需要获取音乐文件的一些数据信息(封装获取封面图片的类)
// // AVMetadataInfo.h // AVMetadata // // Created by Wengrp on 15/10/27. // Copyright © 2015年 Wengr ...
- iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码
iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...
- iOS开发拓展篇—音频处理(音乐播放器1)
iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如 ...
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...
- iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
iOS精选源码 微信自定义搜索框实现 一个商城Demo,持续更新中 在Object-C中学习数据结构与算法之排序算法 iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果 XLsn0wPushTimePi ...
- iOS开发拓展篇—音频处理(音乐播放器2)
iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 ...
随机推荐
- JavaScript语言精粹(读书笔记)
第一章 精华 1,JavaScript的函数(主要)基于词法作用域(lexical scoping)的顶级对象.强类型语言允许编译器在编译时检测错误,但弱类型很自由,无需建立复杂的类层次,不用做强制造 ...
- MySQL学习笔记之视图
视图是对磁盘上保存的表数据的抽象,即抽取一个表或多个表的部分行或列的数据,展示给使用者. 首先列举下MySQL中最简单的对视图操作的语法: 1.创建视图: create view 视图名 as sel ...
- mysqldump: Got error: 1142: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'accounts' when using LOCK TABLES
AutoMySQLBackup备份时,出现mysqldump: Got error: 1142: SELECT, LOCK TABLES command denied to user 'root'@' ...
- winform窗体(五)——布局方式
一.默认布局 ★可以加panel,也可以不加: ★通过鼠标拖动控件的方式,根据自己的想法布局.拖动控件的过程中,会有对齐的线,方便操作: ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整 ...
- 终于开始用github了
一直以来,github的大名就如雷贯耳.虽然我半年多前就从了解到了这个神奇的网站,而且趁着当时的一时兴趣注册了账户,但是对于那时候的我来说这个网站还是太复杂了点,毕竟半年前的我还没有开始写代码啊,所以 ...
- windows系统快捷操作の高级篇
上次介绍了windows系统上几个比较好用的软件和系统快捷键,虽然有些很方便,但是毕竟还是太少了,而且无法自定义专属于自己的快捷键.所以我写了这么一篇教程,主要介绍两个神器:windows平台上的au ...
- jstl中格式化时间戳
在jsp页面中使用jstl标签将long型的时间戳转换为格式化后的时间字符串 1.通过<jsp:useBean /> 导入java.util.Date类2.通过<jsp:setPro ...
- java实现基于activeMQ的消息推送
一. 准备工作 1. 点击此下载相关的第三方jar包,并在工程中引用 二. spring配置文件:application.xml <?xml version="1.0" en ...
- Centos下yum安装PHP
添加 yum 源 Centos 6.x 的源 # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6 ...
- 【CSS】其他CSS属性和特性
1. 设置元素的颜色和透明度 前面有介绍CSS颜色的各种用法,如 background-color属性.boder-color属性等.还有另外两个与颜色有关的属性. 1.1 设置前景色 color属性 ...