Chord Families

This commit is contained in:
khodowany
2026-10-06 03:18:02 -05:00
parent e71385dad1
commit 8423f3d788
14 changed files with 196 additions and 57 deletions
+5 -3
View File
@@ -41,11 +41,13 @@ class GuitarPartTests(unittest.TestCase):
self.assertNotIn(0, generator.fretboard.chord_requirements(chord, respect_bass=False).required)
candidates = generator.guitar.chord_positions(generator.fretboard.chord_requirements(chord, respect_bass=False), profile='electric')
self.assertTrue(any(all(p.midi % 12 != 0 for p in c) for c in candidates))
def test_power_chord_cannot_expand_span_or_invent_upper_tones(self):
def test_power_chord_uses_four_fret_fallback_without_inventing_tones(self):
requirements = generator.fretboard.chord_requirements(generator.harmony.parse_symbol('C5'))
self.assertEqual(set(requirements.allowed), {0, 7})
self.assertFalse(generator.acoustic_voicing.candidates(requirements))
self.assertFalse(generator.guitar.chord_positions(requirements, profile='electric'))
for candidates in (generator.acoustic_voicing.candidates(requirements), generator.guitar.chord_positions(requirements, profile='electric')):
self.assertTrue(candidates)
self.assertTrue(all(generator.fretboard.fret_span(c) == 4 for c in candidates))
self.assertTrue(all({p.midi % 12 for p in c} == {0, 7} for c in candidates))
def test_acoustic_uses_bass_and_three_upper_notes(self):
result = self.section(tests.test_parts.xml_harmony() + tests.test_musicxml.xml_note(), 'acoustic')
generator.model.validate_document(result)