swift - 在 AVAudioPlayer 中播放音调时如何在循环之间添加延迟?

标签 swift avaudioplayer

我已经创建了一个示例函数,它会立即播放一段短音,无限循环。这是代码:

let audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer.numberOfLoops = -1
audioPlayer.play()

如何在播放器再次播放音调之前创建 5 秒延迟?有办法做到这一点吗?

最佳答案

不幸的是,没有简单的方法可以做到这一点。你应该使用 AVAudioPlayerDelegate。请在下面找到一些示例:

class ViewController: UIViewController, AVAudioPlayerDelegate
{
    private var player: AVAudioPlayer!

    @objc private func startPlaying()
    {
         self.player = try? AVAudioPlayer(contentsOf: url)
         self.player.delegate = self
         self.player.play()
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool)
    {
         self.perform(#selector(startPlaying), with: nil, afterDelay: 5)
    }
}

不要忘记在您想要停止继续播放音频时停止选择器:

NSObject.cancelPreviousPerformRequests(withTarget: self)

关于swift - 在 AVAudioPlayer 中播放音调时如何在循环之间添加延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526735/

相关文章:

swift - 在 swift 中让不同的不同子类具有不同的默认值的惯用方式

string - NSDate 的特定字符串格式

ios - AVAudioSession overrideOutputAudioPort & localNotifications 静音

iphone - AVAudioPlayer 错误加载文件

iphone - 我想要一个 5 分钟 300kb 的音频文件

core-audio - UISlider跟随音量,不工作

swift - Swift 中来自 CGImageRef 的 NSData

快速函数 () -> (Int) -> 字符串

ios - iOS Swift 中简单的低延迟音频播放

swift - 分解 Uint32 的数据字节缓冲区