KeyChange
This commit is contained in:
parent
c4cb836bd5
commit
a1c4a34ef0
9 changed files with 128 additions and 8 deletions
|
|
@ -2,7 +2,8 @@
|
|||
"themeMode": "DARK",
|
||||
"fontSize": 18.5,
|
||||
"playlist": [
|
||||
"assets://ff-33.txt",
|
||||
"assets://ffpm-444-2.txt",
|
||||
"assets://ffpm-760.txt",
|
||||
"assets://ews-456.txt",
|
||||
"assets://ews-1.txt",
|
||||
"assets://ews-2.txt",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
M0:|c:Bb|m:6/4|t:FFPM 444 Ry Raiko Feno Antra|a:R. Baron 1847-1907|h:|r:7.6.7.6.D.
|
||||
U0:zK:4 8484 C8/4 8484 (C8)/4 8484 C8/4 84(44)4 K/${c:F}4 8484 C8/4 84(44)4 K/4 8484 C8/4 8484 K/${c:Bb}4 8484 C8/4 8484 (C8)/4 8484 C8/4 84(44)4 K
|
||||
N1:#m,ssslssm/sddrrm'r/rddttld/lsdtltd/#dssslssm/ssrrdrm/ssslssm/ssfmrd/#m,ssslssm/sddrrm'r/rddttld/lsdtltd
|
||||
N2:#d,mmmfmmd/msssss-/fmmSSll/fmsf-fm/#l,d7/dtttltd/mmmfmmd/mmrdtd/#d,mmmfmmd/ms5-/fmmSSll/fmsf-fm
|
||||
N3:#s,dddddds/dddttdt/tdmmrdd/ddmr-rd/mmmfmm#rs/mrss-ss/sddddds/ssssfm/#s,d6s/dddttdt/tdmmrdd/ddmr-rd
|
||||
N4:#d,d7/dmmssd's/sllmmff/fsss-sd/#s,d7/dsss-sd/d7/dssssd/#d,d7/dmmssds/sllmmff/fsss-sd
|
||||
Y1:Ry Raiko feno antra!/Inty ny zanakao,/Ny foko dia mahantra/Ra\ha lavitra\ aminao;/Fa tany karankaina/Izao tontolo\ izao/Ka reraka ny aina/Mihataka\ aminao.${R=}Ry Raiko feno antra!/Inty ny zanakao,/Ny foko dia mahantra/Ra\ha lavitra\ aminao.
|
||||
Y2:Nivezivezy aho/Nikaro-java-tsoa,/Izay rehetra hita/Nandramana\ avokoa;/Nandany taona maro/Nanaran-tsitrapo,/Kanefa tsy nahazo/Izay mahafa-po./Ry Raiko feno antra!
|
||||
Y3:Mamitaka mihitsy/Izao tontolo\ izao,/Ny mamy dia mangidy,/I\zay tena soa tsy ao;/Koa aza mba\ adalainy/Intsony re, ny fo!/Andeha mba ho hendry/Hatramin’ny anio./Ry Raiko feno antra!
|
||||
Y4:Ry Jeso, Mofon’aina/Sy ranon’aina koa/Hianao no mahatony/Izay filan’ny fo;/Hianao no mahavoky/Hianao no manome/Izay irin’ny foko,/Dia hasambaram-be/Ry Raiko feno antra!
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
M0:|c:A|m:6/4|t:FFPM 760 Aza Mba Manadino|a:J. Richardson 1844-1922|h:(Old. St. Co., p. 71)|r:P.M.
|
||||
U0:z0:444(44)4 C84 8484 K/4 84(44)4 C84 8484 K/4 8484 C84 8484 Kz4/ 444(44)4 C84 8484 Kz4/ ${p}4448z4 ${f}4448z4 /${ff}44484 8484 8484 O
|
||||
N1:#s,m4-rdldsdmdr/rmmm-rdldtdmrd/drrrmfrrsmdmr/m4-rdldtdmrd/r4m4/fffmml's'frtdmrd
|
||||
N2:#f,sssd-tlfls5/sssd-tlfls5/dtttdrttd4t/sssd-tlfls5/s8/d8ls5
|
||||
N3:#t,d4-d8t/tddd-d3frmsfm/ms12/d4-d3frmsfm/t4d4/d5fslfrmsfm
|
||||
N4:#d,d4rmfffmmdms/sdddrmfffs4d'/d's7mmmds/d4rmfffs4d/s4d4/l3ssfmffs4d
|
||||
Y1:Aza mba manadino ny ray sy reninao;/Fa izy no nitaiza sy nanasoa anao;/Ka na\ aiza na\ aiza\ aleha an-tany lavitra,/Aza mba manadino ny ray sy reninao;/Tsara izay! Tsara izay!/Eny, tsy ho hadinonay/Ny ray sy reninay.
|
||||
Y2:Aza mba manadino ny tanindrazanao,/Tsarovy ny tanàna i\zay nahabe anao;/Fadio izay tsy mety fanaony fahizay,/Aza mba manadino/Ny tanindrazanao:/Tsara izay! Tsara izay!/Eny, tsy ho hadinonay/Ny tanindrazanay.
|
||||
Y3:Aza mba manadino ireo mpitondra\ anao,/Araho ny lalàna mba hi_adananao:/Ka na\ aiza na\ aiza\ aleha an-tany lavitra,/Aza mba manadino/Ireo mpitondra\ anao:/Tsara izay! Tsara izay!/Eny, tsy ho hadinonay/Izay mpitondra\ anay.
|
||||
Y4:Aza mba manadino ny fivavahanao,/Ataovy isan’andro mba hamonjena\ anao;/Mpitondra, ray sy reny ny tany, tena koa,/Aza mba manadino ny fivavahanao:/Tsara izay! Tsara izay!/Eny, tsy ho hadinonay/Ny fivavahanay.
|
||||
|
|
@ -71,6 +71,7 @@ class AnnotatedTUO (originalString: String, val voiceNumber: Int){
|
|||
'[' -> toggleInSquareParen(voiceNumber, true, x)
|
||||
')' -> toggleInRoundParen(voiceNumber, false, x)
|
||||
']' -> toggleInSquareParen(voiceNumber, false, x)
|
||||
'>' -> {}
|
||||
else -> {
|
||||
x++
|
||||
finalText += it
|
||||
|
|
|
|||
|
|
@ -5,15 +5,27 @@ class PTemplate (val template: String, val separatorAfter: String, private val m
|
|||
return markers.contains(marker)
|
||||
}
|
||||
fun markerToString(): String {
|
||||
if (markers.size == 0) {
|
||||
if (markers.isEmpty()) {
|
||||
return ""
|
||||
}
|
||||
return markers.joinToString(separator = "") {
|
||||
it.replace(Regex("^\\$\\{([a-z]:)?(.*)\\}"), "$2")
|
||||
it.replace(Regex("^\\$\\{([abd-z]:)?(.*)\\}"), "$2")
|
||||
.replace("\$Q", "\uD834\uDD10")
|
||||
.replace(Regex("^[<=>]$"), "")
|
||||
.replace($$"$T", "")
|
||||
.replace(Regex("^c:(.*)"), "Do dia $1")
|
||||
}
|
||||
}
|
||||
fun hasKeyChange(): String {
|
||||
var returnFun = ""
|
||||
markers.map {
|
||||
val regexFound = Regex("^\\$\\{c:(..?)\\}").find(it)
|
||||
if (regexFound != null) {
|
||||
returnFun = regexFound.groupValues[1]
|
||||
}
|
||||
true
|
||||
}
|
||||
return returnFun
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -18,11 +18,12 @@ class ParseULine (var line: String, var measure: Int) {
|
|||
}
|
||||
|
||||
fun parsed() : String {
|
||||
val matchResult = Regex("^z([048C]):(.+)$").find(line)
|
||||
val matchResult = Regex("^z([048CK]):(.+)$").find(line)
|
||||
if (matchResult != null) {
|
||||
val capturedChar = matchResult.groups[1]!!.value
|
||||
cursorX = when (capturedChar) {
|
||||
"C" -> 12
|
||||
"K" -> 20
|
||||
else -> capturedChar.toInt()
|
||||
}
|
||||
line = matchResult.groups[2]!!.value
|
||||
|
|
@ -84,6 +85,9 @@ class ParseULine (var line: String, var measure: Int) {
|
|||
charX = it
|
||||
}
|
||||
'W' -> repeat(8) { parseUStage2('4')}
|
||||
'S' -> repeat(7) { parseUStage2('4')}
|
||||
'O' -> repeat(6) { parseUStage2('4')}
|
||||
'K' -> repeat(5) { parseUStage2('4')}
|
||||
'G' -> repeat(4) { parseUStage2('4') }
|
||||
'C' -> repeat(3) { parseUStage2('4') }
|
||||
'8' -> repeat(2) { parseUStage2('4') }
|
||||
|
|
|
|||
|
|
@ -32,13 +32,16 @@ class TUNote (private val detailNote: MutableList<Note> = mutableListOf()){
|
|||
}
|
||||
fun annotate(voiceNumber: Int) {
|
||||
val annotatedTUO = AnnotatedTUO(this.toString(), voiceNumber)
|
||||
annotations = if (annotatedTUO.underlineSpec.size > 0) {
|
||||
annotations = if (annotatedTUO.underlineSpec.isNotEmpty()) {
|
||||
annotatedTUO
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
override fun toString() : String {
|
||||
return toString("", "")
|
||||
}
|
||||
fun toString(fromKey: String = "", toKey: String = "") : String {
|
||||
var result = detailNote.joinToString (separator = ""){ it.toString() }
|
||||
.replace(Regex("\\. *,-$"), "")
|
||||
.replace(Regex(",-$"), "")
|
||||
|
|
@ -57,6 +60,9 @@ class TUNote (private val detailNote: MutableList<Note> = mutableListOf()){
|
|||
.replace("-", "―")
|
||||
.replace(".", "\u2022")
|
||||
.replace("z", "")
|
||||
if ((fromKey != "") && (toKey != "")) {
|
||||
result = ">" + Transpose.transpose(result, fromKey, toKey) + ">" + result
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
|
@ -36,6 +36,10 @@ import mg.dot.feufaro.data.GridTUOData
|
|||
import kotlin.math.min
|
||||
import androidx.compose.ui.geometry.Size
|
||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.BaselineShift
|
||||
import androidx.compose.ui.text.withStyle
|
||||
|
||||
val FEUFAROO_TRIOLET_COLOR = Color.DarkGray
|
||||
class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) {
|
||||
|
|
@ -46,6 +50,9 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) {
|
|||
val numBlock: Int
|
||||
var markerBefore: String = ""
|
||||
private var annotated : Boolean
|
||||
var transposeNewKey: String = ""
|
||||
var transposeOldKey: String = ""
|
||||
|
||||
companion object {
|
||||
var nbBlock: Int = 0
|
||||
var sep1: String = ""
|
||||
|
|
@ -150,9 +157,18 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) {
|
|||
else -> ""
|
||||
}
|
||||
val markersBefore = ""//pTemplate.template.replace(Regex("[a-yA-Y\\(\\[].*"), "")
|
||||
return tuNotes.drop(1).joinToString (separator = "\n"){
|
||||
separatorBefore + markersBefore + it.toString().replace(Regex("[\\(\\)\\[\\]]"), "")
|
||||
val transposeFrom = pTemplate.hasKeyChange()
|
||||
val transposeTo = if (transposeFrom != "") {
|
||||
transposeOldKey = transposeFrom
|
||||
prevTUO?.transposeOldKey ?: "Bb"
|
||||
} else {
|
||||
transposeOldKey = prevTUO?.transposeOldKey ?: "Bb"
|
||||
"" }
|
||||
|
||||
val retour = tuNotes.drop(1).joinToString (separator = "\n"){
|
||||
separatorBefore + markersBefore + it.toString(transposeFrom, transposeTo).replace(Regex("[\\(\\)\\[\\]]"), "")
|
||||
}
|
||||
return retour
|
||||
}
|
||||
fun annotate() {
|
||||
// We must annotate once, because, annotations can be called asynchronously after first filling
|
||||
|
|
@ -339,8 +355,26 @@ fun TimeUnitComposable(
|
|||
}
|
||||
}
|
||||
){
|
||||
val annotatedText = buildAnnotatedString {
|
||||
multiLineText.split(">").mapIndexed { index, text ->
|
||||
if (index %2 == 0) {
|
||||
append(text)
|
||||
} else {
|
||||
withStyle(
|
||||
style = SpanStyle(
|
||||
fontSize = 10.sp,
|
||||
baselineShift = BaselineShift.Superscript,
|
||||
//fontStyle = FontStyle.Italic,
|
||||
color = Color.Blue
|
||||
)) {
|
||||
append(text+" ")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Text(
|
||||
text = multiLineText + mutableNoteVersionX,
|
||||
text = annotatedText,
|
||||
onTextLayout = { result ->
|
||||
textLayoutResult = result
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
package mg.dot.feufaro.solfa
|
||||
|
||||
class Transpose {
|
||||
companion object {
|
||||
val noteToNumber = listOf("d", "di", "r", "ri", "m", "f", "fi", "s", "si", "l", "ta", "t")
|
||||
val keyToNumber = listOf("C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B" )
|
||||
fun transpose(note: String, fromKey: String, toKey: String): String {
|
||||
val regexFound = Regex("^([drmfslt][ia]?)([¹²³₁₂₃]?)(.*)").find(note)
|
||||
if (regexFound == null) {
|
||||
return note
|
||||
}
|
||||
val noteNaked = regexFound.groupValues[1]
|
||||
val noteNum = noteToNumber.indexOf(noteNaked)
|
||||
val oldKey = keyToNumber.indexOf(fromKey)
|
||||
val newKey = keyToNumber.indexOf(toKey)
|
||||
var newNoteNum = noteNum - newKey + oldKey
|
||||
var suffix = ""
|
||||
val noteSize = noteToNumber.size
|
||||
if (newNoteNum < 0) {
|
||||
newNoteNum += noteSize
|
||||
suffix = ","
|
||||
}
|
||||
if (newNoteNum >= noteSize) {
|
||||
newNoteNum -= noteSize
|
||||
suffix = "'"
|
||||
}
|
||||
val newNote = noteToNumber[newNoteNum] + regexFound.groupValues[2] + suffix
|
||||
return newNote.replace("¹,", "")
|
||||
.replace("¹'", "²")
|
||||
.replace("²,", "¹")
|
||||
.replace("²'", "³")
|
||||
.replace("³,", "²")
|
||||
.replace("₁'", "")
|
||||
.replace("₁,", "₂")
|
||||
.replace("₂'", "₁")
|
||||
.replace("₂,", "₃")
|
||||
.replace("₃'", "₂")
|
||||
.replace(",", "₁")
|
||||
.replace("'", "¹") + regexFound.groupValues[3]
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue