def test_performance_attrs_freeze_unfreeze(): # Initial state is not frozen. User must explicitly freeze() perf_attrs = PerformanceAttrs() assert not perf_attrs.is_frozen() perf_attrs.freeze() assert perf_attrs.is_frozen() perf_attrs.unfreeze() assert not perf_attrs.is_frozen()
def test_performance_attrs_dict(): perf_attrs = PerformanceAttrs() perf_attrs.add_attr(ATTR_NAME, ATTR_VAL, ATTR_TYPE) assert {ATTR_NAME: ATTR_VAL} == perf_attrs.as_dict() new_attr_name = ATTR_NAME + '_2' new_attr_val = ATTR_VAL + 100 perf_attrs.add_attr(new_attr_name, new_attr_val, ATTR_TYPE) assert { ATTR_NAME: ATTR_VAL, new_attr_name: new_attr_val } == perf_attrs.as_dict()
def test_performance_attrs_str(): perf_attrs = PerformanceAttrs() perf_attrs.add_attr(ATTR_NAME, ATTR_VAL, ATTR_TYPE) assert f'{ATTR_NAME}: {ATTR_VAL}' == str(perf_attrs) perf_attrs.add_attr(ATTR_NAME + '_2', ATTR_VAL + 100, ATTR_TYPE) assert f'{ATTR_NAME}: {ATTR_VAL} {ATTR_NAME}_2: {ATTR_VAL + 100}' == str( perf_attrs)
def test_performance_attrs_add_attr_set_attr(): # Initial state is not frozen. User must explicitly freeze() perf_attrs = PerformanceAttrs() perf_attrs.add_attr(ATTR_NAME, ATTR_VAL, ATTR_TYPE) # ATTR_NAME = 'test_attr' # noinspection PyUnresolvedReferences assert perf_attrs.test_attr == ATTR_VAL # noinspection PyUnresolvedReferences assert isinstance(perf_attrs.test_attr, ATTR_TYPE) new_attr_val = 200 perf_attrs.safe_set_attr(ATTR_NAME, new_attr_val) # noinspection PyUnresolvedReferences assert perf_attrs.test_attr == new_attr_val with pytest.raises(ValueError): perf_attrs.safe_set_attr('NOT_AN_ATTR_NAME', ATTR_VAL) # noinspection PyUnresolvedReferences assert perf_attrs.test_attr == new_attr_val with pytest.raises(ValueError): perf_attrs.safe_set_attr(ATTR_NAME, float(ATTR_VAL)) # noinspection PyUnresolvedReferences assert perf_attrs.test_attr == new_attr_val
def test_performance_attrs(performance_attrs, measure_list): section = Section(measure_list=measure_list, performance_attrs=performance_attrs) assert section._performance_attrs == performance_attrs pa_dict = section._performance_attrs.as_dict() assert pa_dict[ATTR_NAME] == ATTR_VAL assert isinstance(pa_dict[ATTR_NAME], ATTR_TYPE) new_attr_val = ATTR_VAL - 1 new_performance_attrs = PerformanceAttrs() new_performance_attrs.add_attr(ATTR_NAME, new_attr_val, ATTR_TYPE) section._performance_attrs = new_performance_attrs pa_dict = section._performance_attrs.as_dict() assert pa_dict[ATTR_NAME] == new_attr_val assert isinstance(pa_dict[ATTR_NAME], ATTR_TYPE) new_attr_val = ATTR_VAL - 1 new_performance_attrs = PerformanceAttrs() new_performance_attrs.add_attr(ATTR_NAME, new_attr_val, ATTR_TYPE) section.pa = new_performance_attrs pa_dict = section.pa.as_dict() assert pa_dict[ATTR_NAME] == new_attr_val assert isinstance(pa_dict[ATTR_NAME], ATTR_TYPE)
def performance_attrs(): performance_attrs = PerformanceAttrs() performance_attrs.add_attr(ATTR_NAME, ATTR_VAL, ATTR_TYPE) return performance_attrs
AMP = AMPS[0] PITCHES: List[float] = [1.0, 1.5, 2.0] PITCH = PITCHES[0] SCALE = 'chromatic' OCTAVE = 4 ATTR_VAL_DEFAULT_MAP = {'delay': START, 'dur': DUR, 'amp': AMP, 'degree': PITCH, 'octave': float(OCTAVE)} NOTE_SEQUENCE_IDX = 0 # TODO TEST PERFORMANCE ATTRS PERFORMANCE_ATTRS = PerformanceAttrs() ATTR_NAME = 'test_attr' ATTR_VAL = 100 ATTR_TYPE = int NOTE_CLS_NAME = foxdot_note.CLASS_NAME ATTR_NAME_IDX_MAP = foxdot_note.ATTR_NAME_IDX_MAP NUM_NOTES = 2 NUM_ATTRIBUTES = len(foxdot_note.ATTR_NAMES) @pytest.fixture def make_note_config(): return MakeNoteConfig(cls_name=foxdot_note.CLASS_NAME, num_attributes=NUM_ATTRIBUTES, make_note=foxdot_note.make_note,
make_note=make_note, pitch_for_key=pitch_for_key, attr_name_idx_map=ATTR_NAME_IDX_MAP, attr_val_cast_map=ATTR_VAL_CAST_MAP) SCALE = Scale(key=KEY, octave=OCTAVE, harmonic_scale=HARMONIC_SCALE, mn=NOTE_CONFIG) NUM_NOTES_IN_SCALE = 7 NUM_MEASURES = 4 BASE_VELOCITY = 100 VELOCITY_FACTOR = 2 if __name__ == '__main__': performance_attrs = PerformanceAttrs() # Declare track container ostinato_track = MidiTrack(name='ostinato', instrument=MidiInstrument.Vibraphone.value, channel=1) chords_track = MidiTrack( name='chords', instrument=MidiInstrument.Acoustic_Grand_Piano.value, channel=2) # Ostinato swing_factor = 0.008 swing = Swing(swing_on=True, swing_range=swing_factor, swing_direction=Swing.SwingDirection.Both)