美文网首页
iOS-无限循环播放音频文件(无缝拼接)

iOS-无限循环播放音频文件(无缝拼接)

作者: malgee | 来源:发表于2019-06-25 20:13 被阅读0次

    说到播放音频比较常用的AVAudioPlayer,自身带有可以循环播放的属性numberOfLoops 该值为负数就能实现无限循环播放,但是这只满足一些音频有间歇的可以满足,如果音频文件没有间歇(一直有声音的情况)如果需要无限循环播放就会出现播放中间有卡顿的情况,那就不能使用numberOfLoops = -1来解决了。

    由于AVAudioPlayer没有监听播放进度的API 所以选择了AVPlayer播放音频文件(addPeriodicTimeObserverForInterval:,实时监听播放进度)

    解决方案:使用2个播放器播放同一个音频

    具体实施:前一个播放器将要播放完成的时候,创建第二个播放器播放,第一个播放器播放完成之后释放掉,继续监听第二个播放器,第二个播放器将要完成的时候创建第三个播放器,然后释放掉...... 依次创建

     NSURL *url = [[NSBundle mainBundle] URLForResource:musicName withExtension:@"mp3"];
     AVPlayerItem * playerItem = [[AVPlayerItem alloc]initWithURL:url];
     AVPlayer *tPlayer = [[AVPlayer alloc]initWithPlayerItem:playerItem];
    
    id observer = [tPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 10.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
            float currentTime = CMTimeGetSeconds(time); // 当前播放时长
            float totalTime = CMTimeGetSeconds(playerItem.duration); // 总时长
    
    // 这里判断 什么时候创建第二个播放器,
        }]
    

    一定记住第一个播放完成之后一定要释放掉添加的监听条件

     [tPlayer removeTimeObserver: observer];
    

    以上是整体的核心步骤

    相关文章

      网友评论

          本文标题:iOS-无限循环播放音频文件(无缝拼接)

          本文链接:https://www.haomeiwen.com/subject/mhaxcctx.html