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 - 如何更改可变数组中对象的名称属性?

swift - 我想在单个文本字段中检查手机号码和电子邮件 ID 的验证。我应该如何验证这一点?

ios - macOS Sierra、Xcode 8 上的神秘 "cryptographic verification failure"错误

objective-c - Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束的 iOS7 问题

ios - Xcode 中 IBAction 的函数?

ios - 当 SceneKit 动画停止时,SpriteKit 的动画覆盖在 SceneKit 上停止

ios - Swift - 具有类型和协议(protocol)的属性

swift - 如何对我的 TODO 进行分类?

ios - Delphi XE2 应用程序在 IPAD 上没有响应

swift - 节点在 Sprite Kit 中变慢