59 lines
1.7 KiB
Kotlin
59 lines
1.7 KiB
Kotlin
package org.openrndr.extra.midi
|
|
|
|
enum class MidiEventType {
|
|
NOTE_ON,
|
|
NOTE_OFF,
|
|
CONTROL_CHANGED,
|
|
PROGRAM_CHANGE
|
|
}
|
|
|
|
class MidiEvent(val eventType: MidiEventType) {
|
|
var origin = Origin.DEVICE
|
|
var control: Int = 0
|
|
var program: Int = 0
|
|
var note: Int = 0
|
|
var channel: Int = 0
|
|
var value: Int = 0
|
|
var velocity: Int = 0
|
|
|
|
enum class Origin {
|
|
DEVICE,
|
|
USER
|
|
}
|
|
|
|
companion object {
|
|
fun noteOn(channel: Int, note: Int, velocity: Int): MidiEvent {
|
|
val midiEvent = MidiEvent(MidiEventType.NOTE_ON)
|
|
midiEvent.velocity = velocity
|
|
midiEvent.note = note
|
|
midiEvent.channel = channel
|
|
return midiEvent
|
|
}
|
|
|
|
fun noteOff(channel: Int, note: Int): MidiEvent {
|
|
val midiEvent = MidiEvent(MidiEventType.NOTE_OFF)
|
|
midiEvent.note = note
|
|
midiEvent.channel = channel
|
|
return midiEvent
|
|
}
|
|
|
|
fun controlChange(channel:Int, control: Int, value: Int): MidiEvent {
|
|
val midiEvent = MidiEvent(MidiEventType.CONTROL_CHANGED)
|
|
midiEvent.channel = channel
|
|
midiEvent.control = control
|
|
midiEvent.value = value
|
|
return midiEvent
|
|
}
|
|
|
|
fun programChange(channel:Int, program: Int): MidiEvent {
|
|
val midiEvent = MidiEvent(MidiEventType.PROGRAM_CHANGE)
|
|
midiEvent.channel = channel
|
|
midiEvent.program = program
|
|
return midiEvent
|
|
}
|
|
}
|
|
|
|
override fun toString(): String {
|
|
return "MidiEvent(eventType=$eventType, origin=$origin, program=$program, control=$control, note=$note, channel=$channel, value=$value, velocity=$velocity)"
|
|
}
|
|
} |