Files
orx/orx-jvm/orx-midi/src/main/kotlin/MidiEvent.kt
2022-08-22 17:27:12 +02:00

86 lines
2.5 KiB
Kotlin

package org.openrndr.extra.midi
enum class MidiEventType {
NOTE_ON,
NOTE_OFF,
CONTROL_CHANGED,
PROGRAM_CHANGE,
CHANNEL_PRESSURE,
PITCH_BEND
}
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 pitchBend: Int = 0
var pressure: 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
}
fun channelPressure(channel:Int, pressure: Int): MidiEvent {
val midiEvent = MidiEvent(MidiEventType.CHANNEL_PRESSURE)
midiEvent.channel = channel
midiEvent.pressure = pressure
return midiEvent
}
fun pitchBend(channel:Int, pitchBend: Int): MidiEvent {
val midiEvent = MidiEvent(MidiEventType.PITCH_BEND)
midiEvent.channel = channel
midiEvent.pitchBend = pitchBend
return midiEvent
}
}
override fun toString(): String {
return "MidiEvent(eventType=$eventType, " +
"origin=$origin, " +
"program=$program, " +
"control=$control, " +
"note=$note, " +
"channel=$channel, " +
"pitchBend=$pitchBend, " +
"pressure=$pressure, " +
"value=$value, " +
"velocity=$velocity)"
}
}