如何在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方法,例如minutesPerBeatminutesPerBeatminutesPerBeatminutesPerBeat 。 这有助于使转换算法更易于理解,但后来我意识到我不在乎。 我只想通过简单的界面花费数秒钟。

在仔细研究了音频API,回顾了一些时间类型并简要考虑了带有扩展名的类型别名之后,我使用了一个面向成员的初始化器来研究这个简单的结构。