Resolve default dynamic to ZERO 1.0 on MidiPlayer

This commit is contained in:
Hasinjato 2026-10-07 16:04:27 +03:00
parent 38edfe4834
commit 2ca6b2039a

View file

@ -141,7 +141,7 @@ actual class FMediaPlayer actual constructor(
private var tempoChangeJob: Job? = null
private val voiceVolumes = FloatArray(4) { 127f }
private var currentGlobalVolume: Float = 0.8f
private var currentDynamicFactor: Float = Dynamic.MF.factor
private var currentDynamicFactor: Float = Dynamic.ZERO.factor
private var transpositionSemitones: Int = 0
private var pointA: Long = -1L
@ -225,7 +225,7 @@ actual class FMediaPlayer actual constructor(
}
}
private fun applyDynamic(dynamic: Dynamic) {
applyDynamicSmooth(if (dynamic == Dynamic.MF) 1.0f else dynamic.factor, 300L)
applyDynamicSmooth(dynamic.factor, 300L)
}
private fun applyDynamicSmooth(targetFactor: Float, durationMs: Long = 300L) {
dynamicJob?.cancel()
@ -306,7 +306,7 @@ actual class FMediaPlayer actual constructor(
it.label == marker.trim().removeSuffix("=").trim()
}
fun factorToDynamic(factor: Float) =
Dynamic.entries.minByOrNull { kotlin.math.abs(it.factor - factor) } ?: Dynamic.MF
Dynamic.entries.minByOrNull { kotlin.math.abs(it.factor - factor) } ?: Dynamic.ZERO
fun nextDynamic(currentFactor: Float, symbol: Char): Float {
val idx = Dynamic.entries.indexOf(factorToDynamic(currentFactor))
return if (symbol == '<') Dynamic.entries.getOrElse(idx+1){Dynamic.FFF}.factor
@ -442,8 +442,8 @@ actual class FMediaPlayer actual constructor(
sharedScreenModel.setBpmFlow(initialOrPreviousBpm)
val lastDyn = navigationSteps
.filter { it.dynamic != null && it.gridIndex <= gridIndex }
.maxByOrNull { it.gridIndex }?.dynamic ?: Dynamic.MF
currentDynamicFactor = if (lastDyn == Dynamic.MF) 1.0f else lastDyn.factor
.maxByOrNull { it.gridIndex }?.dynamic ?: Dynamic.ZERO
currentDynamicFactor = lastDyn.factor
navigationSteps.forEach { step ->
if (step.gridIndex > gridIndex) {
if (step.isFarany) {
@ -472,7 +472,7 @@ actual class FMediaPlayer actual constructor(
val metadataList = sharedScreenModel.getFullMarkers()
navigationSteps.clear()
var lastSegno=0;
var lastFactor=Dynamic.MF.factor
var lastFactor=Dynamic.ZERO.factor
val ritRegex = Regex("""rit\.?|ritard\.?|ritenuto\.?|ritardando""", RegexOption.IGNORE_CASE)
val rallRegex = Regex("""rall\.?|rallent\.?|rallentando""", RegexOption.IGNORE_CASE)
val dsR = Regex("""D\.?S\.?""");
@ -619,7 +619,7 @@ actual class FMediaPlayer actual constructor(
extractDynamic(marker) != null && mTrim != "=" -> {
val dyn = extractDynamic(marker) ?: return@forEach
lastFactor = if(dyn==Dynamic.MF) 1.0f else dyn.factor
lastFactor = dyn.factor
navigationSteps.add(NavigationStep(marker=marker, gridIndex=ci, dynamic=dyn))
}
@ -928,7 +928,7 @@ actual class FMediaPlayer actual constructor(
playJob?.cancel(); navigationJob?.cancel()
allNotesOff(); currentTickPos = 0L
resetNavigationFlags(); navigationSteps.clear(); clearLoop()
currentDynamicFactor = Dynamic.MF.factor
currentDynamicFactor = Dynamic.ZERO.factor
//resetTempoToNormal()
currentPlaybackBpm = targetBpm
usPerTick = (60_000_000.0 / targetBpm.toDouble()) / resolution.toDouble()