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音乐播放器相关的更多相关文章

  1. 一个功能齐全的IOS音乐播放器应用源码

    该源码是在ios教程网拿过来的,一个不错的IOS音乐播放器应用源码,这个是我当时进公司时 我用了一晚上写的  图片都是在别的地方扒的,主要是歌词同步,及上一曲,下一曲,功能齐全了 ,大家可以学习一下吧 ...

  2. 卡拉OK效果的实现-iOS音乐播放器

    自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...

  3. ios音乐播放器demo

    闲暇时间,写了一个音乐播放器. 个人认为,基于Demo 的学习是最有效果的. 想学习的同学,欢迎下载.知识,只有在传播的时候才有价值. 不懂之处,欢迎留言询问,将热情解答. 运行图 项目结构图 Git ...

  4. iOS - 音乐播放器需要获取音乐文件的一些数据信息(封装获取封面图片的类)

    // // AVMetadataInfo.h // AVMetadata // // Created by Wengrp on 15/10/27. // Copyright © 2015年 Wengr ...

  5. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码

    iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...

  6. iOS开发拓展篇—音频处理(音乐播放器1)

    iOS开发拓展篇—音频处理(音乐播放器1) 说明:该系列文章通过实现一个简单的音乐播放器来介绍音频处理的相关知识点,需要重点注意很多细节的处理. 一.调整项目的结构,导入必要的素材 调整后的项目结构如 ...

  7. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...

  8. iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码

    iOS精选源码 微信自定义搜索框实现 一个商城Demo,持续更新中 在Object-C中学习数据结构与算法之排序算法 iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果 XLsn0wPushTimePi ...

  9. iOS开发拓展篇—音频处理(音乐播放器2)

    iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 ...

随机推荐

  1. 配置git同时push到两个远端库的简单方法

    最近在写一个开源的论坛系统,在发布代码时选择了github和coding这两个平台,我手懒,不想敲两次git push了,所以说突然有了一个很奇怪的需求:用一条git push同时push到两个远端代 ...

  2. 使用强大的可视化工具redislive来监控我们的redis,别让自己死的太惨~~~

    作为玩windows的码农,在centos上面装点东西,真的会崩溃的要死,,,我想大家也知道,在centos上面,你下载的是各种源代码,需要自己编译...而 使用yum的话,这个吊软件包有点想nuge ...

  3. flume:spooldir采集日志,kafka输出的配置问题

    flume配置: #DBFile DBFile.sources = sources1 DBFile.sinks = sinks1 DBFile.channels = channels1 # DBFil ...

  4. 机器学习实战笔记(Python实现)-02-决策树

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  5. 测试几个xml的问题

    使用sql server的时候,免不了与xml的参数打交道,xml大多数时候都给我们的程序带来方便,但是也有些时候会有变量赋值不通过的时候.(当然罗,如果你本身xml都通不过 xml spy 之类软件 ...

  6. mybatis 动态sql表达式相关应用

    一.mybatis 表达式简介 对于mybatis3 ,提供了一种动态sql的方式.通过动态sql我们可以直接在mybatis 的xm映射文件中直接通过条件判断的方式进行查询添加的拼接.mybatis ...

  7. 教你看懂 OpenStack 日志 - 每天5分钟玩转 OpenStack(29)

    instance 从创建到删除的整个生命周期都是由 Nova 管理的. 后面各小节我们以 instance 生命周期中的不同操作场景为例,详细分析 Nova 不同组件如何协调工作,并通过日志分析加深大 ...

  8. 升级Windows 10 正式版过程记录与经验

    升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...

  9. [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法

    前言:不废话.,直接进入正文 正文: 如何使用distinct在mysql中查询多条不重复记录值? 首先,我们必须知道在django中模型执行查询有两种方法: 第一种,使用django给出的api,例 ...

  10. 【WPF系列】-TextBox常用知识点

    DataBinding中更新数据源的时机   TextBox .Text 属性的默认 UpdateSourceTrigger 值为 LostFocus.这意味着如果应用程序的 TextBox 包含数据 ...