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 - 使用 AudioMixInputParameters AVFoundation 为每个视频轨道设置多个音量在 Swift iOS 中不起作用

ios - 正确的数据未显示在 ios 图表中

ios - 删除单元格时,在 TableViewCell 中创建的新 UIView 会自行删除吗?

ios - 如何在 xcode 6.3 界面生成器 Storyboard 中默认模拟指标?

swift - 应用内购买 Swift Game

ios - 翻转 iPhone 方向重新加载 View Controller

ios - 如何加快物体的运动?

ios - 如何在一个部分中组合相同的日期对象?

objective-c - 无法识别的选择器发送到实例,原因

ios - Xcode 8如何在输入时显示功能描述