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
예제 #5
0
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)
예제 #6
0
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,
예제 #8
0
                             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)