@@ -7,6 +7,8 @@ import functools
|
||||
import generator.model
|
||||
import generator.rhythm
|
||||
|
||||
ATTACKS_PER_BEAT = {'bass': fractions.Fraction(1, 2), 'upper': fractions.Fraction(3, 4), 'electric': fractions.Fraction(1, 2)}
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Context:
|
||||
measure: dict
|
||||
@@ -75,7 +77,7 @@ def measure_rank(bar, offset, intervals, melody_attacks, melody_spans, companion
|
||||
missing_bars = int(bool(intervals) and not spans and role != 'electric')
|
||||
uncovered = sum(not any(start < b and end > a for start, end in spans) for a, b in intervals)
|
||||
duration = sum((b - a for a, b in intervals), fractions.Fraction())
|
||||
density = abs(len(attacks) - duration / {'electric': 2, 'bass': 2, 'upper': 1}[role])
|
||||
density = abs(len(attacks) - duration * ATTACKS_PER_BEAT[role])
|
||||
collisions = sum((t in melody_attacks) + (t in companions) for t in attacks)
|
||||
occupied = sum(any(a <= t < b for a, b in melody_spans) for t in attacks)
|
||||
pulse = -sum(2 if t == 0 else 1 if t.denominator == 1 else 0 for t in attacks)
|
||||
|
||||
Reference in New Issue
Block a user