Fix! transpose note&octave on modulation '>..>..'

This commit is contained in:
Hasinjato 2026-09-02 14:01:21 +03:00
parent 9b783200df
commit dcc5a67818
2 changed files with 18 additions and 10 deletions

View file

@ -48,9 +48,11 @@ class TUNote (private val detailNote: MutableList<Note> = mutableListOf()){
.replace(Regex(",-$"), "")
.replace(Regex("(- *,z|- *,-|0$)"), "-")
.replace(Regex("([^\\.,])-"), "$1")
.replace(Regex("(?<=[drmfsltia]),,,,"), "₄")
.replace(Regex("(?<=[drmfsltia]),,,"), "₃")
.replace(Regex("(?<=[drmfsltia]),,"), "₂")
.replace(Regex("(?<=[drmfsltia]),"), "₁")
.replace("''''", "⁴")
.replace("'''", "³")
.replace("''", "²")
.replace("'", "¹")
@ -60,13 +62,24 @@ class TUNote (private val detailNote: MutableList<Note> = mutableListOf()){
.replace(Regex("^-.- *,"), "-. ,")
.replace(Regex("(?<!,[drmfslt])\\.-\\s*$"), "")
.replace(Regex(" ,-\\s*$"), "")
.replace(Regex("\\((-[\\.,;][a-zA-Z][ia]*[¹²³₁₂₃]?)\\)"), "$1")
.replace(Regex("\\((-[\\.,;][a-zA-Z][ia]*[₁₂₃₄¹²³⁴]?)\\)"), "$1")
.replace(Regex("^-\\.z$"), "")
.replace("-", "―")
.replace(".", "\u2022")
.replace("z", "")
if ((fromKey != "") && (toKey != "")) {
result = ">" + Transpose.transposeToSolfa(result, toKey, fromKey) + ">" + result
val originalResult = result
val firstNoteMatch = Regex("([drmfslt][ia]?)([₄₃₂₁¹²³⁴',]*)").find(originalResult)
if (firstNoteMatch != null) {
val firstNote = firstNoteMatch.value
val transposedFirst = Transpose.transposeToSolfa(firstNote, fromKey = fromKey, toKey = toKey)
result = ">$transposedFirst>$originalResult"
} else {
result = ""
}
}
return result
}

View file

@ -49,7 +49,7 @@ class Transpose {
val oldIdx = noteToNumber.indexOf(oldNoteCore)
val newIdx = noteToNumber.indexOf(newNoteCore)
currentModulationInterval = newIdx - oldIdx
//currentModulationInterval = newIdx - oldIdx
val transposedOld = transpose(note = oldNoteCore + oldOctave, fromKey = "C", toKey = "C", alter = interval)
val transposedNew = transpose(note = newNoteCore + newOctave, fromKey = "C", toKey = "C", alter = interval)
@ -66,7 +66,7 @@ class Transpose {
val calculatedToKey = keyToNumber[targetKeyIndex]
val transposedBody = NOTE_UNIT_REGEX.replace(remaining) { matchResult ->
val fullNote = matchResult.value
transpose(note = fullNote, fromKey = "C", toKey = calculatedToKey)
transpose(note = fullNote, fromKey = calculatedToKey, toKey = "C")
}
val result = separators + transposedBody
@ -207,12 +207,7 @@ class Transpose {
val newKey = keyToNumber.indexOf(toKey)
if (oldKey == -1 || newKey == -1) return note
var keyShift = newKey - oldKey
if (keyShift > 6) {
keyShift -= 12
} else if (keyShift < -6) {
keyShift += 12
}
var keyShift = oldKey - newKey
var newNoteNum = noteNum + keyShift + alter
var octaveShift = 0