如何在Swift中计算时间和节奏
在本文中,我将描述一种在Swift中将速度作为一个单元工作的简单方法。
音乐节奏通常以bpm(每分钟的节拍)表示,对于许多任务(如同步动画,安排声音或验证音频循环的长度),将其转换为秒通常会很有帮助。
代码
struct Tempo {
var bpm: Double
func seconds(duration: Double = 0.25) -> Double {
return 1.0 / self.bpm * 60.0 * 4.0 * duration
}
}
正在使用
let myTempo = Tempo(bpm: 110.0)
let quarterNoteLength = myTempo.seconds()
let barLength = myTempo.seconds(duration: 1)
let phraseLength = myTempo.seconds(duration: 4)
背景
过去,当我需要进行这些转换时,我记了一些笔记,翻转和取消单位,并创建了一个可以解决我的特定问题的语句。
代码看起来像这样:
var bpm = 90.0
var duration = 2.0
let time = 60.0 / bpm * 4 * duration
为了使此方法可重用,我将这些步骤分成了minutesPerBeat
方法,例如minutesPerBeat
, minutesPerBeat
, minutesPerBeat
, minutesPerBeat
。 这有助于使转换算法更易于理解,但后来我意识到我不在乎。 我只想通过简单的界面花费数秒钟。
在仔细研究了音频API,回顾了一些时间类型并简要考虑了带有扩展名的类型别名之后,我使用了一个面向成员的初始化器来研究这个简单的结构。