diff --git a/ACTIONS.md b/ACTIONS.md index ffbfc82..c7d3e9b 100644 --- a/ACTIONS.md +++ b/ACTIONS.md @@ -1,6 +1,6 @@ # Auto-generated Actions list -Tue 10 Mar 23:48:45 UTC 2020 +Sat 14 Mar 23:19:42 UTC 2020 for branch=feature_plugins diff --git a/DEFAULT_CONTROLS.txt b/DEFAULT_CONTROLS.txt index 4c69cd0..238350c 100644 --- a/DEFAULT_CONTROLS.txt +++ b/DEFAULT_CONTROLS.txt @@ -2,153 +2,282 @@ | Note/CC | Mode | Action (default) | Action (with FN) | | --- | --- | --- | --- | -| control_change 0 | NAV_DETOUR | set_detour_mix_continuous | | +| control_change 0 | NAV_LFO | set_lfo_modulation_0_level | | +| control_change 0 | NAV_SND | sound_set_config_energy_gain | | +| control_change 0 | NAV_MANI | set_variable_A | | | control_change 0 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | set_strobe_amount_continuous | | -| control_change 1 | NAV_DETOUR | set_detour_speed_position_continuous | | +| control_change 0 | NAV_LPRC | set_automation_speed | | +| control_change 0 | NAV_WJMX | wj_set_position_N:x | | +| control_change 0 | NAV_DETOUR | set_detour_speed_position_continuous | | +| control_change 1 | NAV_SND | sound_set_config_energy_threshold | | +| control_change 1 | NAV_WJMX | wj_set_position_N:y | | +| control_change 1 | NAV_MANI | f:sin(x*pi):|set_variable_SIN | | +| control_change 1 | NAV_LFO | set_lfo_modulation_1_level | | | control_change 1 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | set_shader_speed_layer_0_amount | | +| control_change 1 | NAV_DETOUR | set_detour_start_continuous | | | control_change 10 | DEFAULT | set_the_shader_param_2_layer_offset_2_continuous | | | control_change 11 | DEFAULT | set_the_shader_param_3_layer_offset_2_continuous | | | control_change 12 | DEFAULT | set_strobe_amount_continuous | | -| control_change 2 | NAV_DETOUR | set_detour_start_continuous | | +| control_change 16 | DEFAULT | set_the_shader_param_0_layer_offset_2_continuous | | +| control_change 17 | DEFAULT | set_the_shader_param_1_layer_offset_2_continuous | | +| control_change 18 | DEFAULT | set_the_shader_param_2_layer_offset_2_continuous | | +| control_change 19 | DEFAULT | set_the_shader_param_3_layer_offset_2_continuous | | +| control_change 2 | NAV_LFO | set_lfo_modulation_2_level | | | control_change 2 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | set_shader_speed_layer_1_amount | | -| control_change 3 | NAV_DETOUR | set_detour_end_continuous | | +| control_change 2 | NAV_WJMX | wj_set_colour_T:x | | +| control_change 2 | NAV_DETOUR | set_detour_end_continuous | | +| control_change 20 | DEFAULT | set_strobe_amount_continuous | | +| control_change 3 | NAV_LFO | set_lfo_modulation_3_level | | | control_change 3 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | set_shader_speed_layer_2_amount | | -| control_change 4 | DEFAULT | set_the_shader_param_0_layer_offset_1_continuous | | -| control_change 5 | DEFAULT | set_the_shader_param_1_layer_offset_1_continuous | | -| control_change 6 | DEFAULT | set_the_shader_param_2_layer_offset_1_continuous | | -| control_change 7 | DEFAULT | set_the_shader_param_3_layer_offset_1_continuous | | +| control_change 3 | NAV_WJMX | wj_set_colour_T:y | | +| control_change 32 | NAV_SHADERS | play_shader_0 | previous_shader_layer | | +| control_change 32 | DEFAULT | load_slot_0_into_next_player | previous_bank | | +| control_change 32 | PLAY_SHADER | play_shader_0 | previous_shader_layer | | +| control_change 32 | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | +| control_change 33 | NAV_SHADERS | play_shader_1 | next_shader_layer | | +| control_change 33 | DEFAULT | load_slot_1_into_next_player | next_bank | | +| control_change 33 | PLAY_SHADER | play_shader_1 | next_shader_layer | | +| control_change 33 | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | +| control_change 34 | NAV_SHADERS | play_shader_2 | clear_shader_bank | | +| control_change 34 | DEFAULT | load_slot_2_into_next_player | clear_all_slots | | +| control_change 34 | PLAY_SHADER | play_shader_2 | clear_shader_bank | | +| control_change 34 | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | +| control_change 35 | DEFAULT | load_slot_3_into_next_player | | +| control_change 35 | PLAY_SHADER | play_shader_3 | | +| control_change 35 | NAV_DETOUR | switch_to_detour_3 | | +| control_change 36 | DEFAULT | load_slot_4_into_next_player | | +| control_change 36 | PLAY_SHADER | play_shader_4 | | +| control_change 37 | DEFAULT | load_slot_5_into_next_player | toggle_screen_mirror | | +| control_change 37 | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | +| control_change 38 | DEFAULT | load_slot_6_into_next_player | toggle_shaders | | +| control_change 38 | PLAY_SHADER | play_shader_6 | toggle_shaders | | +| control_change 39 | DEFAULT | load_slot_7_into_next_player | toggle_detour_mode | | +| control_change 39 | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | +| control_change 4 | NAV_LFO | set_lfo_speed | | +| control_change 4 | DEFAULT | set_the_shader_param_0_layer_offset_1_continuous | set_param_0_layer_offset_0_modulation_level_continuous | | +| control_change 4 | NAV_SND | sound_set_modulation_energy_slot_0_level | | +| control_change 4 | NAV_WJMX | wj_set_mix | wj_set_current_modulation_slot_0_level | | +| control_change 41 | DEFAULT | switch_to_next_player | toggle_player_mode | | +| control_change 41 | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | +| control_change 42 | NAV_SHADERS | enter_on_shaders_selection | map_on_shaders_selection | | +| control_change 42 | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| control_change 42 | NAV_SETTINGS | enter_on_settings_selection | | +| control_change 42 | CONFIRM | perform_confirm_action | | +| control_change 42 | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| control_change 42 | SHADER_PARAM | return_to_default_control_mode | | +| control_change 42 | NAV_BROWSER | enter_on_browser_selection | | +| control_change 42 | LENGTH_SET | record_fixed_length | | +| control_change 42 | NAV_DETOUR | toggle_detour_play | | +| control_change 43 | NAV_SHADERS | move_shaders_selection_up | move_shaders_selection_page_up | | +| control_change 43 | SHADER_PARAM | decrease_this_param | decrease_shader_param | | +| control_change 43 | NAV_SETTINGS | move_settings_selection_up | move_settings_selection_page_up | | +| control_change 43 | PLAY_SHADER | decrease_this_param | decrease_shader_param | | +| control_change 43 | CONFIRM | return_to_default_control_mode | | +| control_change 43 | DEFAULT | seek_back_on_player | decrease_seek_time | | +| control_change 43 | NAV_PLUGINS | enter_on_plugins_selection | | +| control_change 43 | NAV_BROWSER | move_browser_selection_up | move_browser_selection_page_up | | +| control_change 43 | LENGTH_SET | return_to_default_control_mode | | +| control_change 44 | NAV_SHADERS | move_shaders_selection_down | move_shaders_selection_page_down | | +| control_change 44 | PLAY_SHADER | increase_this_param | increase_shader_param | | +| control_change 44 | NAV_SETTINGS | move_settings_selection_down | move_settings_selection_page_down | | +| control_change 44 | CONFIRM | return_to_default_control_mode | | +| control_change 44 | DEFAULT | seek_forward_on_player | increase_seek_time | | +| control_change 44 | SHADER_PARAM | increase_this_param | increase_shader_param | | +| control_change 44 | NAV_BROWSER | move_browser_selection_down | move_browser_selection_page_down | | +| control_change 44 | LENGTH_SET | return_to_default_control_mode | | +| control_change 45 | DEFAULT | toggle_capture_preview | toggle_capture_recording | | +| control_change 46 | DEFAULT | cycle_display_mode | cycle_display_mode_back | | +| control_change 48 | DEFAULT | load_slot_8_into_next_player | toggle_feedback | | +| control_change 48 | PLAY_SHADER | play_shader_8 | toggle_feedback | | +| control_change 49 | DEFAULT | load_slot_9_into_next_player | confirm_shutdown | | +| control_change 49 | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| control_change 5 | DEFAULT | set_the_shader_param_1_layer_offset_1_continuous | set_param_1_layer_offset_0_modulation_level_continuous | | +| control_change 5 | NAV_SND | sound_set_modulation_energy_slot_1_level | | +| control_change 5 | NAV_WJMX | wj_set_back_colour:h | wj_set_current_modulation_slot_1_level | | +| control_change 51 | DEFAULT | toggle_x3_as_speed | | +| control_change 52 | DEFAULT | toggle_feedback | | +| control_change 53 | DEFAULT | toggle_shader_layer_0 | | +| control_change 54 | DEFAULT | toggle_shader_layer_1 | | +| control_change 55 | DEFAULT | toggle_shader_layer_2 | | +| control_change 58 | NAV_SHADERS | move_shaders_selection_up | move_shaders_selection_page_up | | +| control_change 58 | SHADER_PARAM | decrease_this_param | decrease_shader_param | | +| control_change 58 | NAV_SETTINGS | move_settings_selection_up | move_settings_selection_page_up | | +| control_change 58 | PLAY_SHADER | decrease_this_param | decrease_shader_param | | +| control_change 58 | CONFIRM | return_to_default_control_mode | | +| control_change 58 | DEFAULT | seek_back_on_player | decrease_seek_time | | +| control_change 58 | NAV_PLUGINS | move_plugins_selection_up | move_plugins_selection_page_up | | +| control_change 58 | NAV_BROWSER | move_browser_selection_up | move_browser_selection_page_up | | +| control_change 58 | LENGTH_SET | return_to_default_control_mode | | +| control_change 59 | NAV_SHADERS | move_shaders_selection_down | move_shaders_selection_page_down | | +| control_change 59 | SHADER_PARAM | increase_this_param | increase_shader_param | | +| control_change 59 | NAV_SETTINGS | move_settings_selection_down | move_settings_selection_page_down | | +| control_change 59 | PLAY_SHADER | increase_this_param | increase_shader_param | | +| control_change 59 | CONFIRM | return_to_default_control_mode | | +| control_change 59 | DEFAULT | seek_forward_on_player | increase_seek_time | | +| control_change 59 | NAV_PLUGINS | move_plugins_selection_down | move_plugins_selection_page_down | | +| control_change 59 | NAV_BROWSER | move_browser_selection_down | move_browser_selection_page_down | | +| control_change 59 | LENGTH_SET | return_to_default_control_mode | | +| control_change 6 | DEFAULT | set_the_shader_param_2_layer_offset_1_continuous | set_param_2_layer_offset_0_modulation_level_continuous | | +| control_change 6 | NAV_SND | sound_set_modulation_energy_slot_2_level | | +| control_change 6 | NAV_WJMX | wj_set_back_colour:s | wj_set_current_modulation_slot_2_level | | +| control_change 60 | DEFAULT | toggle_function | | +| control_change 61 | DEFAULT | set_playing_sample_start_to_current_duration | clear_playing_sample_start_time | | +| control_change 61 | SHADER_PARAM | decrease_param_focus | | +| control_change 61 | PLAY_SHADER | decrease_param_focus | | +| control_change 61 | NAV_DETOUR | decrease_mix_shader | | +| control_change 62 | DEFAULT | set_playing_sample_end_to_current_duration | clear_playing_sample_end_time | | +| control_change 62 | SHADER_PARAM | increase_param_focus | | +| control_change 62 | PLAY_SHADER | increase_param_focus | | +| control_change 62 | NAV_DETOUR | increase_mix_shader | | +| control_change 64 | DEFAULT | play_shader_0 | | +| control_change 65 | DEFAULT | play_shader_1 | | +| control_change 66 | DEFAULT | play_shader_2 | | +| control_change 67 | DEFAULT | play_shader_3 | | +| control_change 68 | DEFAULT | play_shader_4 | | +| control_change 69 | DEFAULT | play_shader_5 | | +| control_change 7 | DEFAULT | set_the_shader_param_3_layer_offset_1_continuous | set_param_3_layer_offset_0_modulation_level_continuous | | +| control_change 7 | NAV_SND | sound_set_modulation_energy_slot_3_level | | +| control_change 7 | NAV_WJMX | wj_set_back_colour:v | wj_set_current_modulation_slot_3_level | | +| control_change 70 | DEFAULT | play_shader_6 | | +| control_change 71 | DEFAULT | play_shader_7 | | | control_change 8 | DEFAULT | set_the_shader_param_0_layer_offset_2_continuous | | | control_change 9 | DEFAULT | set_the_shader_param_1_layer_offset_2_continuous | | -| note_on 36 | LENGTH_SET | return_to_default_control_mode | | -| note_on 36 | CONFIRM | return_to_default_control_mode | | -| note_on 36 | NAV_BROWSER | move_browser_selection_up | | +| note_on 36 | NAV_SHADERS | move_shaders_selection_up | move_shaders_selection_page_up | | | note_on 36 | SHADER_PARAM | decrease_this_param | decrease_shader_param | | -| note_on 36 | DEFAULT | seek_back_on_player | decrease_seek_time | | -| note_on 36 | NAV_SHADERS | move_shaders_selection_up | | +| note_on 36 | NAV_SETTINGS | move_settings_selection_up | move_settings_selection_page_up | | | note_on 36 | PLAY_SHADER | decrease_this_param | decrease_shader_param | | -| note_on 36 | NAV_SETTINGS | move_settings_selection_up | | -| note_on 37 | LENGTH_SET | return_to_default_control_mode | | -| note_on 37 | CONFIRM | return_to_default_control_mode | | -| note_on 37 | NAV_BROWSER | move_browser_selection_down | | +| note_on 36 | CONFIRM | return_to_default_control_mode | | +| note_on 36 | DEFAULT | seek_back_on_player | decrease_seek_time | | +| note_on 36 | NAV_PLUGINS | move_plugins_selection_up | move_plugins_selection_page_up | | +| note_on 36 | NAV_BROWSER | move_browser_selection_up | move_browser_selection_page_up | | +| note_on 36 | LENGTH_SET | return_to_default_control_mode | | +| note_on 37 | NAV_SHADERS | move_shaders_selection_down | move_shaders_selection_page_down | | | note_on 37 | SHADER_PARAM | increase_this_param | increase_shader_param | | -| note_on 37 | DEFAULT | seek_forward_on_player | increase_seek_time | | -| note_on 37 | NAV_SHADERS | move_shaders_selection_down | | +| note_on 37 | NAV_SETTINGS | move_settings_selection_down | move_settings_selection_page_down | | | note_on 37 | PLAY_SHADER | increase_this_param | increase_shader_param | | -| note_on 37 | NAV_SETTINGS | move_settings_selection_down | | -| note_on 38 | LENGTH_SET | record_fixed_length | | -| note_on 38 | CONFIRM | perform_confirm_action | | -| note_on 38 | NAV_DETOUR | toggle_detour_play | | -| note_on 38 | NAV_BROWSER | enter_on_browser_selection | | -| note_on 38 | SHADER_PARAM | return_to_default_control_mode | | -| note_on 38 | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| note_on 37 | CONFIRM | return_to_default_control_mode | | +| note_on 37 | DEFAULT | seek_forward_on_player | increase_seek_time | | +| note_on 37 | NAV_PLUGINS | move_plugins_selection_down | move_plugins_selection_page_down | | +| note_on 37 | NAV_BROWSER | move_browser_selection_down | move_browser_selection_page_down | | +| note_on 37 | LENGTH_SET | return_to_default_control_mode | | | note_on 38 | NAV_SHADERS | enter_on_shaders_selection | map_on_shaders_selection | | -| note_on 38 | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| note_on 38 | SHADER_PARAM | return_to_default_control_mode | | | note_on 38 | NAV_SETTINGS | enter_on_settings_selection | | -| note_on 39 | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | +| note_on 38 | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| note_on 38 | CONFIRM | perform_confirm_action | | +| note_on 38 | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| note_on 38 | NAV_PLUGINS | enter_on_plugins_selection | | +| note_on 38 | NAV_BROWSER | enter_on_browser_selection | | +| note_on 38 | LENGTH_SET | record_fixed_length | | +| note_on 38 | NAV_DETOUR | toggle_detour_play | | | note_on 39 | DEFAULT | switch_to_next_player | toggle_player_mode | | -| note_on 40 | SHADER_PARAM | decrease_param_focus | | -| note_on 40 | NAV_DETOUR | decrease_mix_shader | | -| note_on 40 | PLAY_SHADER | decrease_param_focus | | +| note_on 39 | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | | note_on 40 | DEFAULT | set_playing_sample_start_to_current_duration | clear_playing_sample_start_time | | -| note_on 41 | SHADER_PARAM | increase_param_focus | | -| note_on 41 | NAV_DETOUR | increase_mix_shader | | -| note_on 41 | PLAY_SHADER | increase_param_focus | | +| note_on 40 | SHADER_PARAM | decrease_param_focus | | +| note_on 40 | PLAY_SHADER | decrease_param_focus | | +| note_on 40 | NAV_DETOUR | decrease_mix_shader | | | note_on 41 | DEFAULT | set_playing_sample_end_to_current_duration | clear_playing_sample_end_time | | +| note_on 41 | SHADER_PARAM | increase_param_focus | | +| note_on 41 | PLAY_SHADER | increase_param_focus | | +| note_on 41 | NAV_DETOUR | increase_mix_shader | | | note_on 42 | DEFAULT | toggle_capture_preview | toggle_capture_recording | | | note_on 43 | DEFAULT | cycle_display_mode | cycle_display_mode_back | | | note_on 44 | DEFAULT | toggle_function | | | note_on 45 | NAV_SHADERS | play_shader_0 | previous_shader_layer | | -| note_on 45 | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | -| note_on 45 | PLAY_SHADER | play_shader_0 | previous_shader_layer | | | note_on 45 | DEFAULT | load_slot_0_into_next_player | previous_bank | | +| note_on 45 | PLAY_SHADER | play_shader_0 | previous_shader_layer | | +| note_on 45 | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | | note_on 46 | NAV_SHADERS | play_shader_1 | next_shader_layer | | -| note_on 46 | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | -| note_on 46 | PLAY_SHADER | play_shader_1 | next_shader_layer | | | note_on 46 | DEFAULT | load_slot_1_into_next_player | next_bank | | +| note_on 46 | PLAY_SHADER | play_shader_1 | next_shader_layer | | +| note_on 46 | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | | note_on 47 | NAV_SHADERS | play_shader_2 | clear_shader_bank | | -| note_on 47 | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | -| note_on 47 | PLAY_SHADER | play_shader_2 | clear_shader_bank | | | note_on 47 | DEFAULT | load_slot_2_into_next_player | clear_all_slots | | -| note_on 48 | NAV_DETOUR | switch_to_detour_3 | | -| note_on 48 | PLAY_SHADER | play_shader_3 | | +| note_on 47 | PLAY_SHADER | play_shader_2 | clear_shader_bank | | +| note_on 47 | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | | note_on 48 | DEFAULT | load_slot_3_into_next_player | | -| note_on 49 | PLAY_SHADER | play_shader_4 | | +| note_on 48 | PLAY_SHADER | play_shader_3 | | +| note_on 48 | NAV_DETOUR | switch_to_detour_3 | | | note_on 49 | DEFAULT | load_slot_4_into_next_player | | -| note_on 50 | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | +| note_on 49 | PLAY_SHADER | play_shader_4 | | | note_on 50 | DEFAULT | load_slot_5_into_next_player | toggle_screen_mirror | | -| note_on 51 | PLAY_SHADER | play_shader_6 | toggle_shaders | | +| note_on 50 | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | | note_on 51 | DEFAULT | load_slot_6_into_next_player | toggle_shaders | | -| note_on 52 | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | +| note_on 51 | PLAY_SHADER | play_shader_6 | toggle_shaders | | | note_on 52 | DEFAULT | load_slot_7_into_next_player | toggle_detour_mode | | -| note_on 53 | PLAY_SHADER | play_shader_8 | toggle_feedback | | +| note_on 52 | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | | note_on 53 | DEFAULT | load_slot_8_into_next_player | toggle_feedback | | -| note_on 54 | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| note_on 53 | PLAY_SHADER | play_shader_8 | toggle_feedback | | | note_on 54 | DEFAULT | load_slot_9_into_next_player | confirm_shutdown | | -| note_on 72 | LENGTH_SET | return_to_default_control_mode | | -| note_on 72 | CONFIRM | return_to_default_control_mode | | -| note_on 72 | NAV_BROWSER | move_browser_selection_up | | +| note_on 54 | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| note_on 72 | NAV_SHADERS | move_shaders_selection_up | move_shaders_selection_page_up | | | note_on 72 | SHADER_PARAM | decrease_this_param | decrease_shader_param | | -| note_on 72 | DEFAULT | seek_back_on_player | decrease_seek_time | | -| note_on 72 | NAV_SHADERS | move_shaders_selection_up | | +| note_on 72 | NAV_SETTINGS | move_settings_selection_up | move_settings_selection_page_up | | | note_on 72 | PLAY_SHADER | decrease_this_param | decrease_shader_param | | -| note_on 72 | NAV_SETTINGS | move_settings_selection_up | | -| note_on 73 | LENGTH_SET | return_to_default_control_mode | | -| note_on 73 | CONFIRM | return_to_default_control_mode | | -| note_on 73 | NAV_BROWSER | move_browser_selection_down | | +| note_on 72 | CONFIRM | return_to_default_control_mode | | +| note_on 72 | DEFAULT | seek_back_on_player | decrease_seek_time | | +| note_on 72 | NAV_PLUGINS | move_plugins_selection_up | move_plugins_selection_page_up | | +| note_on 72 | NAV_BROWSER | move_browser_selection_up | move_browser_selection_page_up | | +| note_on 72 | LENGTH_SET | return_to_default_control_mode | | +| note_on 73 | NAV_SHADERS | move_shaders_selection_down | move_shaders_selection_page_down | | | note_on 73 | SHADER_PARAM | increase_this_param | increase_shader_param | | -| note_on 73 | DEFAULT | seek_forward_on_player | increase_seek_time | | -| note_on 73 | NAV_SHADERS | move_shaders_selection_down | | +| note_on 73 | NAV_SETTINGS | move_settings_selection_down | move_settings_selection_page_down | | | note_on 73 | PLAY_SHADER | increase_this_param | increase_shader_param | | -| note_on 73 | NAV_SETTINGS | move_settings_selection_down | | -| note_on 74 | LENGTH_SET | record_fixed_length | | -| note_on 74 | CONFIRM | perform_confirm_action | | -| note_on 74 | NAV_DETOUR | toggle_detour_play | | -| note_on 74 | NAV_BROWSER | enter_on_browser_selection | | -| note_on 74 | SHADER_PARAM | return_to_default_control_mode | | -| note_on 74 | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| note_on 73 | CONFIRM | return_to_default_control_mode | | +| note_on 73 | DEFAULT | seek_forward_on_player | increase_seek_time | | +| note_on 73 | NAV_PLUGINS | move_plugins_selection_down | move_plugins_selection_page_down | | +| note_on 73 | NAV_BROWSER | move_browser_selection_down | move_browser_selection_page_down | | +| note_on 73 | LENGTH_SET | return_to_default_control_mode | | | note_on 74 | NAV_SHADERS | enter_on_shaders_selection | map_on_shaders_selection | | -| note_on 74 | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| note_on 74 | SHADER_PARAM | return_to_default_control_mode | | | note_on 74 | NAV_SETTINGS | enter_on_settings_selection | | -| note_on 75 | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | +| note_on 74 | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| note_on 74 | CONFIRM | perform_confirm_action | | +| note_on 74 | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| note_on 74 | NAV_PLUGINS | enter_on_plugins_selection | | +| note_on 74 | NAV_BROWSER | enter_on_browser_selection | | +| note_on 74 | LENGTH_SET | record_fixed_length | | +| note_on 74 | NAV_DETOUR | toggle_detour_play | | | note_on 75 | DEFAULT | switch_to_next_player | toggle_player_mode | | -| note_on 76 | SHADER_PARAM | decrease_param_focus | | -| note_on 76 | NAV_DETOUR | decrease_mix_shader | | -| note_on 76 | PLAY_SHADER | decrease_param_focus | | +| note_on 75 | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | | note_on 76 | DEFAULT | set_playing_sample_start_to_current_duration | clear_playing_sample_start_time | | -| note_on 77 | SHADER_PARAM | increase_param_focus | | -| note_on 77 | NAV_DETOUR | increase_mix_shader | | -| note_on 77 | PLAY_SHADER | increase_param_focus | | +| note_on 76 | SHADER_PARAM | decrease_param_focus | | +| note_on 76 | PLAY_SHADER | decrease_param_focus | | +| note_on 76 | NAV_DETOUR | decrease_mix_shader | | | note_on 77 | DEFAULT | set_playing_sample_end_to_current_duration | clear_playing_sample_end_time | | +| note_on 77 | SHADER_PARAM | increase_param_focus | | +| note_on 77 | PLAY_SHADER | increase_param_focus | | +| note_on 77 | NAV_DETOUR | increase_mix_shader | | | note_on 78 | DEFAULT | toggle_capture_preview | toggle_capture_recording | | | note_on 79 | DEFAULT | cycle_display_mode | cycle_display_mode_back | | | note_on 80 | DEFAULT | toggle_function | | | note_on 81 | NAV_SHADERS | play_shader_0 | previous_shader_layer | | -| note_on 81 | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | -| note_on 81 | PLAY_SHADER | play_shader_0 | previous_shader_layer | | | note_on 81 | DEFAULT | load_slot_0_into_next_player | previous_bank | | +| note_on 81 | PLAY_SHADER | play_shader_0 | previous_shader_layer | | +| note_on 81 | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | | note_on 82 | NAV_SHADERS | play_shader_1 | next_shader_layer | | -| note_on 82 | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | -| note_on 82 | PLAY_SHADER | play_shader_1 | next_shader_layer | | | note_on 82 | DEFAULT | load_slot_1_into_next_player | next_bank | | +| note_on 82 | PLAY_SHADER | play_shader_1 | next_shader_layer | | +| note_on 82 | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | | note_on 83 | NAV_SHADERS | play_shader_2 | clear_shader_bank | | -| note_on 83 | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | -| note_on 83 | PLAY_SHADER | play_shader_2 | clear_shader_bank | | | note_on 83 | DEFAULT | load_slot_2_into_next_player | clear_all_slots | | -| note_on 84 | NAV_DETOUR | switch_to_detour_3 | | -| note_on 84 | PLAY_SHADER | play_shader_3 | | +| note_on 83 | PLAY_SHADER | play_shader_2 | clear_shader_bank | | +| note_on 83 | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | | note_on 84 | DEFAULT | load_slot_3_into_next_player | | -| note_on 85 | PLAY_SHADER | play_shader_4 | | +| note_on 84 | PLAY_SHADER | play_shader_3 | | +| note_on 84 | NAV_DETOUR | switch_to_detour_3 | | | note_on 85 | DEFAULT | load_slot_4_into_next_player | | -| note_on 86 | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | +| note_on 85 | PLAY_SHADER | play_shader_4 | | | note_on 86 | DEFAULT | load_slot_5_into_next_player | toggle_screen_mirror | | -| note_on 87 | PLAY_SHADER | play_shader_6 | toggle_shaders | | +| note_on 86 | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | | note_on 87 | DEFAULT | load_slot_6_into_next_player | toggle_shaders | | -| note_on 88 | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | +| note_on 87 | PLAY_SHADER | play_shader_6 | toggle_shaders | | | note_on 88 | DEFAULT | load_slot_7_into_next_player | toggle_detour_mode | | -| note_on 89 | PLAY_SHADER | play_shader_8 | toggle_feedback | | +| note_on 88 | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | | note_on 89 | DEFAULT | load_slot_8_into_next_player | toggle_feedback | | -| note_on 90 | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| note_on 89 | PLAY_SHADER | play_shader_8 | toggle_feedback | | | note_on 90 | DEFAULT | load_slot_9_into_next_player | confirm_shutdown | | +| note_on 90 | PLAY_SHADER | play_shader_9 | confirm_shutdown | | ---- @@ -159,80 +288,128 @@ | /high | DEFAULT | modulate_param_3_to_amount_continuous | | | /himid | DEFAULT | modulate_param_2_to_amount_continuous | | | /kick | DEFAULT | modulate_param_1_to_amount_continuous | | -| /shaderparam0 | NAV_DETOUR | set_detour_mix_continuous | | -| /shaderparam0 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | | -| /shaderparam1 | NAV_DETOUR | set_detour_speed_position_continuous | | -| /shaderparam1 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | | -| /shaderparam2 | NAV_DETOUR | set_detour_start_continuous | | -| /shaderparam2 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | | -| /shaderparam3 | NAV_DETOUR | set_detour_end_continuous | | -| /shaderparam3 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | | +| /shaderparam0 | NAV_LFO | set_lfo_modulation_0_level | | +| /shaderparam0 | NAV_SND | sound_set_config_energy_gain | | +| /shaderparam0 | NAV_MANI | set_variable_A | | +| /shaderparam0 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | set_strobe_amount_continuous | | +| /shaderparam0 | NAV_LPRC | set_automation_speed | | +| /shaderparam0 | NAV_WJMX | wj_set_position_N:x | | +| /shaderparam0 | NAV_DETOUR | set_detour_speed_position_continuous | | +| /shaderparam04 | NAV_LFO | set_lfo_speed | | +| /shaderparam04 | DEFAULT | set_the_shader_param_0_layer_offset_1_continuous | set_param_0_layer_offset_0_modulation_level_continuous | | +| /shaderparam04 | NAV_SND | sound_set_modulation_energy_slot_0_level | | +| /shaderparam04 | NAV_WJMX | wj_set_mix | wj_set_current_modulation_slot_0_level | | +| /shaderparam1 | NAV_SND | sound_set_config_energy_threshold | | +| /shaderparam1 | NAV_WJMX | wj_set_position_N:y | | +| /shaderparam1 | NAV_MANI | f:sin(x*pi):|set_variable_SIN | | +| /shaderparam1 | NAV_LFO | set_lfo_modulation_1_level | | +| /shaderparam1 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | set_shader_speed_layer_0_amount | | +| /shaderparam1 | NAV_DETOUR | set_detour_start_continuous | | +| /shaderparam10 | DEFAULT | set_the_shader_param_2_layer_offset_2_continuous | | +| /shaderparam11 | DEFAULT | set_the_shader_param_3_layer_offset_2_continuous | | +| /shaderparam12 | DEFAULT | set_strobe_amount_continuous | | +| /shaderparam2 | NAV_LFO | set_lfo_modulation_2_level | | +| /shaderparam2 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | set_shader_speed_layer_1_amount | | +| /shaderparam2 | NAV_WJMX | wj_set_colour_T:x | | +| /shaderparam2 | NAV_DETOUR | set_detour_end_continuous | | +| /shaderparam3 | NAV_LFO | set_lfo_modulation_3_level | | +| /shaderparam3 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | set_shader_speed_layer_2_amount | | +| /shaderparam3 | NAV_WJMX | wj_set_colour_T:y | | +| /shaderparam5 | DEFAULT | set_the_shader_param_1_layer_offset_1_continuous | set_param_1_layer_offset_0_modulation_level_continuous | | +| /shaderparam5 | NAV_SND | sound_set_modulation_energy_slot_1_level | | +| /shaderparam5 | NAV_WJMX | wj_set_back_colour:h | wj_set_current_modulation_slot_1_level | | +| /shaderparam6 | DEFAULT | set_the_shader_param_2_layer_offset_1_continuous | set_param_2_layer_offset_0_modulation_level_continuous | | +| /shaderparam6 | NAV_SND | sound_set_modulation_energy_slot_2_level | | +| /shaderparam6 | NAV_WJMX | wj_set_back_colour:s | wj_set_current_modulation_slot_2_level | | +| /shaderparam7 | DEFAULT | set_the_shader_param_3_layer_offset_1_continuous | set_param_3_layer_offset_0_modulation_level_continuous | | +| /shaderparam7 | NAV_SND | sound_set_modulation_energy_slot_3_level | | +| /shaderparam7 | NAV_WJMX | wj_set_back_colour:v | wj_set_current_modulation_slot_3_level | | +| /shaderparam8 | DEFAULT | set_the_shader_param_0_layer_offset_2_continuous | | +| /shaderparam9 | DEFAULT | set_the_shader_param_1_layer_offset_2_continuous | | | /volume | DEFAULT | modulate_param_0_to_amount_continuous | | -| a | LENGTH_SET | return_to_default_control_mode | | -| a | CONFIRM | return_to_default_control_mode | | -| a | NAV_BROWSER | move_browser_selection_up | | +| a | NAV_SHADERS | move_shaders_selection_up | move_shaders_selection_page_up | | | a | SHADER_PARAM | decrease_this_param | decrease_shader_param | | -| a | DEFAULT | seek_back_on_player | decrease_seek_time | | -| a | NAV_SHADERS | move_shaders_selection_up | | +| a | NAV_SETTINGS | move_settings_selection_up | move_settings_selection_page_up | | | a | PLAY_SHADER | decrease_this_param | decrease_shader_param | | -| a | NAV_SETTINGS | move_settings_selection_up | | -| b | LENGTH_SET | return_to_default_control_mode | | -| b | CONFIRM | return_to_default_control_mode | | -| b | NAV_BROWSER | move_browser_selection_down | | +| a | CONFIRM | return_to_default_control_mode | | +| a | DEFAULT | seek_back_on_player | decrease_seek_time | | +| a | NAV_PLUGINS | move_plugins_selection_up | move_plugins_selection_page_up | | +| a | NAV_BROWSER | move_browser_selection_up | move_browser_selection_page_up | | +| a | LENGTH_SET | return_to_default_control_mode | | +| b | NAV_SHADERS | move_shaders_selection_down | move_shaders_selection_page_down | | | b | SHADER_PARAM | increase_this_param | increase_shader_param | | -| b | DEFAULT | seek_forward_on_player | increase_seek_time | | -| b | NAV_SHADERS | move_shaders_selection_down | | +| b | NAV_SETTINGS | move_settings_selection_down | move_settings_selection_page_down | | | b | PLAY_SHADER | increase_this_param | increase_shader_param | | -| b | NAV_SETTINGS | move_settings_selection_down | | -| c | LENGTH_SET | record_fixed_length | | -| c | CONFIRM | perform_confirm_action | | -| c | NAV_DETOUR | toggle_detour_play | | -| c | NAV_BROWSER | enter_on_browser_selection | | -| c | SHADER_PARAM | return_to_default_control_mode | | -| c | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| b | CONFIRM | return_to_default_control_mode | | +| b | DEFAULT | seek_forward_on_player | increase_seek_time | | +| b | NAV_PLUGINS | move_plugins_selection_down | move_plugins_selection_page_down | | +| b | NAV_BROWSER | move_browser_selection_down | move_browser_selection_page_down | | +| b | LENGTH_SET | return_to_default_control_mode | | | c | NAV_SHADERS | enter_on_shaders_selection | map_on_shaders_selection | | -| c | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| c | SHADER_PARAM | return_to_default_control_mode | | | c | NAV_SETTINGS | enter_on_settings_selection | | -| d | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | +| c | PLAY_SHADER | toggle_shaders | toggle_shader_speed | | +| c | CONFIRM | perform_confirm_action | | +| c | DEFAULT | toggle_action_on_player | toggle_show_on_player | | +| c | NAV_PLUGINS | enter_on_plugins_selection | | +| c | NAV_BROWSER | enter_on_browser_selection | | +| c | LENGTH_SET | record_fixed_length | | +| c | NAV_DETOUR | toggle_detour_play | | | d | DEFAULT | switch_to_next_player | toggle_player_mode | | -| e | SHADER_PARAM | decrease_param_focus | | -| e | NAV_DETOUR | decrease_mix_shader | | -| e | PLAY_SHADER | decrease_param_focus | | +| d | NAV_DETOUR | toggle_detour_record | toggle_detour_record_loop | | | e | DEFAULT | set_playing_sample_start_to_current_duration | clear_playing_sample_start_time | | -| f | SHADER_PARAM | increase_param_focus | | -| f | NAV_DETOUR | increase_mix_shader | | -| f | PLAY_SHADER | increase_param_focus | | +| e | SHADER_PARAM | decrease_param_focus | | +| e | PLAY_SHADER | decrease_param_focus | | +| e | NAV_DETOUR | decrease_mix_shader | | | f | DEFAULT | set_playing_sample_end_to_current_duration | clear_playing_sample_end_time | | +| f | SHADER_PARAM | increase_param_focus | | +| f | PLAY_SHADER | increase_param_focus | | +| f | NAV_DETOUR | increase_mix_shader | | +| feedback | DEFAULT | toggle_feedback | | | g | DEFAULT | toggle_capture_preview | toggle_capture_recording | | | h | DEFAULT | cycle_display_mode | cycle_display_mode_back | | | i | DEFAULT | toggle_function | | | j | NAV_SHADERS | play_shader_0 | previous_shader_layer | | -| j | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | -| j | PLAY_SHADER | play_shader_0 | previous_shader_layer | | | j | DEFAULT | load_slot_0_into_next_player | previous_bank | | +| j | PLAY_SHADER | play_shader_0 | previous_shader_layer | | +| j | NAV_DETOUR | switch_to_detour_0 | set_the_detour_mix_0 | | | k | NAV_SHADERS | play_shader_1 | next_shader_layer | | -| k | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | -| k | PLAY_SHADER | play_shader_1 | next_shader_layer | | | k | DEFAULT | load_slot_1_into_next_player | next_bank | | +| k | PLAY_SHADER | play_shader_1 | next_shader_layer | | +| k | NAV_DETOUR | switch_to_detour_1 | set_the_detour_mix_1 | | | l | NAV_SHADERS | play_shader_2 | clear_shader_bank | | -| l | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | -| l | PLAY_SHADER | play_shader_2 | clear_shader_bank | | | l | DEFAULT | load_slot_2_into_next_player | clear_all_slots | | -| m | NAV_DETOUR | switch_to_detour_3 | | -| m | PLAY_SHADER | play_shader_3 | | +| l | PLAY_SHADER | play_shader_2 | clear_shader_bank | | +| l | NAV_DETOUR | switch_to_detour_2 | clear_this_detour | | | m | DEFAULT | load_slot_3_into_next_player | | -| n | PLAY_SHADER | play_shader_4 | | +| m | PLAY_SHADER | play_shader_3 | | +| m | NAV_DETOUR | switch_to_detour_3 | | | n | DEFAULT | load_slot_4_into_next_player | | -| o | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | +| n | PLAY_SHADER | play_shader_4 | | | o | DEFAULT | load_slot_5_into_next_player | toggle_screen_mirror | | -| p | PLAY_SHADER | play_shader_6 | toggle_shaders | | +| o | PLAY_SHADER | play_shader_5 | toggle_screen_mirror | | | p | DEFAULT | load_slot_6_into_next_player | toggle_shaders | | -| q | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | +| p | PLAY_SHADER | play_shader_6 | toggle_shaders | | +| play_shader_0 | DEFAULT | play_shader_0 | | +| play_shader_1 | DEFAULT | play_shader_1 | | +| play_shader_2 | DEFAULT | play_shader_2 | | +| play_shader_3 | DEFAULT | play_shader_3 | | +| play_shader_4 | DEFAULT | play_shader_4 | | +| play_shader_5 | DEFAULT | play_shader_5 | | +| play_shader_6 | DEFAULT | play_shader_6 | | +| play_shader_7 | DEFAULT | play_shader_7 | | +| play_shader_8 | DEFAULT | play_shader_8 | | +| play_shader_9 | DEFAULT | play_shader_9 | | | q | DEFAULT | load_slot_7_into_next_player | toggle_detour_mode | | -| r | PLAY_SHADER | play_shader_8 | toggle_feedback | | +| q | PLAY_SHADER | play_shader_7 | toggle_detour_mode | | | r | DEFAULT | load_slot_8_into_next_player | toggle_feedback | | -| s | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| r | PLAY_SHADER | play_shader_8 | toggle_feedback | | | s | DEFAULT | load_slot_9_into_next_player | confirm_shutdown | | +| s | PLAY_SHADER | play_shader_9 | confirm_shutdown | | +| shader_layer_0 | DEFAULT | toggle_shader_layer_0 | | +| shader_layer_1 | DEFAULT | toggle_shader_layer_1 | | +| shader_layer_2 | DEFAULT | toggle_shader_layer_2 | | +| toggle_x3 | DEFAULT | toggle_x3_as_speed | | ---- @@ -240,21 +417,46 @@ | Analogue input | Mode | Action (default) | Action (with FN) | | --- | --- | --- | --- | -| 0 | NAV_DETOUR | set_detour_mix_continuous | | -| 0 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | | -| 1 | NAV_DETOUR | set_detour_speed_position_continuous | | -| 1 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | | -| 2 | NAV_DETOUR | set_detour_start_continuous | | -| 2 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | | -| 3 | NAV_DETOUR | set_detour_end_continuous | | -| 3 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | | -| 4 | NAV_DETOUR | set_detour_mix_continuous | | -| 4 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | | -| 5 | NAV_DETOUR | set_detour_speed_position_continuous | | -| 5 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | | -| 6 | NAV_DETOUR | set_detour_start_continuous | | -| 6 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | | -| 7 | NAV_DETOUR | set_detour_end_continuous | | -| 7 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | | +| 0 | NAV_LFO | set_lfo_modulation_0_level | | +| 0 | NAV_SND | sound_set_config_energy_gain | | +| 0 | NAV_MANI | set_variable_A | | +| 0 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | set_strobe_amount_continuous | | +| 0 | NAV_LPRC | set_automation_speed | | +| 0 | NAV_WJMX | wj_set_position_N:x | | +| 0 | NAV_DETOUR | set_detour_speed_position_continuous | | +| 1 | NAV_SND | sound_set_config_energy_threshold | | +| 1 | NAV_WJMX | wj_set_position_N:y | | +| 1 | NAV_MANI | f:sin(x*pi):|set_variable_SIN | | +| 1 | NAV_LFO | set_lfo_modulation_1_level | | +| 1 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | set_shader_speed_layer_0_amount | | +| 1 | NAV_DETOUR | set_detour_start_continuous | | +| 2 | NAV_LFO | set_lfo_modulation_2_level | | +| 2 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | set_shader_speed_layer_1_amount | | +| 2 | NAV_WJMX | wj_set_colour_T:x | | +| 2 | NAV_DETOUR | set_detour_end_continuous | | +| 3 | NAV_LFO | set_lfo_modulation_3_level | | +| 3 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | set_shader_speed_layer_2_amount | | +| 3 | NAV_WJMX | wj_set_colour_T:y | | +| 4 | NAV_LFO | set_lfo_modulation_0_level | | +| 4 | NAV_SND | sound_set_config_energy_gain | | +| 4 | NAV_MANI | set_variable_A | | +| 4 | DEFAULT | set_the_shader_param_0_layer_offset_0_continuous | set_strobe_amount_continuous | | +| 4 | NAV_LPRC | set_automation_speed | | +| 4 | NAV_WJMX | wj_set_position_N:x | | +| 4 | NAV_DETOUR | set_detour_speed_position_continuous | | +| 5 | NAV_SND | sound_set_config_energy_threshold | | +| 5 | NAV_WJMX | wj_set_position_N:y | | +| 5 | NAV_MANI | f:sin(x*pi):|set_variable_SIN | | +| 5 | NAV_LFO | set_lfo_modulation_1_level | | +| 5 | DEFAULT | set_the_shader_param_1_layer_offset_0_continuous | set_shader_speed_layer_0_amount | | +| 5 | NAV_DETOUR | set_detour_start_continuous | | +| 6 | NAV_LFO | set_lfo_modulation_2_level | | +| 6 | DEFAULT | set_the_shader_param_2_layer_offset_0_continuous | set_shader_speed_layer_1_amount | | +| 6 | NAV_WJMX | wj_set_colour_T:x | | +| 6 | NAV_DETOUR | set_detour_end_continuous | | +| 7 | NAV_LFO | set_lfo_modulation_3_level | | +| 7 | DEFAULT | set_the_shader_param_3_layer_offset_0_continuous | set_shader_speed_layer_2_amount | | +| 7 | NAV_WJMX | wj_set_colour_T:y | | ---- + diff --git a/data_centre/data.py b/data_centre/data.py index 21ee858..791d8a1 100644 --- a/data_centre/data.py +++ b/data_centre/data.py @@ -468,7 +468,7 @@ class Data(object): if self.settings['shader']['USE_SHADER_BANK']['value'] == 'enabled' and ["SHADERS",'NAV_SHADERS'] in display_modes: display_modes.append(["SHDR_BNK",'PLAY_SHADER']) if self.settings['shader']['USE_SHADER_MOD']['value'] == 'enabled' and ["SHADERS",'NAV_SHADERS'] in display_modes: - display_modes.append(["SHDR_MOD","NAV_MOD"]) ## allow override, but fall back to PLAY_SHADER controls + display_modes.append(["SHDR_MOD",["NAV_MOD","PLAY_SHADER"]]) ## allow override, but fall back to PLAY_SHADER controls if self.settings['detour']['TRY_DEMO']['value'] == 'enabled': display_modes.append(["FRAMES",'NAV_DETOUR']) if self.settings['system'].setdefault('USE_PLUGINS', diff --git a/data_centre/plugin_collection.py b/data_centre/plugin_collection.py index c82855f..82d6f47 100644 --- a/data_centre/plugin_collection.py +++ b/data_centre/plugin_collection.py @@ -225,6 +225,10 @@ class AutomationSourcePlugin(Plugin): def recall_frame_data(self, data): raise NotImplementedError + def get_frame_summary(self, data): + line = self.__class__.name + "%s: %s"%(self.__class__.name,data) + return line + # these frame stubs deal with the simplest case of a frame being a dict of values # if its anything more complicated than that (like lists) then that will need to be # handled in the plugin by overriding these methods @@ -286,7 +290,7 @@ class AutomationSourcePlugin(Plugin): # else, # store as last value - print("WJSEND got pre-interpolated clip: %s" % [ f.f for f in frames if f is not None]) + print("AutomationSourcePlugin[%s] got pre-interpolated clip: %s" % ( type(self), [ f.f for f in frames if f is not None]) ) #last = [ [None]*4, [None]*4, [None]*4 ] last = {} @@ -358,7 +362,7 @@ class AutomationSourcePlugin(Plugin): process(self,findex,frame) - print("\nWJSEND got interpolated clip: %s" % [ f.f for f in frames if f is not None ]) + print("\nAutomationSourcePlugin got interpolated clip: %s" % [ f.f for f in frames if f is not None ]) self.distance_cache = {} @@ -482,6 +486,13 @@ class PluginCollection(object): else: return [c for c in self.plugins if include_disabled or not c.disabled] + def get_plugin_for_class_name(self, class_name): + for plugin in self.get_plugins(): + #print("got class name %s" % type(plugin).__name__==class_name) + if type(plugin).__name__==class_name == class_name: + return plugin + return None + def walk_package(self, package): """Recursively walk the supplied package to retrieve all plugins """ diff --git a/display_centre/display.py b/display_centre/display.py index d6d6991..9059ae5 100644 --- a/display_centre/display.py +++ b/display_centre/display.py @@ -479,6 +479,12 @@ class Display(object): g = '%s'%bar[int(value*(len(bar)-1))] return g + def get_mod_slot_label(self, slot): + sl = 'ABCD'[slot] + if slot != self.shaders.selected_modulation_slot: + sl = sl.lower() + return sl + def get_speed_indicator(self, value, convert = True): if convert: value = (value * 2.0) - 1.0 # convert 0 to 1 to -1 to +1 diff --git a/dotfiles/profiler.sh b/dotfiles/profiler.sh new file mode 100755 index 0000000..cbe32a1 --- /dev/null +++ b/dotfiles/profiler.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# launcher.sh +sleep 2 +xmodmap ~/r_e_c_u_r/dotfiles/.remap & +python3 -m cProfile ~/r_e_c_u_r/r_e_c_u_r.py | tee profile.output + diff --git a/json_objects/keypad_action_mapping.json b/json_objects/keypad_action_mapping.json index b1f8d89..a6038db 100644 --- a/json_objects/keypad_action_mapping.json +++ b/json_objects/keypad_action_mapping.json @@ -9,7 +9,8 @@ "CONFIRM": ["return_to_default_control_mode"], "SHADER_PARAM": ["decrease_this_param", "decrease_shader_param"], "PLAY_SHADER": ["decrease_this_param", "decrease_shader_param"], - "NAV_WJMX": ["wj_select_previous_command"] + "NAV_WJMX": ["wj_select_previous_command"], + "NAV_MOD": ["previous_shader_layer"] }, "b": { "NAV_BROWSER": ["move_browser_selection_down", "move_browser_selection_page_down"], @@ -21,7 +22,8 @@ "CONFIRM": ["return_to_default_control_mode"], "SHADER_PARAM": ["increase_this_param", "increase_shader_param"], "PLAY_SHADER": ["increase_this_param", "increase_shader_param"], - "NAV_WJMX": ["wj_select_next_command"] + "NAV_WJMX": ["wj_select_next_command"], + "NAV_MOD": ["next_shader_layer"] }, "c": { "NAV_BROWSER": ["enter_on_browser_selection"], diff --git a/plugins/LFOModulationPlugin.py b/plugins/LFOModulationPlugin.py index eb0eefc..4210583 100644 --- a/plugins/LFOModulationPlugin.py +++ b/plugins/LFOModulationPlugin.py @@ -13,7 +13,13 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation active = False # for keeping track of LFO levels - level = [0.0]*MAX_LFOS #, 0.0, 0.0, 0.0] + level = [0.0]*MAX_LFOS + speed = 0.5 + + # TODO: enable assigning of LFOs to mod slots + # with combination/averaging... + # needs UI to control it and [ [ 0.0 ] * 4 ] * 4 to handle the mappings? + # currently each LFO maps directly to mod slot stop_flag = False pause_flag = False @@ -22,8 +28,9 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation #self.PRESET_FILE_NAME = "ShaderLoopRecordPlugin/frames.json" self.presets = self.load_presets() - self.level = self.presets.get('levels', [0.0]*self.MAX_LFOS) + self.level = self.presets.get('levels', [0.0]*self.MAX_LFOS).copy() self.active = self.presets.get('active', False) + self.set_lfo_speed_direct(self.presets.get('speed', self.speed)) self.pc.shaders.root.after(1000, self.start_plugin) @@ -42,7 +49,7 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation def save_presets(self): #for cmd,struct in self.commands.items(): # self.presets.setdefault('modulation_levels',{})[cmd] = struct.get('modulation',[{},{},{},{}]) - self.pc.update_json(self.PRESET_FILE_NAME, { 'levels': self.level.copy(), 'active': self.active } ) + self.pc.update_json(self.PRESET_FILE_NAME, { 'levels': self.level.copy(), 'active': self.active, 'speed': self.speed } ) # DisplayPlugin methods def get_display_modes(self): @@ -52,22 +59,24 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation from tkinter import Text, END #super(DisplayPlugin).show_plugin(display, display_mode) display.display_text.insert(END, '{} \n'.format(display.body_title)) - display.display_text.insert(END, "LFOModulationPlugin ") + display.display_text.insert(END, "LFOModulation is ") display.display_text.insert(END, "ACTIVE" if self.active else "not active") - display.display_text.insert(END, "\tSpeed: {:4.2f}% {}\n\n".format(self.speed*100, display.get_speed_indicator(self.speed/2.0, convert=False))) + display.display_text.insert(END, "\tSpeed: {:4.1f}% {}\n\n".format(self.speed*100, display.get_speed_indicator(self.speed/2.0, convert=False))) for lfo,value in enumerate(self.level): display.display_text.insert(END, "lfo {} level: {:4.2f}% {}\t".format(lfo,value*100,display.get_bar(value))) display.display_text.insert(END, "{}\t{}\n".format(self.last_lfo_status[lfo], display.get_bar(self.last_lfo_value[lfo]))) - display.display_text.insert(END, "\t%s\n" % self.formula[lfo]) + display.display_text.insert(END, "\tslot %s\t%s\n" % (display.get_mod_slot_label(lfo), self.formula[lfo])) + + display.display_text.insert(END, "\n") # AutomationSourcePlugin methods # methods/vars for AutomationSourcePlugin # a lot of the nitty-gritty handled in parent class, these are for interfacing to the plugin def get_frame_data(self): - diff = { 'levels': self.level, 'speed': self.speed } + diff = { 'levels': self.level.copy(), 'speed': self.speed, 'active': self.active } #self.last_record = {} #print(">>> reporting frame data for rec\n\t%s" % diff) return diff @@ -76,15 +85,28 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation if data is None: return # print(">>>>recall from data:\n\t%s\n" %data) - """for queue, item in data.items(): - if item is not None: - self.send_buffered(queue, item[0], item[1], record = False)""" if data.get('levels') is not None: for slot,level in enumerate(data.get('levels')): self.set_lfo_modulation_level(slot, level) + if data.get('active') is not None: + self.active = data.get('active') if data.get('speed') is not None: self.set_lfo_speed_direct(data.get('speed')) + def get_frame_summary(self, data): + line = "" + if data.get('levels') is not None: + line += "LFO levels [" + for i in range(4): + line += self.pc.display.get_bar(data['levels'][i]) + line += "] " + if data.get('active') is not None: + line += "active " if data.get('active') else 'inactive ' + if data.get('speed') is not None: + line += self.pc.display.get_speed_indicator(data.get('speed')) + #print ("returning %s from %s" %(line, data)) + return line + # ActionsPlugin methods @property def parserlist(self): @@ -163,6 +185,7 @@ class LFOModulationPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin, Automation return for lfo in range(0,self.MAX_LFOS): + # TODO: this is where would use assignable amounts and average across multiple inputs if self.level[lfo]>0.0: self.pc.actions.call_method_name( "modulate_param_%s_to_amount_continuous"%lfo, diff --git a/plugins/SoundReactPlugin.py b/plugins/SoundReactPlugin.py index c9ec03a..4b534c6 100644 --- a/plugins/SoundReactPlugin.py +++ b/plugins/SoundReactPlugin.py @@ -116,7 +116,7 @@ class SoundReactPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin): for sourcename in sorted(self.sources): value = "{:8}:\t".format(sourcename) for i,level in enumerate(self.levels[sourcename]): - g = "ABCD"[i]+'%s '%self.pc.display.get_bar(level) + g = self.pc.display.get_mod_slot_label(i)+'%s '%self.pc.display.get_bar(level) value += g value += "\t" value += self.display_values.get(sourcename) or "{:4.2f}%".format(self.values.get(sourcename,0)*100) or "None" @@ -164,7 +164,7 @@ class SoundReactPlugin(ActionsPlugin,SequencePlugin,DisplayPlugin): config.setdefault('energy',{})['gain'] = 0.5 # how much to multiply signal by - config.setdefault('energy',{})['threshold'] = 0.5 # subtract from post-gain signal (hence ignore all values below) + config.setdefault('energy',{})['threshold'] = 0.5 # subtract from post-gain signal (hence ignore all values below this value) GAIN_MULT = 1.0 def energy(self,data): peak=np.average(np.abs(data))*2 diff --git a/plugins/WJSendPlugin.py b/plugins/WJSendPlugin.py index df9e13d..3a4dbed 100644 --- a/plugins/WJSendPlugin.py +++ b/plugins/WJSendPlugin.py @@ -3,6 +3,48 @@ from serial import Serial import data_centre.plugin_collection from data_centre.plugin_collection import ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationReceiverPlugin, AutomationSourcePlugin import threading +import time + +class AsyncWriter(threading.Thread): + queue = [] + quit_flag = False + def __init__(self, plugin): + super().__init__() + self.plugin = plugin + + def write(self, data): + self.queue.append(data) + + def ready(self): + return len(self.queue)>0 + + def quit(self): + self.quit_flag = True + + def run(self): + while not self.quit_flag: + #print("AsyncWriter looping..") + if not self.plugin.active or self.plugin.disabled: + #print("plugin active or disabled - exiting!") + return + if self.plugin.ser is None or not self.plugin.ser: + #print("no stream - skipping") + time.sleep(0.5) + continue + if not self.ready(): + #print("not ready - skipping") + time.sleep(0.005) + continue + item = self.queue.pop(0) + if item is not None: + #print("sending %s" % item) + self.plugin.ser.write(item) + time.sleep(len(item)*0.005) + else: + time.sleep(0.01) + if len(self.queue)>4: + self.queue = self.queue[-4:4] + class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationReceiverPlugin, AutomationSourcePlugin): DEBUG = False #True @@ -10,6 +52,8 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei active = True + asyncwriter = None + sleep = 0.0 PRESET_FILE_NAME = "WJSendPlugin/presets.json" @@ -23,7 +67,7 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei rtscts=True, # TODO : test without this one timeout=timeout)""" - THROTTLE = 10 # milliseconds to wait between refreshing parameters + THROTTLE = 20 # milliseconds to wait between refreshing parameters selected_command_name = None selected_argument_index = 0 @@ -39,7 +83,7 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei print("read presets:\n%s\n" % self.presets) # load the stored modulation levels into the current config for cmd,levels in self.presets['modulation_levels'].items(): - self.commands[cmd]['modulation'] = levels + self.commands[cmd]['modulation'] = levels.copy() # build a reverse map of friendly name -> command struct for later use for cmd,struct in self.commands.items(): @@ -63,6 +107,8 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei def stop_plugin(self): super().stop_plugin() + self.asyncwriter.quit() + self.asyncwriter = None self.save_presets() @@ -83,6 +129,12 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei if item is not None: self.send_buffered(queue, item[0], item[1], record = False) + def get_frame_summary(self, data): + line = "WJMX: " + for key, value in data.items(): + line += key + ", " + print("returning line %s" % line) + return line # methods for ModulationReceiverPlugin - receives changes to the in-built modulation levels (-1 to +1) # experimental & hardcoded ! @@ -147,7 +199,7 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei #if arg_name in mods: v = mods.get(arg_name,0.0) g = '%s'%self.pc.display.get_bar(v) - output += "{}:{}|".format('ABCD'[slot],g) + output += "{}:{}|".format(self.pc.display.get_mod_slot_label(slot),g) if is_selected: output+="]" output += "\n" @@ -184,6 +236,7 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei import threading serial_lock = threading.Lock() def send_serial_string(self, string): + # TODO: thread this so can implement throttling and reduce bottleneck... if not self.active: return try: @@ -192,14 +245,18 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei output = b'\2' + string.encode('ascii') + b'\3' #with self.serial_lock: #self.ser.write(b'\2\2\2\2\3\3\3\3') - self.ser.write(output) #.encode()) + if self.asyncwriter is None: + self.asyncwriter = AsyncWriter(self) + self.asyncwriter.start() + self.asyncwriter.write(output) + #self.ser.write(output) #.encode()) # TODO: sleeping here seems to help serial response lag problem? - self.sleep = 0.2 #self.pc.get_variable('A') + """self.sleep = 0.2 #self.pc.get_variable('A') #print ("got sleep %s" % self.sleep) if self.sleep>=0.1: #print("using sleep %s" % self.sleep) import time - time.sleep(self.sleep/10.0) + time.sleep(self.sleep/10.0)""" #yield from self.ser.drain() if self.DEBUG: print("send_serial_string: sent string '%s'" % output) #.encode('ascii')) @@ -220,9 +277,8 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei # sorting the commands that are sent seems to fix jerk and lag that is otherwise pretty horrendous with self.queue_lock: for queue, command in sorted(self.queue.items()): - # TODO: modulate the parameters self.send_buffered(queue, command[0], command[1]) - #self.queue.clear() + #self.queue.clear() except Exception: print ("WJSendPlugin>>> !!! CAUGHT EXCEPTION running queue %s!!!" % queue) import traceback @@ -294,6 +350,8 @@ class WJSendPlugin(ActionsPlugin, SequencePlugin, DisplayPlugin, ModulationRecei def toggle_active(self): self.active = not self.active + if not self.active: + self.asyncwriter = None def reset_modulation_levels(self): for cmd,struct in self.commands.items(): diff --git a/plugins/frame_manager.py b/plugins/frame_manager.py index 7856b82..f682138 100644 --- a/plugins/frame_manager.py +++ b/plugins/frame_manager.py @@ -83,25 +83,27 @@ class Frame: count = 0 line = "" for key,d in sorted(self.f.items()): + #print ("get_frame_summary: checking %s value %s" % (key,d)) + if type(d) is dict and len(d)==0: # skip empty dicts + continue if key in ["selected_shader","layer_active_status","shader_params","shader_speeds","selected_shader_slots"]: - # skip these as dealt with above + # skip these as dealt with below pass elif key in ['shader_modulation_levels']: for layer in range(3): o = "" for slot in range(4): - sl = 'ABCD'[slot] - if slot != self.pc.shaders.selected_modulation_slot: - sl = sl.lower() + sl = self.pc.display.get_mod_slot_label(slot) o+= sl + "[" for param in range(4): o += self.pc.display.get_bar(d[layer][param][slot]) o+= "] " summary.append("Shader layer %s: %s"%(layer,o)) - elif key in ["WJSendPlugin"]: - # tends to be heavy so save it for later - # TODO: ask plugin to format the data for summary? - not_shown[key] = d + elif self.pc.get_plugin_for_class_name(key) is not None: + summary.append(self.pc.get_plugin_for_class_name(key).get_frame_summary(d)) + """elif key in ["WJSendPlugin"]: + # for things that tend to be heavy so dont show + not_shown[key] = d""" else: line += "%s: %s" % (key, d) count += 1 diff --git a/user_input/numpad_input.py b/user_input/numpad_input.py index 634de81..ccc0c8c 100644 --- a/user_input/numpad_input.py +++ b/user_input/numpad_input.py @@ -2,6 +2,8 @@ import string import sys class NumpadInput(object): + KEY_000_DELAY = 100 + def __init__(self, root, message_handler, display, actions, data): self.root = root self.message_handler = message_handler @@ -22,7 +24,13 @@ class NumpadInput(object): numpad = list(string.ascii_lowercase[0:19]) if event.char is 'h': # DISP button + #self.root.after(60, lambda:self.on_key_press_delay(event.char)) + #return + if self.data.is_display_held: + return # ignore spurious message if already held""" self.data.is_display_held = True + if self.in_0_event: + return if event.char is '.' or event.char is 'z': self.actions.quit_the_program() @@ -30,7 +38,11 @@ class NumpadInput(object): event.char = self.on_0_key_press() if event.char in numpad: - self.run_action_for_mapped_key(event.char) + numbers = "jklmnopqrs" + if self.data.is_display_held and event.char in numbers: + self.select_display_mode_index(numbers.index(event.char)) + else: + self.run_action_for_mapped_key(event.char) else: print('{} is not in keypad map'.format(event.char)) @@ -39,8 +51,11 @@ class NumpadInput(object): if event.char in numpad: self.check_key_release_settings(event.char) - if event.char is 'h': - self.data.is_display_held = False + ##print ("--- releasing %s" % event.char) + # lag for 60ms to check that this is not a 'stream of 000' bullshit job from the keypad + if event.char is 'h' and not self.in_0_event: + self.root.after(self.KEY_000_DELAY+5, self.on_key_disp_release_delay) + #self.data.is_display_held = False def on_mouse_move(self, event): if self.data.settings['user_input'].setdefault( @@ -56,6 +71,12 @@ class NumpadInput(object): self.root.after(0, self.run_action_for_mapped_key, 'y_m', event.y / height) #self.run_action_for_mapped_key(event.char) + def select_display_mode_index(self, index): + if index >= len(self.data.get_display_modes_list()): + self.message_handler.set_message('ERROR', 'No page %s to display!' % index) + else: + self.actions.call_method_name("set_display_mode_%s"%self.data.get_display_modes_list()[index]) + def run_action_for_mapped_key(self, key, value=-1): this_mapping = self.key_mappings[key] if type(self.data.control_mode) is list: @@ -76,13 +97,13 @@ class NumpadInput(object): numbers = "jklmnopqrs" if self.data.is_display_held and key in numbers: - return self.actions.call_method_name("set_display_mode_%s"%self.data.get_display_modes_list()[numbers.index(key)]) - - print('the numpad action being called is {} (mode is {})'.format(this_mapping[mode][is_function], mode)) - if value != -1: - self.actions.call_method_name(this_mapping[mode][is_function],value) + self.select_display_mode_index(numbers.index(key)) else: - self.actions.call_method_name(this_mapping[mode][is_function]) + print('the numpad action being called for \'{}\' is {} (mode is {})'.format(key, this_mapping[mode][is_function], mode)) + if value != -1: + self.actions.call_method_name(this_mapping[mode][is_function],value) + else: + self.actions.call_method_name(this_mapping[mode][is_function]) if is_function and self.data.settings['sampler']['FUNC_GATED']['value'] == 'off': self.data.function_on = False @@ -104,28 +125,47 @@ class NumpadInput(object): if 'DEFAULT' in this_mapping: if this_mapping['DEFAULT'][0] == 'toggle_function': self.run_action_for_mapped_key(key) - + + def on_key_disp_release_delay(self): + if not self.in_0_event:# and self.additional_0_in_event==0: + print("releasing !") + self.data.is_display_held = False + else: + print("ignoring release !") + + """def on_key_disp_press_delay(self): + if not self.in_0_event and self.additional_0_in_event==0: + print("pressing!") + self.data.is_display_held = True + else: + print("ignoring press!")""" def on_0_key_press(self) : + print ("on_0_key_press!") if(not self.in_0_event ): + print (" first 0 received!") self.in_0_event = True self.additional_0_in_event = 0 - self.root.after(60, self.check_event_outcome) + self.root.after(self.KEY_000_DELAY, self.check_event_outcome) else: + print (" additional 0 received making %s!" % str(self.additional_0_in_event + 1)) self.additional_0_in_event = self.additional_0_in_event + 1 def check_event_outcome(self): if(self.additional_0_in_event == 0 ): + print (" no additional events, sending s") self.in_0_event = False self.run_action_for_mapped_key('s') elif(self.additional_0_in_event > 1): + print (" %s additional events, sending n"%self.additional_0_in_event) self.in_0_event = False self.run_action_for_mapped_key('n') elif(self.additional_0_in_event == 1): print('this doesnt happen - may not be needed') - self.root.after(60, self.second_check_event_outcome) + self.root.after(self.KEY_000_DELAY, self.second_check_event_outcome) def second_check_event_outcome(self): + print("not supposed to happen?") if(self.additional_0_in_event == 1 ): self.in_0_event = False self.run_action_for_mapped_key('s')