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

说到播放音频比较常用的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-无限循环播放音频文件(无缝拼接))