diff --git a/actions.py b/actions.py index 268ee2e..f18694f 100644 --- a/actions.py +++ b/actions.py @@ -62,8 +62,12 @@ class Actions(object): self.shaders.shaders_menu.navigate_menu_up() def enter_on_shaders_selection(self): - is_shader, selected_shader = self.shaders.enter_on_shaders_selection() - if is_shader and selected_shader['shad_type'] == 'gen' and self.shaders.selected_status == '▶': + ##want to select shader if its not selected, and want to enter 'param' mode if it already is + is_shader, is_selected_shader, selected_shader = self.shaders.enter_on_shaders_selection() + print('is selected shader: {}'.format(is_selected_shader)) + if is_selected_shader and selected_shader['param_number'] > 0: + self.set_shader_param_mode() + elif is_shader and selected_shader['shad_type'] == 'gen' and self.shaders.selected_status == '▶': self.video_driver.current_player.toggle_pause() def clear_all_slots(self): @@ -421,6 +425,22 @@ class Actions(object): self.quit_the_program() os.execv('/usr/bin/python3', [sys.argv[0],'/home/pi/r_e_c_u_r/r_e_c_u_r.py']) + def set_shader_param_mode(self): + self.data.control_mode = 'SHADER_PARAM' + self.message_handler.set_message('INFO', '[ ]: focus < >: level ■: back') + self.shaders.focused_param = 0 + + def increase_this_param(self): + self.shaders.increase_this_param() + + def decrease_this_param(self): + self.shaders.decrease_this_param() + + def increase_param_focus(self): + self.shaders.focused_param = (self.shaders.focused_param + 1)%self.shaders.selected_shader['param_number'] + + def decrease_param_focus(self): + self.shaders.focused_param = (self.shaders.focused_param - 1)%self.shaders.selected_shader['param_number'] def set_fixed_length(self, value): self.data.control_mode = 'LENGTH_SET' @@ -430,8 +450,9 @@ class Actions(object): def return_to_default_control_mode(self): if self.data.control_mode == 'LENGTH_SET': - pass - self.data.control_mode = 'NAV_SETTINGS' + self.data.control_mode = 'NAV_SETTINGS' + if self.data.control_mode == 'SHADER_PARAM': + self.data.control_mode = 'NAV_SHADERS' def record_fixed_length(self): if self.fixed_length_setter: diff --git a/display_centre/display.py b/display_centre/display.py index cf51829..3c57af2 100644 --- a/display_centre/display.py +++ b/display_centre/display.py @@ -152,7 +152,10 @@ class Display(object): (self.shaders.selected_status,shader['shad_type'][0], \ format(shader['shad_index'],'02d'), shader['name'][0:17] )) for i in range(min(4,shader['param_number'])): - self.display_text.insert(END, 'x{}:{num:02d} '.format(i, num=self.shaders.selected_param_values[i])) + display_param = self.format_param_value(self.shaders.selected_param_values[i]) + if display_param == 100: + display_param == 99 + self.display_text.insert(END, 'x{}:{:02d}'.format(i, display_param)) self.display_text.insert(END,'\n') self.display_text.tag_add("COLUMN_NAME", 5.0, 6.0) ## showing list of other shaders: @@ -317,3 +320,10 @@ class Display(object): return '' else: return value + + @staticmethod + def format_param_value(value): + display_param = int(100 * value) + if display_param == 100: + display_param = 99 + return display_param diff --git a/json_objects/keypad_action_mapping.json b/json_objects/keypad_action_mapping.json index 796350f..0f5a846 100644 --- a/json_objects/keypad_action_mapping.json +++ b/json_objects/keypad_action_mapping.json @@ -4,30 +4,35 @@ "PLAYER": ["seek_back_on_player"], "NAV_SETTINGS": ["move_settings_selection_up"], "NAV_SHADERS": ["move_shaders_selection_up"], - "LENGTH_SET": ["return_to_default_control_mode"] + "LENGTH_SET": ["return_to_default_control_mode"], + "SHADER_PARAM": ["decrease_this_param"] }, "b": { "NAV_BROWSER": ["move_browser_selection_down"], "PLAYER": ["seek_forward_on_player"], "NAV_SETTINGS": ["move_settings_selection_down"], "NAV_SHADERS": ["move_shaders_selection_down"], - "LENGTH_SET": ["return_to_default_control_mode"] + "LENGTH_SET": ["return_to_default_control_mode"], + "SHADER_PARAM": ["increase_this_param"] }, "c": { "NAV_BROWSER": ["enter_on_browser_selection"], "PLAYER": ["toggle_action_on_player","toggle_show_on_player"], "NAV_SETTINGS": ["enter_on_settings_selection"], "NAV_SHADERS": ["enter_on_shaders_selection"], - "LENGTH_SET": ["record_fixed_length"] + "LENGTH_SET": ["record_fixed_length"], + "SHADER_PARAM": ["return_to_default_control_mode"] }, "d": { "DEFAULT": ["switch_to_next_player", "toggle_player_mode"] }, "e": { - "DEFAULT": ["set_playing_sample_start_to_current_duration", "clear_playing_sample_start_time"] + "DEFAULT": ["set_playing_sample_start_to_current_duration", "clear_playing_sample_start_time"], + "SHADER_PARAM": ["decrease_param_focus"] }, "f": { - "DEFAULT": ["set_playing_sample_end_to_current_duration", "clear_playing_sample_end_time"] + "DEFAULT": ["set_playing_sample_end_to_current_duration", "clear_playing_sample_end_time"], + "SHADER_PARAM": ["increase_param_focus"] }, "g": { "DEFAULT": ["toggle_capture_preview", "toggle_capture_recording"]}, diff --git a/shader_experiments/capture_output.txt b/shader_experiments/capture_output.txt new file mode 100644 index 0000000..48ed16a --- /dev/null +++ b/shader_experiments/capture_output.txt @@ -0,0 +1,18 @@ +pi@raspberrypi:~ $ pivideo -q all -v +PiVideo Version 1.13 +Port used for video processor is: i2c1 +PiCapture SD1 is ready +No active video detected +Selected video source is: auto +Active video source is: video1 +Raspberry Pi camera port is not active +Video processor firmware version: 07-07811E +Video processor hardware id: 583F861021C29880 + +pi@raspberrypi:~ $ raspivid -md 6 -awbg 1.0,1.0 -awb off -ex off -o +mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM) +mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1) +mmal: Failed to create camera component +mmal: main: Failed to create camera component +mmal: Camera is not detected. Please check carefully the camera module is installed correctly + diff --git a/video_centre/capture.py b/video_centre/capture.py index 6c953f2..71e26dd 100644 --- a/video_centre/capture.py +++ b/video_centre/capture.py @@ -27,6 +27,7 @@ class Capture(object): self.update_capture_settings() try: self.device = picamera.PiCamera(resolution=self.resolution, framerate=self.framerate, sensor_mode = self.sensor_mode) + self.message_handler.set_message('INFO', 'capture didnt error ?') except picamera.exc.PiCameraError as e: self.use_capture = False print('camera exception is {}'.format(e)) diff --git a/video_centre/shaders.py b/video_centre/shaders.py index 8c3809e..1e9918f 100644 --- a/video_centre/shaders.py +++ b/video_centre/shaders.py @@ -3,6 +3,7 @@ import os class Shaders(object): MENU_HEIGHT = 10 + PARAM_STEP = 0.2 EMPTY_SHADER = dict(name='none',is_shader=True,shad_type='-',param_number=0,path='-',shad_index=0) def __init__(self, root, osc_client, message_handler, data): self.root = root @@ -11,13 +12,14 @@ class Shaders(object): self.data = data self.shaders_menu = menu.ShadersMenu(self.data, self.message_handler, self.MENU_HEIGHT ) self.selected_shader = self.EMPTY_SHADER + self.focused_param = None self.shaders_menu_list = self.generate_shaders_list() print(self.shaders_menu_list) if self.shaders_menu_list is not None: pass self.selected_status = '-' ## going to try using symbols for this : '-' means empty, '▶' means running, '■' means not running, '!' means error - self.selected_param_values = [0,0,0,0] + self.selected_param_values = [0.0,0.0,0.0,0.0] #self.load_selected_shader() def generate_shaders_list(self): @@ -67,6 +69,7 @@ class Shaders(object): def load_selected_shader(self): print(self.selected_shader) + self.selected_param_values = [0.0,0.0,0.0,0.0] is_pro = self.selected_shader['shad_type'] == 'pro' self.osc_client.send_message("/shader/load", [self.selected_shader['path'],is_pro,self.selected_shader['param_number']]) if not self.selected_status == '▶': @@ -84,10 +87,39 @@ class Shaders(object): index = self.shaders_menu.selected_list_index is_file, name = self.shaders_menu.extract_file_type_and_name_from_menu_format( self.shaders_menu_list[index]['name']) - if is_file: + is_selected_shader = False + if is_file and name == self.selected_shader['name']: + is_selected_shader = True + elif is_file: self.selected_shader = self.shaders_menu_list[index] self.load_selected_shader() else: self.shaders_menu.update_open_folders(name) self.shaders_menu_list = self.generate_shaders_list() - return is_file, self.selected_shader + return is_file, is_selected_shader, self.selected_shader + + def increase_this_param(self): + param = self.focused_param + current_amount = self.selected_param_values[param] + amount = self.get_new_param_amount(current_amount,self.PARAM_STEP) + self.set_param_to_amount(param, amount) + + def decrease_this_param(self): + param = self.focused_param + current_amount = self.selected_param_values[param] + amount = self.get_new_param_amount(current_amount,-self.PARAM_STEP) + self.set_param_to_amount(param, amount) + + @staticmethod + def get_new_param_amount(current, change): + if current + change > 1: + return 1 + elif current + change < 0: + return 0 + else: + return current + change + + def set_param_to_amount(self, param, amount): + self.osc_client.send_message("/shader/param", [param, amount] ) + self.selected_param_values[param] = amount +