From a676f567a6ad6d4ddf9e290952f9e4676d8ddab8 Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Thu, 27 Aug 2026 11:54:08 +0300 Subject: [PATCH] Fix! Prioritize point d'orgue over navigation jumps on the same grid --- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 13 ++++++------- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 7 +++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt index 81dcd95..1e69b44 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -334,11 +334,8 @@ actual class FMediaPlayer actual constructor( clockNano = System.nanoTime() clockTick = currentTickPos - val targetIdx = events.indexOfFirst { it.tickAbsolute >= currentTickPos } + idx = events.indexOfFirst { it.tickAbsolute >= currentTickPos } .takeIf { it >= 0 } ?: events.size - if (targetIdx > idx) { - idx = targetIdx - } needsClockSync = false } @@ -699,9 +696,8 @@ actual class FMediaPlayer actual constructor( }.sortedBy { step -> when { step.isHold -> 0 - step.isTempoChange -> 1 - step.isFarany -> 1 - step.dynamic != null || step.hairPin != null -> 1 + step.newBpm != null || step.newKey != null || step.isFarany -> 1 + step.isTempoChange || step.hairPin != null || step.dynamic != null -> 2 else -> 3 } } @@ -808,6 +804,9 @@ actual class FMediaPlayer actual constructor( allNotesOff() seekToGrid(step.targetGrid) + + currentTickPos = step.targetGrid.toLong() * resolution + needsClockSync = true isHolding = false for (ch in 0 until 4) controlChange(ch, 64, 0) diff --git a/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt b/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt index 5ba3100..0c9e5e4 100644 --- a/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -558,6 +558,13 @@ actual class FMediaPlayer actual constructor( val currentSteps = navigationSteps.filter { it.gridIndex == currentIndex && !it.alreadyDone + }.sortedBy { step -> + when { + step.isHold -> 0 + step.newBpm != null || step.newKey != null || step.isFin -> 1 + step.isTempoChange || step.hairPin != null || step.dynamic != null -> 2 + else -> 3 + } } for (step in currentSteps) { if (Math.abs(sequencer!!.tempoInBPM - targetBpm) > 0.1 && !isInTempoChange) {