def go_into_dance_pose(): for i in range(settings.servo_count): servo_settings = settings.get_servo(i) default_init_rotation = (servo_settings.max_rotation + servo_settings.min_rotation) / 2 if i == 1: timmy_device.set_servo_rotation(i, 14) # magic const else: timmy_device.set_servo_rotation(i, default_init_rotation) sleep(1)
def dance(): def dance_processing(): while not self.is_stopped: elapsed_time = time() - start_time # if elapsed_time > length: # break # if elapsed_time > beats[current_beat]: # current_beat += 1 # if current_beat >= len(beats): # break # state = 'min' # self.app.timmy_device.set_servo_rotation(servo_id, min_rotation) # elif current_beat > 0 and elapsed_time > (beats[current_beat - 1] + beats[current_beat]) / 2 and state == 'min': # state = 'max' # self.app.timmy_device.set_servo_rotation(servo_id, max_rotation) if elapsed_time >= total_duration: break t = int(elapsed_time / total_duration * length) s = self.sound_data.signal[t] * scale rotation = int((max_rotation + min_rotation) / 2 + (max_rotation - min_rotation) / 2 * s / 32768) timmy_device.set_servo_rotation(servo_id, rotation) if not timmy_device.is_active(): return False servo_id = 2 # !!! gui scale = 4 # ??? calc servo_settings = settings.get_servo(servo_id) min_rotation = servo_settings.min_rotation max_rotation = servo_settings.max_rotation timmy_device.set_servo_rotation(servo_id, max_rotation) state = 'max' current_beat = 0 start_time = time() length = len(self.sound_data.signal) #!!!: already calc total_duration = float(length) / self.sound_data.rate dance_thread = Thread(target=dance_processing) dance_thread.start()
def dance_processing(): while not self.is_stopped: elapsed_time = time() - start_time # if elapsed_time > length: # break # if elapsed_time > beats[current_beat]: # current_beat += 1 # if current_beat >= len(beats): # break # state = 'min' # self.app.timmy_device.set_servo_rotation(servo_id, min_rotation) # elif current_beat > 0 and elapsed_time > (beats[current_beat - 1] + beats[current_beat]) / 2 and state == 'min': # state = 'max' # self.app.timmy_device.set_servo_rotation(servo_id, max_rotation) if elapsed_time >= total_duration: break t = int(elapsed_time / total_duration * length) s = self.sound_data.signal[t] * scale rotation = int((max_rotation + min_rotation) / 2 + (max_rotation - min_rotation) / 2 * s / 32768) timmy_device.set_servo_rotation(servo_id, rotation)
def on_slider_value_changed(self, slider_index, value): if not timmy_device.is_active(): return timmy_device.set_servo_rotation(slider_index, int(value))