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并设置跳转 ...
随机推荐
- 基于redis分布式缓存实现(新浪微博案例)
第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来 ...
- js自动完成
源代码来自于: http://down.51cto.com/data/921955 我做了一下修改. 要做一个自动完成的功能,又不想依赖一大堆的js脚本库,我要的是定制的,代码尽可能简洁,方便修改和 ...
- Dictionary摘抄
Dictionary,字典,键值对集合. 下面的代码示例创建一个空的带有字符串键的字符串 Dictionary,并使用 Add 方法添加一些元素.该示例演示在尝试添加重复的键时 Add 方法引发Arg ...
- ORACLE查看补丁出现“OPatch failed with error code 1”
案例场景: 在Oracle Linux Server release 5.7上安装完ORACLE 10g后,顺便将PSR(Patch Set Release)p681018 ...
- Yii2 使用a标签发送post请求
<?= Html::a('text', 'url', [ 'data' => [ 'method' => 'post', 'params' => [ 'params_key' ...
- cnless.sh:改进版less,可自动识别GBK编码或UTF-8编码。
#!/bin/bash #功能:让GBK编码的文件可以使用less正常显示中文(自动识别GBK和UTF-8编码) #v0. 在LINUX下,使用UTF-8编码,less UTF-8的文件时显示中文正常 ...
- 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?
来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...
- noip2010提高组3题题解 by rLq
本题地址http://www.luogu.org/problem/show?pid=1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- eclipse的几个快捷键
Alt / 自动补全 Ctrl Shift F 整理代码 Ctrl / 注释或取消注释 Ctrl 鼠标移到变量或类名上 转到声明/实现的接口/返回类型等 Ctrl Shift O import所有缺失 ...