🎨
MadMachine-Examples
  • Introduction
  • About our project
  • Getting Started
  • Tutorial
    • What is SwiftIO
    • How to use IDE
    • Libraries
    • MM SDK
  • Built-In Examples
    • GettingStarted
      • Blink
      • ReadDigitalInput
      • ReadAnalogInput
      • PWMBrightnessControl
    • SimpleIO
      • ButtoncontrolLED
      • BlinkAnalogIn
      • BlinkTimer
      • BrightnessAnalogIn
      • Debounce
      • LEDsBrightnessControl
      • PWMSoundOutput
      • PWMMelody
    • AdvancedIO
      • ILI9341
      • LCD1602
      • MidiPlayer
      • PCA9685
      • SHT3x
      • SSD1315
    • Challenge
      • LCDFamily
      • RobotArm
      • Tetris
    • MakerKit
      • Mission 01 Blink
      • Mission 02 RGB LED
      • Mission 03 Push Button
      • Mission 04 Potentiometer RGB
      • Mission 05 Buzzer
      • Mission 06 Seven Segment Display
      • Mission 07 DC Motor
      • Mission 08 Servo Motor
      • Mission 09 LCD
      • Mission 10 Humiture Sensor
  • Library Reference
  • FAQ
Powered by GitBook
On this page
  • What you need
  • Circuit
  • Tips
  • Code
  • main.swift
  • MidiData.swift
  • MidiEvent.swift
  • MidiPlayer.swift
  • Note.swift
  • Video
  • See Also
  • References

Was this helpful?

  1. Built-In Examples
  2. AdvancedIO

MidiPlayer

What you need

Circuit

Tips

Code

main.swift

import SwiftIO

let pwm1 = PWMOut(Id.PWM0A)
let pwm2 = PWMOut(Id.PWM1A)
let pwm3 = PWMOut(Id.PWM2B)
let pwm4 = PWMOut(Id.PWM3B)

var midiPlayer = MidiPlayer(midiList1, midiList2, midiList3, midiList4)
midiPlayer.setChannls(pwm1, pwm2, pwm3, pwm4)
midiPlayer.playBackground()


while true {

}

MidiData.swift

// TheOldDriver.mid
// Track size: 4
let midiList1: [MidiEvent] = [
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(923, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(923, 0x80, 76, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(461, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 88, 100),
    MidiEvent(461, 0x80, 88, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 62, 100),
    MidiEvent(230, 0x80, 62, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(923, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(923, 0x80, 76, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(461, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(230, 0x80, 81, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(230, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(461, 0x80, 76, 64),
    MidiEvent(0, 0x90, 88, 100),
    MidiEvent(461, 0x80, 88, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 62, 100),
    MidiEvent(230, 0x80, 62, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(346, 0x80, 76, 64),
    MidiEvent(0, 0x90, 79, 100),
    MidiEvent(115, 0x80, 79, 64),
    MidiEvent(0, 0x90, 76, 100),
    MidiEvent(230, 0x80, 76, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(230, 0x80, 69, 64),
    MidiEvent(0, 0x90, 74, 100),
    MidiEvent(230, 0x80, 74, 64),
    MidiEvent(0, 0x90, 72, 100),
    MidiEvent(230, 0x80, 72, 64),
    MidiEvent(0, 0x90, 69, 100),
    MidiEvent(461, 0x80, 69, 64),
    MidiEvent(0, 0x90, 81, 100),
    MidiEvent(461, 0x80, 81, 64),
]
let midiList2: [MidiEvent] = [
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(461, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(0, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(461, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(0, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(461, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(0, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(461, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(0, 0x91, 69, 100),
    MidiEvent(230, 0x81, 69, 64),
    MidiEvent(461, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 71, 100),
    MidiEvent(230, 0x81, 71, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(461, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 59, 100),
    MidiEvent(230, 0x81, 59, 64),
    MidiEvent(0, 0x91, 45, 100),
    MidiEvent(461, 0x81, 45, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(230, 0x81, 60, 64),
    MidiEvent(0, 0x91, 60, 100),
    MidiEvent(225, 0x81, 60, 64),
]
let midiList3: [MidiEvent] = [
    MidiEvent(463, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 53, 100),
    MidiEvent(461, 0x81, 53, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(461, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x81, 64, 64),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 53, 100),
    MidiEvent(461, 0x81, 53, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(461, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x81, 64, 64),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 53, 100),
    MidiEvent(461, 0x81, 53, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(461, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x81, 64, 64),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 53, 100),
    MidiEvent(461, 0x81, 53, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 65, 100),
    MidiEvent(230, 0x81, 65, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(461, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x91, 52, 100),
    MidiEvent(461, 0x81, 52, 64),
    MidiEvent(0, 0x91, 55, 100),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(0, 0x81, 64, 64),
    MidiEvent(230, 0x81, 55, 64),
    MidiEvent(461, 0x91, 64, 100),
    MidiEvent(230, 0x81, 64, 64),
    MidiEvent(0, 0x91, 64, 100),
    MidiEvent(225, 0x81, 64, 64),
]
let midiList4: [MidiEvent] = [
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 50, 100),
    MidiEvent(461, 0x81, 50, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 41, 100),
    MidiEvent(461, 0x81, 41, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 43, 100),
    MidiEvent(461, 0x81, 43, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(461, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 50, 100),
    MidiEvent(461, 0x81, 50, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 41, 100),
    MidiEvent(461, 0x81, 41, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 43, 100),
    MidiEvent(461, 0x81, 43, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(461, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 50, 100),
    MidiEvent(461, 0x81, 50, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 41, 100),
    MidiEvent(461, 0x81, 41, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 43, 100),
    MidiEvent(461, 0x81, 43, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(461, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 50, 100),
    MidiEvent(461, 0x81, 50, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(0, 0x91, 67, 100),
    MidiEvent(230, 0x81, 67, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 41, 100),
    MidiEvent(461, 0x81, 41, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 43, 100),
    MidiEvent(461, 0x81, 43, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 62, 100),
    MidiEvent(230, 0x81, 62, 64),
    MidiEvent(0, 0x91, 40, 100),
    MidiEvent(461, 0x81, 40, 64),
    MidiEvent(461, 0x91, 57, 100),
    MidiEvent(461, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(230, 0x81, 57, 64),
    MidiEvent(0, 0x91, 57, 100),
    MidiEvent(225, 0x81, 57, 64),
]

MidiEvent.swift

import SwiftIO

struct MidiEvent {
    enum MidiEventStatus: UInt8 {
        case noteOn = 0x90
        case noteOff = 0x80
    }

    let deltaTime: Int
    let status: MidiEventStatus
    let key: Note
    let velocity: UInt8
    var period: Int? {
        NotePeriodTable.getPeriod(self.key)
    }

    init(_ deltaTime: Int, _ status: UInt8, _ key: UInt8, _ velocity: UInt8) {
        self.deltaTime = deltaTime
        if let s = MidiEventStatus(rawValue: status & 0x90) {
            self.status = s
        } else {
            self.status = .noteOff
        }
        if let k = Note(rawValue: key) {
            self.key = k
        } else {
            self.key = .NONE
        }
        self.velocity = velocity
    }
}

struct MidiEventList {
    let list: [MidiEvent]
    let noteCount: Int

    var pwm: PWMOut?
    var index: Int = 0
    var timer: Int = 0

    init(_ list: [MidiEvent], _ pwm: PWMOut? = nil) {
        self.list = list
        self.pwm = pwm
        noteCount = list.count
    }

    mutating func setPwm(_ pwm: PWMOut) {
        self.pwm = pwm
    }

    func noteOn(_ noteEvent: MidiEvent) {
        if let pwm = self.pwm {
            if let period = noteEvent.period {
                if noteEvent.velocity > 10 {
                    pwm.set(period: period, pulse: period / 2)
                } else {
                    pwm.set(period: period, pulse: 0)
                }
            }
        }
    }

    func noteOff() {
        if let pwm = pwm {
            pwm.set(period: 1000, pulse: 0)
        }
    }

    mutating func playNote(_ duration: Int) {
        timer += duration
        if index < noteCount {
            let noteEvent = list[index]
            if timer >= noteEvent.deltaTime {
                switch noteEvent.status {
                    case .noteOn:
                        noteOn(noteEvent)
                    case .noteOff:
                        noteOff()
                }
                timer = 0
                index += 1
            }
        } else {
            noteOff()
        }
    }
}

MidiPlayer.swift

import SwiftIO

final class MidiPlayer {
    var lists = [MidiEventList]()
    var listAvaiable = 0
    var timer = Timer()

    init(_ lists: [MidiEvent]...) {
        lists.forEach {list in
            self.lists.append(MidiEventList(list))
        }
    }

    func setChannls(_ pwms: PWMOut...) {
        listAvaiable = min(lists.count, pwms.count)
        for i in 0..<listAvaiable {
            lists[i].setPwm(pwms[i])
        }
    }

    func playNotes(_ duration: Int) {
        for i in 0..<listAvaiable {
            lists[i].playNote(duration)
        }
    }

    func playBackground() {
        timer.setInterrupt(ms: 1) {
            self.playNotes(1)
        }
    }
}

Note.swift

enum Note: UInt8 {
    case NONE   =   0
    case C0          =    12
    case CS0      =    13
    case D0          =    14
    case DS0      =    15
    case E0          =    16
    case F0          =    17
    case FS0      =    18
    case G0          =    19
    case GS0      =    20
    case A0          =    21
    case AS0      =    22
    case B0          =    23
    case C1          =    24
    case CS1      =    25
    case D1          =    26
    case DS1      =    27
    case E1          =    28
    case F1          =    29
    case FS1      =    30
    case G1          =    31
    case GS1      =    32
    case A1          =    33
    case AS1      =    34
    case B1          =    35
    case C2          =    36
    case CS2      =    37
    case D2          =    38
    case DS2      =    39
    case E2          =    40
    case F2          =    41
    case FS2      =    42
    case G2          =    43
    case GS2      =    44
    case A2          =    45
    case AS2      =    46
    case B2          =    47
    case C3          =    48
    case CS3      =    49
    case D3          =    50
    case DS3      =    51
    case E3          =    52
    case F3          =    53
    case FS3      =    54
    case G3          =    55
    case GS3      =    56
    case A3          =    57
    case AS3      =    58
    case B3          =    59
    case C4          =    60
    case CS4      =    61
    case D4          =    62
    case DS4      =    63
    case E4          =    64
    case F4          =    65
    case FS4      =    66
    case G4          =    67
    case GS4      =    68
    case A4        =    69
    case AS4    =    70
    case B4        =    71
    case C5        =    72
    case CS5    =    73
    case D5        =    74
    case DS5    =    75
    case E5        =    76
    case F5        =    77
    case FS5    =    78
    case G5        =    79
    case GS5    =    80
    case A5        =    81
    case AS5    =    82
    case B5        =    83
    case C6        =    84
    case CS6    =    85
    case D6        =    86
    case DS6    =    87
    case E6        =    88
    case F6        =    89
    case FS6    =    90
    case G6        =    91
    case GS6    =    92
    case A6        =    93
    case AS6    =    94
    case B6        =    95
    case C7        =    96
    case CS7    =    97
    case D7        =    98
    case DS7    =    99
    case E7        =    100
    case F7        =    101
    case FS7    =    102
    case G7        =    103
    case GS7    =    104
    case A7        =    105
    case AS7    =    106
    case B7        =    107
    case C8        =    108
    case CS8    =    109
    case D8        =    110
    case DS8    =    111
    case E8        =    112
    case F8        =    113
    case FS8    =    114
    case G8        =    115
    case GS8    =    116
    case A8        =    117
    case AS8    =    118
    case B8        =    119
}

struct NotePeriodTable {
    static let table: [UInt16] = [
        61156,
        57724,
        54484,
        51426,
        48540,
        45815,
        43244,
        40817,
        38526,
        36364,
        34323,
        32396,
        30578,
        28862,
        27242,
        25713,
        24270,
        22908,
        21622,
        20408,
        19263,
        18182,
        17161,
        16198,
        15289,
        14431,
        13621,
        12856,
        12135,
        11454,
        10811,
        10204,
        9631,
        9091,
        8581,
        8099,
        7645,
        7215,
        6811,
        6428,
        6067,
        5727,
        5405,
        5102,
        4816,
        4545,
        4290,
        4050,
        3822,
        3608,
        3405,
        3214,
        3034,
        2863,
        2703,
        2551,
        2408,
        2273,
        2145,
        2025,
        1911,
        1804,
        1703,
        1607,
        1517,
        1432,
        1351,
        1276,
        1204,
        1136,
        1073,
        1012,
        956,
        902,
        851,
        804,
        758,
        716,
        676,
        638,
        602,
        568,
        536,
        506,
        478,
        451,
        426,
        402,
        379,
        358,
        338,
        319,
        301,
        284,
        268,
        253,
        239,
        225,
        213,
        201,
        190,
        179,
        169,
        159,
        150,
        142,
        134,
        127
    ]

    static let range = 12...119
    static func getPeriod(_ note: Note) -> Int? {
        var mark = Int(note.rawValue)
        if NotePeriodTable.range.contains(mark) {
            mark -= NotePeriodTable.range.lowerBound
            return Int(NotePeriodTable.table[mark])
        } else {
            return nil
        }
    }
}

Video

See Also

References

Last revision 2020/09/10 by Johnson

PreviousLCD1602NextPCA9685

Last updated 4 years ago

Was this helpful?