Fret Limit
This commit is contained in:
@@ -62,8 +62,10 @@ def select(spans: list[generator.acoustic.HarmonySpan]) -> list[Voicing]:
|
||||
try:
|
||||
requirements = generator.fretboard.chord_requirements(span.harmony)
|
||||
options = candidates(requirements, generator.harmony.is_triad(span.harmony))
|
||||
lanes = {n['_guitar_lane'] for n in span.notes}
|
||||
options = tuple(v for v in options if ('bass' not in lanes or v.bass.fret <= generator.fretboard.MAX_SINGLE_FRET) and ('upper' not in lanes or generator.fretboard.has_fret_anchor(v[1:])))
|
||||
if not options:
|
||||
raise ValueError(f'no acoustic grip on strings 2-4 plus bass 5 or 6 within frets {generator.fretboard.MIN_FRET}-{generator.fretboard.MAX_FRET}, at most {generator.fretboard.MAX_FRET_SPAN} consecutive fret positions, and at least one fret <= {generator.fretboard.MAX_ANCHOR_FRET}')
|
||||
raise ValueError(f'no acoustic grip on strings 2-4 plus bass 5 or 6 within frets {generator.fretboard.MIN_FRET}-{generator.fretboard.MAX_FRET}, at most {generator.fretboard.MAX_FRET_SPAN} consecutive fret positions; played bass notes need frets 1-{generator.fretboard.MAX_SINGLE_FRET} and played upper chords need their own anchor <= {generator.fretboard.MAX_ANCHOR_FRET}')
|
||||
except ValueError as error:
|
||||
raise ValueError(f'{span.location}, {generator.harmony.symbol(span.harmony)}: {error}') from error
|
||||
states = advance(options, requirements, states)
|
||||
@@ -92,3 +94,4 @@ def place(document: dict) -> None:
|
||||
for field in ('_harmony', '_guitar_profile', '_guitar_lane'):
|
||||
note.pop(field, None)
|
||||
document['staves'][0]['tablature'] = True
|
||||
generator.fretboard.validate_document(document)
|
||||
|
||||
Reference in New Issue
Block a user