首页 > 解决方案 > AudioPlayer (Swift) - 两次播放声音 - 有间隙

问题描述

我正在使用以下代码播放声音文件两次。第二个声音在第一个声音之后立即播放

是否可以在它们之间留下时间间隔(1秒)?我试图找到阅读Apple Docs的解决方案

var letterSound: AVAudioPlayer!

...


     @IBAction func speakLetter(sender: AnyObject) {

            let soundFile: String  = "SoundFile" + String(letterNumber)

            let path = Bundle.main.path(forResource: soundFile, ofType:"mp3")!
            let url = URL(fileURLWithPath: path)

            do {
                let sound = try AVAudioPlayer(contentsOf: url)
                letterSound = sound
                letterSound.numberOfLoops = 1
                letterSound.play()

            } catch {
                // couldn't load file :(
            }

        }

标签: swiftavaudioplayer

解决方案


一种选择是在音频文件的末尾添加一些“空白”或静音。

在此处输入图像描述

如果你没有音频编辑器,我推荐Audacity,它是免费的,并且有很多关于如何添加静音的教程。


如果您想要一个更多基于代码的选项,您可以考虑使用AVAudioPlayerDelegate didFinishPlaying方法来检测第一次播放的结束,然后play(atTime:)在 1 秒后使用触发下一个循环。

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    player.play(atTime: player.deviceCurrentTime + 1.0)
}

此代码未经测试,我认为它可能会创建一个无限循环,因此您可能需要一些额外的逻辑来确保它只循环一次


推荐阅读