swift - 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 :(
}
}
解决方案
一种选择是在音频文件的末尾添加一些“空白”或静音。
如果你没有音频编辑器,我推荐Audacity,它是免费的,并且有很多关于如何添加静音的教程。
如果您想要一个更多基于代码的选项,您可以考虑使用AVAudioPlayerDelegate
didFinishPlaying方法来检测第一次播放的结束,然后play(atTime:)
在 1 秒后使用触发下一个循环。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
player.play(atTime: player.deviceCurrentTime + 1.0)
}
此代码未经测试,我认为它可能会创建一个无限循环,因此您可能需要一些额外的逻辑来确保它只循环一次
推荐阅读
- android - airbnb/lottie 动画不适用于 android 4.4、4.3 和 4.2
- mongodb - MongoDB 会在压缩文档后对磁盘上的数据进行碎片整理吗?
- angular - 使用 Angular4/5 的 Power BI
- javascript - 在没有画布的情况下获取 Image uint8 数据
- testing - 在 ExUnit 中为库测试查询
- arrays - 我的选项列表的 urlencode 数组
- javascript - 每次更改文件时,NodeJS都会获取文件的最后一行
- java - PostConstruct没有在junits中被调用
- python - 从特定日历 Google API Python 获取事件
- python - 不安全的登录 Facebook API