def default_event_label(self): return self._encode_event( (PerformanceEvent(PerformanceEvent.TIME_SHIFT, 0), PerformanceEvent(PerformanceEvent.NOTE_ON, 60), PerformanceEvent(PerformanceEvent.VELOCITY, 1), PerformanceEvent(PerformanceEvent.DURATION, 1)))
def class_index_to_event(self, class_indices, events): time_shift = (class_indices[0] * self._shift_steps_per_segment + class_indices[1]) pitch = class_indices[2] + self._min_pitch velocity = class_indices[3] + 1 duration = (class_indices[4] * self._duration_steps_per_segment + class_indices[5]) + 1 return (PerformanceEvent(PerformanceEvent.TIME_SHIFT, time_shift), PerformanceEvent(PerformanceEvent.NOTE_ON, pitch), PerformanceEvent(PerformanceEvent.VELOCITY, velocity), PerformanceEvent(PerformanceEvent.DURATION, duration))
def to_note_seq(self): """Converts `self.text_sequence` to a NoteSequence. Returns: The resulting NoteSequence. """ events = self.text_sequence.split() performance = mm.MetricPerformance( steps_per_quarter=4) for event in events: if re.match(r'^ON[0-9]+$', event): event_type = 1 elif re.match(r'^OFF[0-9]+$', event): event_type = 2 elif re.match(r'^SHIFT[0-9]+$', event): event_type = 3 else: continue event_value = int(re.search(r'[0-9]+', event).group(0)) event = PerformanceEvent(event_type, event_value) performance.append(event) note_seq = performance.to_sequence() return note_seq
def decode_event(self, index): offset = 0 for event_type, min_value, max_value in self._event_ranges: if offset <= index <= offset + max_value - min_value: return PerformanceEvent(event_type=event_type, event_value=min_value + index - offset) offset += max_value - min_value + 1 raise ValueError('Unknown event index: %s' % index)
def testEventToNumSteps(self): self.assertEqual( 0, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=60))) self.assertEqual( 0, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=67))) self.assertEqual( 0, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=10))) self.assertEqual( 1, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=1))) self.assertEqual( 45, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=45))) self.assertEqual( 100, self.enc.event_to_num_steps( PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=100)))
def default_event(self): return PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=self._max_shift_steps)
def testEncodeDecode(self): expected_pairs = [ (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=60), 60), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=0), 0), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=127), 127), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=72), 200), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=0), 128), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=127), 255), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=10), 265), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=1), 256), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=100), 355), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=5), 360), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=1), 356), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=16), 371) ] for expected_event, expected_index in expected_pairs: index = self.enc.encode_event(expected_event) self.assertEqual(expected_index, index) event = self.enc.decode_event(expected_index) self.assertEqual(expected_event, event)
def testEventsToInput(self): num_shift_bins = self._max_shift_steps num_velocity_bins = self._num_velocity_bins slow_base = 2.0 * pi / 144.0 fast_base = 2.0 * pi / 12.0 shift_base = 2.0 * pi / num_shift_bins velocity_base = 2.0 * pi / num_velocity_bins expected_pairs = [ (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=60), [ 1.0, cos(60.0 * slow_base), sin(60.0 * slow_base), cos(60.0 * fast_base), sin(60.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=0), [ 1.0, cos(0.0 * slow_base), sin(0.0 * slow_base), cos(0.0 * fast_base), sin(0.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=127), [ 1.0, cos(127.0 * slow_base), sin(127.0 * slow_base), cos(127.0 * fast_base), sin(127.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=72), [ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(72.0 * slow_base), sin(72.0 * slow_base), cos(72.0 * fast_base), sin(72.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=0), [ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(0.0 * slow_base), sin(0.0 * slow_base), cos(0.0 * fast_base), sin(0.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=127), [ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(127.0 * slow_base), sin(127.0 * slow_base), cos(127.0 * fast_base), sin(127.0 * fast_base), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=10), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(9.0 * shift_base), sin(9.0 * shift_base), 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=1), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(0.0 * shift_base), sin(0.0 * shift_base), 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=100), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(99.0 * shift_base), sin(99.0 * shift_base), 0.0, 0.0, 0.0 ]), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=5), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(4.0 * velocity_base), sin(4.0 * velocity_base) ]), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=1), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(0.0 * velocity_base), sin(0.0 * velocity_base) ]), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=16), [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, cos(15.0 * velocity_base), sin(15.0 * velocity_base) ]), ] events = [] position = 0 for event, expected_encoded_modulo_event in expected_pairs: events += [event] actual_encoded_modulo_event = self.enc.events_to_input( events, position) position += 1 for i in range(self._expected_input_size): self.assertAlmostEqual(expected_encoded_modulo_event[i], actual_encoded_modulo_event[i])
def testEncodeModuloEvent(self): expected_pairs = [ (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=60), (0, PerformanceEvent.NOTE_ON, 60)), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=0), (0, PerformanceEvent.NOTE_ON, 0)), (PerformanceEvent(event_type=PerformanceEvent.NOTE_ON, event_value=127), (0, PerformanceEvent.NOTE_ON, 127)), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=72), (5, PerformanceEvent.NOTE_OFF, 72)), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=0), (5, PerformanceEvent.NOTE_OFF, 0)), (PerformanceEvent(event_type=PerformanceEvent.NOTE_OFF, event_value=127), (5, PerformanceEvent.NOTE_OFF, 127)), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=10), (10, PerformanceEvent.TIME_SHIFT, 9)), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=1), (10, PerformanceEvent.TIME_SHIFT, 0)), (PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=100), (10, PerformanceEvent.TIME_SHIFT, 99)), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=5), (13, PerformanceEvent.VELOCITY, 4)), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=1), (13, PerformanceEvent.VELOCITY, 0)), (PerformanceEvent(event_type=PerformanceEvent.VELOCITY, event_value=16), (13, PerformanceEvent.VELOCITY, 15)), ] # expected_encoded_modulo_event is of the following form: # (offset, encoder_width, event_type, value, bins) for event, expected_encoded_modulo_event in expected_pairs: actual_encoded_modulo_event = self.enc.encode_modulo_event(event) self.assertEqual(actual_encoded_modulo_event, expected_encoded_modulo_event)
def default_event(self): return PerformanceEvent(event_type=PerformanceEvent.TIME_SHIFT, event_value=performance_lib.MAX_SHIFT_STEPS)