片段循环播放器的两种实现思路

给一个 mp3 音频资源,循环播放其中的一个片段

本文说一下,两种实现的思路

第一种,主要用 seek 方法

把整个音频资源分配给播放器,跳转到片段开始的地方,就是 seek 过去,

正常播放到片段结尾,再 seek 到片段开头

面临的挑战: seek 会有杂音

每一次 seek ,就是先调用 AVAudioPlayerNode 的 stop 方法,

把分配 AVAudioPlayerNode 的音频缓冲资源清空,

再把分配音频资源的指针,放到片段开始的地方,重新给 AVAudioPlayerNode 分配需要的音频资的缓冲

最后调用 AVAudioPlayerNode 的 play 方法,又播放起来

挑战的普通解决方法:

关闭 AVAudioPlayerNode 之前,把音量调为 0,就是修改 engine.mainMixerNode.outputVolume

又开始播放了, 把 AVAudioPlayerNode 的音量恢复正常

第 2 种,把分配音频缓冲的角度

把需要的片段音频缓冲,从音频文件中抽离,分配需要的次数给 AVAudioPlayerNode

无杂音

( 上一个,播放到片段结尾,一 seek , 就出杂音 )

具体实现

1,seek 方法途径

控制的数据结构,

  • 总共需要重复多少遍, countStdRepeat

  • 当前重复了几次,howManyNow

片段播放完后,需要停顿,

  • 循环播放多次,停顿 1 次后,可以播放下一个片段了,toClimb

  • 音频片段有很多,记录当前的片段序号 currentX

判断当前片段播放完了没有,拿当前的播放时间,该片段的结束时间比较,

用 currentX,找到该片段的结束时间

  • pauseWork, 每一个片段,循环播放完成后,需要停顿一次

  • currentMoment, 记录当前的暂停时刻,过了需要的暂定时间 stdPauseT,继续播放

  • stdPauseT,一轮播放完成后,的暂停持续时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值