def test_track_section_map(section): # Case: falsey track.name, not added to map section_name = '' section.name = section_name track = Track(to_add=section) assert not track.section_map # Case: has track.name, added to map section_name = 'section' section.name = section_name track = Track(to_add=section) assert track.section_map assert track.section_map[section_name] == section
def test_set_tempo(measure_list, meter): track = Track(to_add=measure_list, instrument=INSTRUMENT, meter=meter) track.tempo = int(TEMPO_QPM / 2) expected_starts = [0.0, 2 * DUR, DUR * 4, DUR * 6] for measure in track: for note in measure: assert note.duration == pytest.approx(DUR * 2) assert [note.start for note in measure] == expected_starts
def test_track(performance_attrs, measure_list, meter, swing, section): # Test: List[Measure] and no instrument or performance_attrs # Expect a Track with measures, no instrument, no pa and Notes not having reassigned instrument or pa track = Track(to_add=measure_list, name=TRACK_NAME) assert track.measure_list == measure_list assert track.name == TRACK_NAME assert track.instrument == Track.DEFAULT_INSTRUMENT assert track._meter is None assert track._swing is None assert track._performance_attrs is None # Test: Section and no instrument or performance_attrs # Expect a Track with measures, no instrument, no pa and Notes not having reassigned instrument or pa track = Track(to_add=section) assert track.measure_list == section.measure_list assert track.instrument == Track.DEFAULT_INSTRUMENT assert track._meter is None assert track._swing is None assert track._performance_attrs is None # Test: List[Measure] with instrument, meter, swing and performance_attrs # Expect a Track with measures and all other attributes track = Track(to_add=measure_list, instrument=INSTRUMENT, meter=meter, swing=swing, performance_attrs=performance_attrs) assert track.measure_list == measure_list assert track.instrument == INSTRUMENT assert track._meter == meter assert track._swing == swing assert track._performance_attrs == performance_attrs # Test: List[Measure] with instrument, meter, swing and performance_attrs # Expect a Track with measures and all other attributes track = Track(to_add=section, instrument=INSTRUMENT, meter=meter, swing=swing, performance_attrs=performance_attrs) assert track.measure_list == section.measure_list assert track.instrument == INSTRUMENT assert track._meter == meter assert track._swing == swing assert track._performance_attrs == performance_attrs
def add_track(self, track_name: str = None, instrument: Union[float, int] = None) -> Track: validate_type('track_name', track_name, str) validate_type_choice('instrument', instrument, (float, int)) track_name = track_name or str(self._next_track) track = Track(meter=self.meter, swing=self.swing, name=track_name, instrument=instrument) self.append(track) self.num_tracks += 1 self._track_name_idx_map[track_name] = self._next_track self._next_track += 1 return track
def test_init_set_get_instrument(measure_list, section): track = Track(to_add=measure_list, instrument=INSTRUMENT) for measure in track: for note in measure: assert note.instrument == INSTRUMENT assert track.get_attr('instrument') == [1, 1, 1, 1] + [1, 1, 1, 1] assert track.instrument == INSTRUMENT new_instrument = INSTRUMENT + 1 track.instrument = new_instrument for measure in track: for note in measure: assert note.instrument == new_instrument assert track.instrument == new_instrument assert track.get_attr('instrument') == [ new_instrument, new_instrument, new_instrument, new_instrument, new_instrument, new_instrument, new_instrument, new_instrument ]
beat_note_dur=BEAT_DUR, tempo=TEMPO_QPM) swing = Swing(swing_range=SWING_RANGE) measure = Measure(num_notes=NUM_NOTES, meter=meter, swing=swing, mn=DEFAULT_NOTE_CONFIG()) for i in range(NUM_NOTES): measure[i].instrument = INSTRUMENT_1_ID measure[i].start = (i % NUM_NOTES) * DUR measure[i].duration = DUR measure[i].amplitude = BASE_AMP measure[i].pitch = PITCH measure.apply_swing() track = Track(to_add=[measure], name='ostinato', instrument=INSTRUMENT_1_ID) song = Song(to_add=[track], name=SONG_NAME) orchestra = CSoundOrchestra(instruments=INSTRUMENTS, sampling_rate=SR, ksmps=KSMPS, num_channels=NCHNLS) # Play song with CSD player player = CSoundCSDPlayer(csound_orchestra=orchestra, song=song) player.set_score_header_lines(SCORE_HEADER_LINES) player.play() # Comment this out to test code below it # player.loop()
def track(measure_list, performance_attrs): return Track(to_add=measure_list, name=TRACK_NAME, performance_attrs=performance_attrs)