From 00d8a67ed0f575e2ed22ce9f40864e9322eee3a3 Mon Sep 17 00:00:00 2001 From: rnentjes Date: Mon, 16 Dec 2024 14:21:22 +0100 Subject: [PATCH] Update MIDI message handling and version increment Refactored MIDI message classes to improve modularity and flexibility, introducing separate classes for distinct MIDI message types. Updated `build.gradle.kts` version to `0.2.0` to reflect these changes. Removed `.idea/.name` file as part of cleanup. --- .idea/.name | 1 - build.gradle.kts | 2 +- .../nl/astraeus/midi/message/MidiMessage.kt | 55 +++++++++++++++---- .../astraeus/midi/message/MidiMessageTypes.kt | 4 +- 4 files changed, 48 insertions(+), 14 deletions(-) delete mode 100644 .idea/.name diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 8f91b47..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -template \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index e007fae..f877807 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "nl.astraeus" -version = "0.1.0" +version = "0.2.0" repositories { mavenCentral() diff --git a/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessage.kt b/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessage.kt index 03ddef4..6ce71d3 100644 --- a/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessage.kt +++ b/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessage.kt @@ -9,21 +9,31 @@ import nl.astraeus.tba.blob import nl.astraeus.tba.double import nl.astraeus.tba.long -class MidiMessage() : TypedByteArray( +open class MidiMessage( + vararg types: Type +) : TypedByteArray( Type("type", DataType.LONG), - Type("generated", DataType.DOUBLE), - Type("playTime", DataType.DOUBLE), - Type("midi", DataType.BLOB, 240), + *types, ) { var type by long("type") - var generated by double("generated") - var playTime by double("playTime") - var midi by blob("data") init { this.type = MidiMessageTypes.MIDI_DATA.typeId } + constructor(data: ByteArray): this() { + this.data = MutableByteArrayHandler(buffer = data) + } +} + +class MidiDataMessage() : MidiMessage( + Type("midi", DataType.BLOB, 48), +) { + var midi by blob("data") + + init { + this.type = MidiMessageTypes.MIDI_DATA.typeId + } constructor(data: ByteArray): this() { check(data.size == definition.size) { @@ -33,10 +43,33 @@ class MidiMessage() : TypedByteArray( this.data = MutableByteArrayHandler(data) } - constructor(playTime: Double, midi: ByteArray): this() { - this.generated = getCurrentTime() - this.playTime = playTime - this.midi = SlicedByteArray(midi) +} + +class TimedMidiMessage() : MidiMessage( + Type("timeToPlay", DataType.DOUBLE), + Type("midi", DataType.BLOB, 48), +) { + var timeToPlay by double("timeToPlay") + var midi by blob("data") + + init { + this.type = MidiMessageTypes.MIDI_DATA.typeId + } + + constructor(data: ByteArray): this() { + check(data.size == definition.size) { + "Invalid data size: ${data.size} != ${definition.size}" + } + + this.data = MutableByteArrayHandler(data) + } + + constructor( + timeToPlay: Double, + vararg data: Byte + ): this() { + this.timeToPlay = timeToPlay + this.midi = SlicedByteArray(data) } } diff --git a/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessageTypes.kt b/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessageTypes.kt index b224181..5612871 100644 --- a/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessageTypes.kt +++ b/src/commonMain/kotlin/nl/astraeus/midi/message/MidiMessageTypes.kt @@ -37,5 +37,7 @@ enum class MidiMessageTypes( val typeId: Long, ) { NONE("Unknown", 0L), - MIDI_DATA("Timestamped midi data", "TimeMidi".encodeToNumber()), + MIDI_MESSAGE("Midi message base", "MidiMsg".encodeToNumber()), + MIDI_DATA("Midi data", "TimeData".encodeToNumber()), + MIDI_TIMED("Timed midi data", "MidiTimd".encodeToNumber()), }