From 057b8b0333ecf29d5ca2942219f5cb4ed72593c5 Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Thu, 17 Sep 2026 16:13:05 +0300 Subject: [PATCH] Add "p" meta for bpm song metadata --- .../src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 4 ++-- .../src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt | 5 ++++- .../src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt | 4 ++-- 3 files changed, 8 insertions(+), 5 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 51a3a51..c42de51 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -132,8 +132,8 @@ actual class FMediaPlayer actual constructor( @Volatile private var isHolding = false private var currentTickPos: Long = 0L private var lastEventNano: Long = System.nanoTime() - private var targetBpm: Float = 120f - private var initialBpm: Float = 120f + private var targetBpm: Float = sharedScreenModel.currentBpmFlow.value + private var initialBpm: Float = sharedScreenModel.currentBpmFlow.value @Volatile private var currentPlaybackBpm: Float = 120f @Volatile private var isInTempoChange: Boolean = false diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt index 44104ad..58b8459 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt @@ -242,6 +242,8 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository parseOneLine(line) } } + val songBpm = meta["p"]?.toFloatOrNull() ?: 120f + sharedScreenModel.setBpmFlow(songBpm) unparsedNote.forEach { preloadN(it) } @@ -278,10 +280,11 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository ) val originalKey = sharedScreenModel.songKey.value val transposedKey = Transpose.transposeKey(baseKey = originalKey, interval = transpI) + val initialSongBpm = meta["p"]?.toFloatOrNull() ?: bpm midiWriter.process( pitchesSorted, sharedScreenModel.getFullMarkers(), - initialBpm = bpm, + initialBpm = initialSongBpm, instruments, initialKey = transposedKey ) 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 976f3c5..03472cd 100644 --- a/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt +++ b/composeApp/src/desktopMain/kotlin/mg/dot/feufaro/midi/MidiPlayer.kt @@ -35,8 +35,8 @@ actual class FMediaPlayer actual constructor( private var currentDynamicVelocity: Int = Dynamic.MF.velocity private var currentDynamicFactor: Float = Dynamic.MF.factor - private var targetBpm: Float = 120f - private var initialBpm: Float = 120f + private var targetBpm: Float = sharedScreenModel.currentBpmFlow.value + private var initialBpm: Float = sharedScreenModel.currentBpmFlow.value private val playerScope = CoroutineScope(Dispatchers.Default + SupervisorJob()) private var abJob: Job? = null