AudioPlayer (Swift) - 播放声音两次 - 有间隙
AudioPlayer (Swift) - play sound twice - with gap
我正在使用以下代码将声音文件播放两次。第二个声音紧随第一个
是否可以在它们之间留出时间间隔(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 :(
}
}
一种选择是在音频文件末尾添加一些 'white space' 或静音。
如果你没有音频编辑器我推荐Audacity, it's free and there are lots of tutorials on how to add silence.
如果您想要更多基于代码的选项,您可以考虑使用 AVAudioPlayerDelegate
didFinishPlaying 方法来检测第一次播放的结束,然后使用 play(atTime:)
触发下一个循环从现在开始 1 秒。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
player.play(atTime: player.deviceCurrentTime + 1.0)
}
此代码未经测试,我认为它可能会创建一个无限循环,因此您可能需要一些额外的逻辑来确保它只循环一次
我正在使用以下代码将声音文件播放两次。第二个声音紧随第一个
是否可以在它们之间留出时间间隔(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 :(
}
}
一种选择是在音频文件末尾添加一些 'white space' 或静音。
如果你没有音频编辑器我推荐Audacity, it's free and there are lots of tutorials on how to add silence.
如果您想要更多基于代码的选项,您可以考虑使用 AVAudioPlayerDelegate
didFinishPlaying 方法来检测第一次播放的结束,然后使用 play(atTime:)
触发下一个循环从现在开始 1 秒。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
player.play(atTime: player.deviceCurrentTime + 1.0)
}
此代码未经测试,我认为它可能会创建一个无限循环,因此您可能需要一些额外的逻辑来确保它只循环一次