@@ -12,11 +12,16 @@ class HarmonySpan:
|
||||
harmony: dict
|
||||
location: str
|
||||
notes: list[dict] = dataclasses.field(default_factory=list)
|
||||
iteration: int = 0
|
||||
|
||||
def harmony_spans(document: dict) -> list[HarmonySpan]:
|
||||
"""Group attacks by continuous harmony, including changes during silence."""
|
||||
"""Group attacks by continuous harmony within each arrangement iteration."""
|
||||
spans, span, active = [], None, None
|
||||
iteration = 0
|
||||
for measure in document['staves'][0]['measures']:
|
||||
if measure.get('section_label'):
|
||||
iteration += 1
|
||||
span = None
|
||||
if {v['id'] for v in measure['voices']} != {'bass', 'upper'}:
|
||||
span, active = None, None
|
||||
continue
|
||||
@@ -30,7 +35,7 @@ def harmony_spans(document: dict) -> list[HarmonySpan]:
|
||||
if kind == 0:
|
||||
continue
|
||||
if span is None:
|
||||
span = HarmonySpan(harmony, f'measure {measure["number"]}, event {item["id"]}, onset {onset}')
|
||||
span = HarmonySpan(harmony, f'measure {measure["number"]}, event {item["id"]}, onset {onset}', iteration=iteration)
|
||||
spans.append(span)
|
||||
span.notes.append(item)
|
||||
return spans
|
||||
|
||||
Reference in New Issue
Block a user