Comping Gen
This commit is contained in:
@@ -9,6 +9,7 @@ import generator.harmony
|
||||
import generator.model
|
||||
import generator.musicxml
|
||||
import generator.score
|
||||
import generator.vocabulary
|
||||
import tests.test_musicxml
|
||||
import tests.test_parts
|
||||
|
||||
@@ -23,6 +24,30 @@ def ranked(symbol, melody=(), profile='electric', prune=False):
|
||||
return sorted(candidates, key=lambda shape: (generator.guitar.voicing_cost(shape, profile, requirements.allowed, melody), shape))
|
||||
|
||||
class VoicingTests(unittest.TestCase):
|
||||
def test_melody_preferences_cannot_purchase_a_lower_priority_string(self):
|
||||
resources = generator.vocabulary.load()
|
||||
with generator.vocabulary.using(resources, 'electric_melody', {'voicing': {'register_weight': 1000, 'high_position_weight': 1000}}):
|
||||
for symbol, melody in (('C7', (67,)), ('FM7', (69,)), ('Cm7', (70,))):
|
||||
candidates = ranked(symbol, melody)
|
||||
primary = [c for c in candidates if generator.fretboard.span_penalty(c) == generator.fretboard.span_penalty(candidates[0])]
|
||||
self.assertEqual(min(p.string_number for p in candidates[0] if p.midi in melody), min(p.string_number for c in primary for p in c if p.midi in melody))
|
||||
self.assertTrue(set(melody) <= {p.midi for p in candidates[0]})
|
||||
def test_melody_preference_cost_and_pruning_caches_include_role_settings(self):
|
||||
resources = generator.vocabulary.load()
|
||||
shape = grip((10, 12, 11, 12))
|
||||
original = generator.guitar.voicing_cost(shape, 'electric', melody=(76,))
|
||||
preference = generator.guitar.voicing_preferences(shape, generator.guitar.voicing_preference('electric_melody'))
|
||||
with generator.vocabulary.using(resources, 'electric_melody', {'voicing': {'register_weight': 0, 'high_position_weight': 0}}):
|
||||
plain = generator.guitar.voicing_cost(shape, 'electric', melody=(76,))
|
||||
self.assertEqual(original.effort - plain.effort, sum(preference))
|
||||
self.assertEqual(original[:6], plain[:6])
|
||||
self.assertEqual(original, generator.guitar.voicing_cost(shape, 'electric', melody=(76,)))
|
||||
for center in (45, 76, 45):
|
||||
with generator.vocabulary.using(resources, 'electric_melody', {'center': center}):
|
||||
best = {}
|
||||
for candidate in ranked('C7', (72,)):
|
||||
best.setdefault(generator.guitar.position_center(candidate), candidate)
|
||||
self.assertEqual(set(ranked('C7', (72,), prune=True)), set(best.values()))
|
||||
def test_electric_chords_use_the_shared_four_fret_limit(self):
|
||||
for prune in (False, True):
|
||||
candidates = ranked('CM7', prune=prune)
|
||||
|
||||
Reference in New Issue
Block a user