def change_relative(self, value): if sign(value) != sign(self._relative_value): self._relative_value = 0.0 self._relative_value += value if fabs(self._relative_value) >= self.STEP_SIZE: relative_position = int(sign(self._relative_value)) self._relative_value -= self.STEP_SIZE return self._jump_relative(relative_position) != None
def _limited_nudge_offset(self, steps, notes, nudge_offset): limited_nudge_offset = MAX_CLIP_LENGTH for x, y in steps: time_step = self._time_step(self._get_step_start_time(x, y)) for note in time_step.filter_notes(notes): time_after_nudge = time_step.clamp(note[1], nudge_offset) limited_nudge_offset = min(limited_nudge_offset, abs(note[1] - time_after_nudge)) return sign(nudge_offset) * limited_nudge_offset
def _limited_nudge_offset(self, steps, notes, nudge_offset): limited_nudge_offset = MAX_CLIP_LENGTH for step in steps: time_step = self._time_step(self.get_step_start_time(step)) for note in time_step.filter_notes(notes): start_time = note_start_time(note) time_after_nudge = time_step.clamp(start_time, nudge_offset) limited_nudge_offset = min(limited_nudge_offset, abs(start_time - time_after_nudge)) return sign(nudge_offset) * limited_nudge_offset
def _apply_value_to_arrangement_property(self, property_name, value): factor = 0.25 if self.shift_button.is_pressed else 1.0 delta = factor * sign(value) old_value = getattr(self.song, property_name) setattr(self.song, property_name, max(0.0, old_value + delta))
def to_sample_count(prev_value_getter, value, sample): truncation_func = ceil if sign(value - prev_value_getter()) > 0 else floor return clamp(int(truncation_func(value * sample.length)), 0, sample.length - 1)