开发一款 iOS 音乐播放器的五个点

640?wx_fmt=jpeg

黑客技术

点击右侧关注,了解黑客的世界!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java开发进阶

点击右侧关注,掌握进阶之路!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

Python开发

点击右侧关注,探讨技术话题!

640?wx_fmt=jpeg

作者丨邓轻舟

来源:

https://juejin.im/post/5d596257f265da03ae7873da


播放很简单

一般分为两个过程,准备播放,与播放

准备播放,包括准备播放资源、播放器初始化和播放器准备好

其中准备播放资源

 
 

播放器初始化和播放器准备好

 
 
播放

audioPlayer.play(), 一行代码


第一点,进度条怎么做?

640?wx_fmt=other

一般进度条,会做两件事,

随着播放的推移,进度条的滑块会一直向前走,有一个音乐播放与进度条的进展的匹配

进度条的滑块可以拖拽,来控制当前播放的地方,譬如可以回播,可以跳过

播放音乐,进度条的滑块也走,进度是匹配的

每次播放前,先设置进度条的进度,

maximumValue 最大值,就是放完了,一首歌的时长

minimumValue 最小值,就是没播放,为 0

value 开始的时候,就是没播放,为 0

 
 

要想进度条的滑块会一直向前走,就要有一个计时器

 
 
拖拽进度条的滑块,调整播放的位置

因为之前滚动条的范围与播放器的时长,已经匹配好了

所以设置播放器的当前时间 currentTime ,就可以了

先暂停,再设置播放器的 currentTime,短暂的间隔后

过渡比较平滑,体验稍微好一些

 
 
做快进和快退,也是这个思路,更改播放器的当前时间 audioPlayer.currentTime

第二点,乱序播放与循环播放,怎么做?

640?wx_fmt=other

使用乱序播放与循环播放两个按钮,针对的都是下一曲,以及之后的曲子

他们不会影响当前的歌曲播放

所以这两个按钮点击,都是改 UI , 改状态,当前歌曲播放完成后,起作用

或者当前没播放,下一次播放的时候,第一首歌曲播放完了,起作用

 
 

乱序与循环,在 AVAudioPlayerDelegate 的播放完成回调方法中起作用 ,

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool){


单曲循环效果

就是指没点击乱序,只点击了循环,

 
 
乱序,不循环效果

就是没点击循环,只点击了乱序,

乱序,就要取随机数,

不循环,就要去除重复,这里就是把歌单播放一遍,就完了

 
 
乱序循环效果

就是点击了循环和乱序

乱序,就要取随机数,

乱序循环,这里就是把歌单乱序播放一遍,再重来

 
 

第三点,锁屏播放与切换到其他应用播放

实际上就是后台播放

设置一下后台模式,让 session 保活就可以了

640?wx_fmt=other

 
 

第四点,播放器的远程控件事件

屏幕的底部弹框中,播放器的控件事件

640?wx_fmt=other

锁屏后,播放器的控件事件

640?wx_fmt=other

首先要接收远程的控件事件

 
 
把播放信息,同步到锁屏播放器与底部弹窗的播放器

播放的时候,把播放信息,同步到锁屏与底部弹窗,

 
 
最后,
重写func remoteControlReceived 方法

锁屏的时候,可以对播放器暂停与播放,点击上一首,与下一首

拉起底部弹窗的时候,也是

 
 

第五点,怎么播放多种文件,mp3、m4a?

通过二进制的 data , 实例化 AVAudioPlayer 的方式

 
 

本文代码:

https://github.com/coyingcat/mPlayer

本文基于 bpolat/Music-Player

 推荐↓↓↓ 

640?wx_fmt=jpeg

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png

万水千山总是情,点个 “在看” 行不行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值