86 lines
2.5 KiB
Kotlin
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)"
|
|
}
|
|
} |