Shared Catalog
This commit is contained in:
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from fractions import Fraction
|
||||
|
||||
from generator.model import LETTERS, TYPE_LENGTHS, alteration, fraction
|
||||
from generator.model import LETTERS, TYPE_LENGTHS, alteration, fraction, key_from_fifths
|
||||
from generator.engraving.fonts import Fonts
|
||||
from generator.engraving.notation import ScoreIndex, accidental
|
||||
from generator.engraving.types import Primitive, bounds, line
|
||||
@@ -32,7 +32,8 @@ def staff_attributes(index: ScoreIndex, state: dict, time: Fraction, fonts: Font
|
||||
cancellation = key.get('cancel', 0)
|
||||
if cancellation:
|
||||
order = 'fcgdaeb' if cancellation > 0 else 'beadgcf'
|
||||
steps = [{'letter': c, 'alter': 0} for c in order[:min(7, abs(cancellation))]] + steps
|
||||
old = key_from_fifths(cancellation)['alterations']
|
||||
steps = [{'letter': c, 'alter': 0} for c in order if alteration(old[LETTERS.index(c)]) and alteration(old[LETTERS.index(c)]) != alteration(key['alterations'][LETTERS.index(c)])] + steps
|
||||
for step in steps:
|
||||
pitch = {'letter': step['letter'], 'octave': step.get('octave', 5), 'id': source}
|
||||
position = index.pitch_position(pitch, time)
|
||||
|
||||
@@ -24,7 +24,7 @@ def practice_document(document: dict) -> dict:
|
||||
output_measure['voices'] = voices
|
||||
measures.append(output_measure)
|
||||
tuplets = reidentify(measures, staff.get('tuplets', []))
|
||||
return make_arranged_document(
|
||||
result = make_arranged_document(
|
||||
document,
|
||||
staff,
|
||||
staff_id="staff-arranged-practice",
|
||||
@@ -35,6 +35,8 @@ def practice_document(document: dict) -> dict:
|
||||
tuplets=tuplets,
|
||||
octave_shifts=staff.get('octave_shifts', []),
|
||||
)
|
||||
result['metadata'].setdefault('authored_key_signature', document['metadata']['key_signature'])
|
||||
return result
|
||||
|
||||
def key_file_name(key: str) -> str:
|
||||
return slugify(key.replace("#", "sharp")) + ".json"
|
||||
|
||||
@@ -78,6 +78,12 @@ def shift_key(key: dict, steps: int, semitones: int) -> dict:
|
||||
break
|
||||
else:
|
||||
result['custom'] = True
|
||||
if 'cancel' in key:
|
||||
# A cancellation references the old signature, not a count of naturals.
|
||||
cancelled = shift_key(key_from_fifths(key['cancel']), steps, semitones)
|
||||
if cancelled.get('custom'):
|
||||
raise ValueError('transposed key cancellation cannot be represented by fifths')
|
||||
result['cancel'] = cancelled['fifths']
|
||||
return result
|
||||
|
||||
def transposition_interval(document: dict, target_key_name: str) -> tuple[int, int]:
|
||||
|
||||
Reference in New Issue
Block a user