From b8b9eda8361ee710ae4f0730b65a8fd840192ace Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Mon, 17 Aug 2026 14:28:22 +0300 Subject: [PATCH] Fix! $ farany DSFin --- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 29 ++++++++++++++----- .../composeResources/files/ff-7.txt | 4 +-- .../kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 7 +++-- 3 files changed, 27 insertions(+), 13 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 20e1d15..81dcd95 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -388,6 +388,7 @@ actual class FMediaPlayer actual constructor( } else { yield() } + if (!isRunning || !isActive) break currentTickPos = ev.tickAbsolute lastEventNano = System.nanoTime() @@ -444,7 +445,7 @@ actual class FMediaPlayer actual constructor( currentTickPos = gridIndex.toLong() * resolution lastEventNano = System.nanoTime() - val initialOrPreviousBpm = if (gridIndex == 0 && userCustomTempo) { + val initialOrPreviousBpm = if (userCustomTempo) { targetBpm } else { navigationSteps @@ -461,6 +462,9 @@ actual class FMediaPlayer actual constructor( navigationSteps.forEach { step -> if (step.gridIndex > gridIndex) { step.alreadyDone = false + if (step.isFarany) { + step.faranyActive = false + } } } applyVoiceStates() @@ -480,7 +484,10 @@ actual class FMediaPlayer actual constructor( } private fun resetNavigationFlags() { - navigationSteps.forEach { it.alreadyDone = false } + navigationSteps.forEach { + it.alreadyDone = false + it.faranyActive = false + } } private fun prepareNavigation(sharedScreenModel: SharedScreenModel) { @@ -605,10 +612,12 @@ actual class FMediaPlayer actual constructor( // ── Farany ──────────────────────────────── finReg.containsMatchIn(mTrim) -> { - val hasDcAfter = metadataList.any { m -> - (m.gridIndex ?: 0) > ci && m.marker.any { mk -> dcR.containsMatchIn(mk) } + val hasDcOrDsAfter = metadataList.any { m -> + (m.gridIndex ?: 0) > ci && m.marker.any { mk -> + dcR.containsMatchIn(mk) || dsR.containsMatchIn(mk) + } } - if (hasDcAfter) { + if (hasDcOrDsAfter) { navigationSteps.add( NavigationStep( marker, @@ -770,9 +779,13 @@ actual class FMediaPlayer actual constructor( step.isFarany -> { println("C Farany ok $step") if (pendingFin || step.faranyActive) { - println("Farany activé → STOP à grille $currentIndex") - isRunning = false + step.alreadyDone = true + isRunning = false allNotesOff() + playJob?.cancel() + seekToGrid(0) + boundModel?.updateActiveIndexByIndex(0) + println("Farany activé → STOP à grille $currentIndex") onFinished() return@collect } else { @@ -825,7 +838,7 @@ actual class FMediaPlayer actual constructor( val interpolated = (currentTickPos + extraTicks) / resolution val rawGrid = interpolated.toInt().coerceAtLeast(0) //sharedScreenModel.updateActiveIndexByIndex(rawGrid) - if (interpolated.toInt() >= lastSentGrid) { + if (interpolated.toInt() != lastSentGrid) { lastSentGrid = interpolated.toInt() sharedScreenModel.updateActiveIndexByIndex(interpolated.toInt()) } diff --git a/composeApp/src/commonMain/composeResources/files/ff-7.txt b/composeApp/src/commonMain/composeResources/files/ff-7.txt index 81135ee..cd00b3d 100644 --- a/composeApp/src/commonMain/composeResources/files/ff-7.txt +++ b/composeApp/src/commonMain/composeResources/files/ff-7.txt @@ -1,8 +1,8 @@ M0:|c:G|m:6/4|r:P.M|t:FF 7 Tsy hainay ny hangina|a:Ramarolahy Aina Nirina Jaona|h: -U0:zK:4 C444 C84 444444 C84 C444 C84 444444 C8${$}4 ${x7} 444444${x0} K4 444444 (444)84 444444 C84 444444 (444)84 444444 84${D.S}8 +U0:zK:4C444C84444444C84C444C84444444C8${$}${Fiverenana}4444444444444444444444444444444444444444444${Farany}K4444444(444)84444444C84444444(444)8444444484${D.S.Fin}8 N1:s,mmfsls smsmfmrrd mrFmrsr #s,tmrdrtlss sm-3f#t,ls-4 ssrmfsls-4 s,m-3fls-ssfrdsmfmrd d4msmf--d d4mrdsf r4Fmrs--r trrrd#s,tls-- N2:#f,sddrmRm sdddttsss sFdddtt sF6r,f sdstdrRmdrmddt--t-- dmdtdrdsdt-- dmrrdlsddttss T7llTl T7ll d7ttdt sl3F3r,m,f N3:#l,s5Fs ssmdrsffm dr7d4rdtt ssmfs--smfsmmr--f-- msmrmfsmmf-- msT'T'l'fmmsrsfm m4smsddrd m4sfmdd F4l'Fl'rrmr rF3rrdtdr N4:#r,sd6 s7dd ddllFss sr6ss sdmsd-- dmsddls--s-- ddmslt d3s--dmmfrs7d, d7f4 d7ff r'7s4 r'4r3slt -Y1:Tsy hainay ny hangina/Ka tsy hankalaza ny Avo/Nameno fitahiana/Ka tsy mba namela ho lavo.${R=}Ka de_4ra ry Ray!_5/Sy saotra no\ atolotra\ Anao_5/ny fo_4tena fa_2ly loatra no entinay midera\ Anao./Ny sainay tsy ampy\ hahalala/Ny fatran’ny fitiavana_o/Ka raiso ry Tompo Malala/Ny fankasitrahana\ Anao (ry Ray). +Y1:Tsy hainay ny hangina/Ka tsy hankalaza ny Avo/Nameno fitahiana/Ka tsy mba namela ho lavo.${R=}Ka de_4ra ry Ray!_4/Sy saotra no\ atolotra\ Anao_4/ny fo_4tena fa_2ly loatra no entinay midera\ Anao./Ny sainay tsy ampy\ hahalala/Ny fatran’ny fitiavana_o/Ka raiso ry Tompo Malala/Ny fankasitrahana\ Anao (ry Ray). Y2:Tsy hainay hadinoina/‘Lay fara-fitiavanao, Ray o!/Fa maty novonoina/Ny Zanakao hamonjy anay./ 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 da18439..5ba3100 100644 --- a/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -405,7 +405,7 @@ actual class FMediaPlayer actual constructor( } // Farany finReg.containsMatchIn(mTrim) -> { - val hasDcAfter = metadataList.any { m -> + val hasDcOrDsAfter = metadataList.any { m -> val after = (m.gridIndex ?: 0) > currentIndex println( @@ -413,14 +413,15 @@ actual class FMediaPlayer actual constructor( ) val hasMarker = m.marker.any { mk -> - dcRegex.matches(mk.trim()) + dcRegex.containsMatchIn(mk) || dsRegex.containsMatchIn(mk) } println("after=$after, hasMarker=$hasMarker, result=${after && hasMarker}") after && hasMarker } - if (hasDcAfter) { + + if (hasDcOrDsAfter) { navigationSteps.add( NavigationStep( marker = marker,