1オクターブは半音12個で構成されている。
ドを基音としてレを出したい場合に2を与えるとそれが達成できるようにしたい。
static func hight(_ num : Float) -> Float {
let base : Float = 440.0 // ピアノでいう真ん中のラの周波数
let min: Float = -24 // そこから 2オクターブ下を基音とする
return base * pow(pow(2, num + min), 1/12)
}
1オクターブ上がると周波数が2倍になることを利用して計算。
底が2の対数で何オクターブ上がるかが計算できる。したがってその逆を行うと1/12オクターブを半音として扱うことができる。