swift - 如何在歌曲重复时无滞后/延迟地循环背景音乐(无缝)

标签 swift xcode sprite-kit avfoundation

我正在尝试制作一款背景音乐循环播放的游戏。我在 Adob​​e Audition(类似于 audacity)中制作了歌曲文件,当我在 Adob​​e Audition 中循环播放它时,它会按照我想要的方式循环播放。

但是,当我在 Xcode 中播放它时,它在循环之间有延迟。我正在使用 AVFoundations 播放声音。

我到处搜索,但找不到问题的解决方案。

有什么方法可以循环播放音频文件而中间没有任何滞后? (我相信它叫做“无缝循环”)

代码如下:

class GameScene: SKScene {
...// Other Code

var ButtonAudio = URL(fileURLWithPath: Bundle.main.path(forResource: "Gamescene(new)", ofType: "mp3")!)
var ButtonAudioPlayer = AVAudioPlayer()

... //Other Code

}

当我调用它时:

 override func didMove(to view: SKView) {

    ...//Code

    ButtonAudioPlayer = try! AVAudioPlayer(contentsOf: ButtonAudio, fileTypeHint: nil)
    ButtonAudioPlayer.numberOfLoops = -1
    ButtonAudioPlayer.prepareToPlay()
    ButtonAudioPlayer.play()

    ...//More Code
    }

有人可以帮我解决这个问题吗?

提前致谢!

最佳答案

您可以使用 AVPlayerLooperAVQueuePlayer做这个。

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var queuePlayer = AVQueuePlayer()
    var playerLooper: AVPlayerLooper?

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let url = Bundle.main.url(forResource: "Gamescene(new)", withExtension: "mp3") else { return }
        let playerItem = AVPlayerItem(asset: AVAsset(url: url))
        playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
        queuePlayer.play()
    }
}

关于swift - 如何在歌曲重复时无滞后/延迟地循环背景音乐(无缝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605956/

相关文章:

ios - 显示数组中所有数据信息JSON

ios - sectionForSectionIndexTitle 和 sectionIndexTitlesForTableView 未在 swift 3 中调用

ios - 无法在 iOS 8 上运行应用程序

swift - 由于信号 : Segmentation Fault: 11,Xcode 9.2 命令失败

ios - 移动物理体 - didSimulatePhysics 与更新

ios - 当 MIDI 目标或源更改时收到通知

ios - IBAction 在 Xcode 中打开用于表格栏单元格交互的 URL

ios - Swift 中的 UIPageViewController

ios - 游戏中心排行榜已弃用?

objective-c - 使用不同的节点运行 SKActions 序列