@@ -8,12 +8,13 @@ from unittest.mock import patch
|
||||
|
||||
from generator import harmony
|
||||
from generator.__main__ import generate_assets
|
||||
from generator.arrange.generate import active_chord, arrange_document, generated_voice, propagated_chords
|
||||
from generator.arrange.fretboard import pitches_for_voicing
|
||||
from generator.arrange.generate import arrange_document
|
||||
from generator.parts import active_chord, generated_voice, propagated_chords
|
||||
from generator.guitar import chord_pitches, chord_positions, chord_requirements
|
||||
from generator.model import beat_lengths, fraction, key_from_fifths, pitch_number, rational, validate_document
|
||||
from generator.musicxml import load_musicxml
|
||||
from generator.styles import BUILT_IN_STYLES, canonical_style
|
||||
from generator.transposition import concert_document, shift_pitch, transpose_document
|
||||
from generator.pitch import concert_document, shift_pitch
|
||||
from tests.test_musicxml import parse, notes, xml_note, xml_score
|
||||
|
||||
class MusicModelTests(unittest.TestCase):
|
||||
@@ -30,7 +31,8 @@ class MusicModelTests(unittest.TestCase):
|
||||
for label, expected in cases.items():
|
||||
self.assertEqual(set(harmony.pitch_classes(harmony.parse_symbol(label))), expected, label)
|
||||
for label, essentials in [('G7b9', {11, 5, 8}), ('C13', {4, 10, 9})]:
|
||||
pitches = pitches_for_voicing(label)
|
||||
definition = harmony.parse_symbol(label)
|
||||
pitches = chord_pitches(definition, chord_positions(*chord_requirements(definition))[0])
|
||||
self.assertTrue(essentials.issubset({pitch_number(p) % 12 for p in pitches}), label)
|
||||
with self.assertRaises(ValueError):
|
||||
harmony.parse_symbol('Cunrecognised')
|
||||
@@ -39,8 +41,8 @@ class MusicModelTests(unittest.TestCase):
|
||||
p['alter'] = rational(p['alter'])
|
||||
self.assertEqual(shift_pitch(p, 0, 0), p)
|
||||
self.assertEqual(pitch_number(shift_pitch(p, 1, 2)), pitch_number(p) + 2)
|
||||
source = parse(xml_score(xml_note(), attributes='<key><fifths>-3</fifths><mode>minor</mode></key>'))
|
||||
result = transpose_document(source, 'D')
|
||||
source = parse(xml_score(xml_note(), attributes='<key><fifths>-3</fifths><mode>minor</mode></key><transpose><diatonic>1</diatonic><chromatic>2</chromatic></transpose>'))
|
||||
result = concert_document(source)
|
||||
self.assertEqual(result['metadata']['key_signature'], 'D minor')
|
||||
self.assertEqual(result['metadata']['key']['alterations'], key_from_fifths(-1, 'minor')['alterations'])
|
||||
def test_additive_and_compound_grouping(self):
|
||||
@@ -105,6 +107,7 @@ class MusicModelTests(unittest.TestCase):
|
||||
root = Path(temp)
|
||||
data = root / 'data'
|
||||
(data / 'songs').mkdir(parents=True)
|
||||
(data / 'practice').mkdir()
|
||||
(data / 'songs' / 'bad.xml').write_text(xml_score(xml_note(duration=5)), encoding='utf-8')
|
||||
output = root / 'output'
|
||||
output.mkdir()
|
||||
@@ -129,6 +132,7 @@ class MusicModelTests(unittest.TestCase):
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
data, output = Path(temp) / 'data', Path(temp) / 'output'
|
||||
(data / 'songs').mkdir(parents=True)
|
||||
(data / 'practice').mkdir()
|
||||
source = data / 'songs' / 'fixture.xml'
|
||||
source.write_text(xml_score(xml_note()), encoding='utf-8')
|
||||
args = argparse.Namespace(data_dir=data, output_dir=output, static_assets_dir=Path('package/assets'), check=False)
|
||||
|
||||
Reference in New Issue
Block a user