Chapter 2 side quest SOLUTION

Hope this solution is clear.
C Major - is c,d,e,f,g,a,b,c'
F Major - is f,g,a,bb,c',d',e',f'
' - means new octave
bb - b flat
Code Block language
enum CMajor: Double, CaseIterable {
    case c = 261.63
    case d = 293.66
    case e = 329.63
    case f = 349.23
    case g = 392.00
    case a = 440.00
    case b = 493.88
    var fMajorFrequency: Double {
        switch self {
        case .b:
            return 466.16
        default:
            return self.rawValue * 2
        }
    }
    static var fMajorFrequencies: [Double] { 
        [CMajor.f.rawValue, CMajor.g.rawValue, CMajor.a.rawValue, CMajor.b.fMajorFrequency, CMajor.c.fMajorFrequency, CMajor.d.fMajorFrequency, CMajor.e.fMajorFrequency, CMajor.f.fMajorFrequency ]
    } 
}
func performance(owner: Assessable) {
    let toneOutput = ToneOutput()
    var cMajorFrequencies = CMajor.allCases.map{$0.rawValue} 
    cMajorFrequencies.append(CMajor.c.rawValue*2)
    let cTones = cMajorFrequencies.map( { Tone(pitch: $0, volume: 0.3) })
    let fTones = CMajor.fMajorFrequencies.map( { Tone(pitch: $0, volume: 0.3) })
    var toneIndex = 0
    let tones = fTones
    Timer.scheduledTimer(withTimeInterval: 0.4, repeats: true) { timer in
        guard toneIndex < tones.count else {
            toneOutput.stopTones()
            timer.invalidate()
            owner.endPerformance()
            return
        }
        toneOutput.play(tone: tones[toneIndex])
        toneIndex += 1
    }
    owner.endPerformance()
}