Comping
This commit is contained in:
@@ -87,7 +87,7 @@ class ChordFamilies(unittest.TestCase):
|
||||
def test_acoustic_policy_change_does_not_reseed_electric_roles(self):
|
||||
resources = generator.vocabulary.load()
|
||||
changed = copy.deepcopy(resources)
|
||||
changed['accompaniment']['instruments']['acoustic']['families']['quarters'] = ['1/2']
|
||||
changed['accompaniment']['instruments']['acoustic']['patterns'][0]['events'][0]['duration'] = '1/2'
|
||||
for role in ('electric_accompaniment', 'electric_melody', 'electric_solo', 'vocal_melody'):
|
||||
self.assertEqual(generator.production.dependencies(role, resources), generator.production.dependencies(role, changed))
|
||||
self.assertNotEqual(generator.production.dependencies('acoustic_accompaniment', resources), generator.production.dependencies('acoustic_accompaniment', changed))
|
||||
@@ -142,16 +142,15 @@ class CombinedAcoustic(unittest.TestCase):
|
||||
m = source['staves'][0]['measures'][0]
|
||||
choices = generator.comping_rhythm.candidates(m, None, 'acoustic', (), 'quarters-eighths')
|
||||
self.assertTrue(all(e.end - e.start in (fractions.Fraction(1, 2), 1) for c in choices for e in c.events))
|
||||
policy = generator.vocabulary.accompaniment('acoustic')
|
||||
upper = generator.comping_rhythm.lane_candidates(m, None, 'upper', (), policy, 'pairs')
|
||||
self.assertTrue(any(b.start - a.start == fractions.Fraction(1, 2) for c in upper for a, b in zip(c.events, c.events[1:])))
|
||||
canonical = generator.comping.Canonical(source, 'acoustic', 'short')
|
||||
self.assertFalse(any(l['tied_continuations'] for row in canonical.rhythm_report for l in row['layers'].values()))
|
||||
for row in canonical.rhythm_report:
|
||||
for event in row['events']:
|
||||
self.assertGreater(fractions.Fraction(event['duration']), 0)
|
||||
def test_unknown_harmony_subdivision_is_not_silently_quantized(self):
|
||||
source = tests.solo_fixtures.song(count=1, chords=('C7',))
|
||||
m = source['staves'][0]['measures'][0]
|
||||
m['harmonies'].append({**generator.harmony.parse_symbol('FM7'), 'id': 'change', 'onset': generator.model.rational(fractions.Fraction(1, 3))})
|
||||
with self.assertRaisesRegex(ValueError, 'no bass rhythm'):
|
||||
with self.assertRaisesRegex(ValueError, 'no acoustic pattern'):
|
||||
generator.comping_rhythm.candidates(m, None, 'acoustic', (), 'exact')
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user