Fix parsing of G#. Tweak large print stylesheet.

This commit is contained in:
2025-06-03 01:13:11 -05:00
parent 9741c55cee
commit 97ef8a7491
4 changed files with 41 additions and 12 deletions

View File

@ -270,23 +270,49 @@ func ionianPitch*(key: Key, degreeNumber: int): Pitch =
cast[Pitch]((ord(key.tonic.toPitch) + MajorIntervals[degreeNumber - 1]) mod 12)
func spellPitch*(key: Key, sd: ScaleDegree): SpelledPitch =
func spellPitch*(k: Key, sd: ScaleDegree): SpelledPitch =
## Given a key and scale degree, spell it correctly in that key. For example,
## the ♭7 in C major is spelled B♭, the ♭7 in key of Db Locrian is spelled
## B𝄫, and the ♭7 in F# major is E.
result.note = key.tonic.note + (sd.number - 1)
let resultingPitch = ord(ionianPitch(key, sd.number)) + ord(sd.alteration)
result.note = k.tonic.note + (sd.number - 1)
let resultingPitch = ord(ionianPitch(k, sd.number)) + ord(sd.alteration)
result.alteration = cast[NoteAlteration](
resultingPitch - ord(result.note.toPitch))
#[
debugEcho "Spelling " & $sd & " in the key of " & $k & ":\n" &
"\tsd.alteration: " & $ord(sd.alteration) &
"\tkey.tonic.note: " & $k.tonic.note &
"\tsd.number - 1: " & $(sd.number - 1) &
"\tionianPitch: " & $ionianPitch(k, sd.number) &
"\tord(ionianPitch): " & $ord(ionianPitch(k, sd.number)) &
"\talteration: " & $ord(sd.alteration) &
"\tresultingPitch: " & $resultingPitch &
"\tresult.note: " & $(result.note) &
"\tresult.alteration: " & $ord(result.alteration)
]#
func toScaleDegree*(key: Key, sp: SpelledPitch): ScaleDegree =
func toScaleDegree*(k: Key, sp: SpelledPitch): ScaleDegree =
## Determine the ScaleDegree of a pitch according to how it is spelled and
## the key it is in. For example, Pitch.B will be the ♮2 in the key of A
## major, the ♭2 in the key of A# major, or the #1 in the key of B♭ major.
result.number = sp.note - key.tonic.note + 1
result.alteration = cast[NoteAlteration](
ord(sp.toPitch) - ord(ionianPitch(key, result.number)))
result.number = sp.note - k.tonic.note + 1
var distance = ord(sp.toPitch) - ord(ionianPitch(k, result.number))
if distance < -2: distance += 12
elif distance > 2: distance -= 12
result.alteration = cast[NoteAlteration](distance)
#[
debugEcho "toScaleDegree: " & $sp & " in the key of " & $k & ":\n" &
"\tsp.note: " & $sp.note &
"\tkey.tonic.note: " & $k.tonic.note &
"\tresult.number: " & $result.number &
"\tsp.toPitch: " & $sp.toPitch &
"\tionianPitch: " & $ionianPitch(k, result.number) &
"\tord(sp.toPitch): " & $ord(sp.toPitch) &
"\tord(ionianPitch): " & $ord(ionianPitch(k, result.number)) &
"\tresult.alteration: " & $ord(result.alteration)
]#
func transpose*(k: Key, steps: int): Key =