generated from rnentjes/kotlin-server-web-empty
Add write/read indices and commands handling to MidiMessage
Introduced `writeIndex` and `readIndex` for managing MIDI commands. Added `addMidiCommand`, `readMessage`, and `resetReadIndex` methods to enhance MIDI message manipulation. Ensured validation to limit commands to a maximum of 16.
This commit is contained in:
@@ -50,6 +50,8 @@ class TimedMidiMessage() : MidiMessage(
|
|||||||
) {
|
) {
|
||||||
var timeToPlay by double("timeToPlay")
|
var timeToPlay by double("timeToPlay")
|
||||||
var midi by blob("midi")
|
var midi by blob("midi")
|
||||||
|
var writeIndex: Int = 0
|
||||||
|
var readIndex: Int = 0
|
||||||
|
|
||||||
init {
|
init {
|
||||||
this.type = MidiMessageTypes.MIDI_DATA.typeId
|
this.type = MidiMessageTypes.MIDI_DATA.typeId
|
||||||
@@ -70,6 +72,31 @@ class TimedMidiMessage() : MidiMessage(
|
|||||||
this.timeToPlay = timeToPlay
|
this.timeToPlay = timeToPlay
|
||||||
val ba: ByteArray = data
|
val ba: ByteArray = data
|
||||||
this.midi = SlicedByteArray(ba)
|
this.midi = SlicedByteArray(ba)
|
||||||
|
writeIndex = ba.size / 3
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addMidiCommand(vararg data: Byte) {
|
||||||
|
check(writeIndex <= 45) {
|
||||||
|
"Can't add more than 16 commands to a midi message"
|
||||||
|
}
|
||||||
|
for (index in data.indices) {
|
||||||
|
midi[writeIndex++] = data[index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun readMessage(): ByteArray? {
|
||||||
|
check(writeIndex <= 45) {
|
||||||
|
"Can't read more than 16 commands from a midi message"
|
||||||
|
}
|
||||||
|
val result = ByteArray(3)
|
||||||
|
for (index in 0 ..< 3) {
|
||||||
|
result[index] = midi[readIndex++]
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fun resetReadIndex() {
|
||||||
|
readIndex = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user