Note frequency calculation in Swift

August 24, 2015 ยท View on GitHub

enum Note: Int { case C = 0 case D = 2 case E = 4 case F = 5 case G = 7 case A = 9 case B = 11 }

enum Modifier: Int { case Sharp = 1 case Flat = -1 }

func frequencyForNote(note: Note, modifier: Modifier?, octave: Int) -> Double { var halfStepsFromA4: Int = note.rawValue - Note.A.rawValue halfStepsFromA4 += 12 * (octave - 4)

if let modifier = modifier {
    halfStepsFromA4 += modifier.rawValue
}

let frequencyOfA4 = 440.0
let a = 1.059463094359

return frequencyOfA4 * pow(a, Double(halfStepsFromA4))

}