1 // omc-learn.h 2 // LiVES (lives-exe) 3 // (c) G. Finch 2003 - 2018 4 // Released under the GPL 3 or later 5 // see file ../COPYING for licensing details 6 7 #ifndef HAS_LIVES_OMC_LEARN_H 8 #define HAS_LIVES_OMC_LEARN_H 9 10 #define OMC_DEV_MIDI (1 << 0) 11 #define OMC_DEV_JS (1 << 1) 12 #define OMC_DEV_FORCE_RAW_MIDI (1 << 2) 13 #define OMC_DEV_MIDI_DUMMY (1 << 3) 14 15 /** max number of macros */ 16 #define N_OMC_MACROS 64 17 18 /** floating point precision */ 19 #define OMC_FP_FIX 4 20 21 // OMC device interfaces 22 #if HAVE_LINUX_JOYSTICK_H 23 #define OMC_JS_IMPL 24 #endif 25 26 #define OMC_MIDI_IMPL 27 28 #define MIDI_OMNI -1 29 30 #ifdef OMC_JS_IMPL 31 char *js_mangle(void); 32 boolean js_open(void); 33 void js_close(void); 34 const char *get_js_filename(void); 35 #endif 36 37 #ifdef OMC_MIDI_IMPL 38 char *midi_mangle(void); 39 const char *get_midi_filename(void); 40 boolean midi_open(void); 41 void midi_close(void); 42 #endif 43 44 /* parameter types */ 45 #define OMC_PARAM_INT 1 46 #define OMC_PARAM_DOUBLE 2 47 #define OMC_PARAM_SPECIAL 128 ///< can be int or double, depending on effect type 48 49 typedef struct { 50 char *msg; ///< OSC message 51 char *macro_text; ///< macro text 52 char *info_text; ///< descriptive text 53 char *stype_tags; ///< setter type tags 54 55 int nparams; 56 57 char **pname; 58 59 int *ptypes; 60 int *mini, *maxi, *vali; 61 62 double *mind, *maxd, *vald; 63 } lives_omc_macro_t; 64 65 typedef struct { 66 char *srch; ///< string to match 67 int macro; ///< action number this is linked to (or -1) (see mainwindow.h) 68 69 int nvars; ///< number of input params 70 int *offs0; ///< offs to add to params before scale (pre-bias) 71 double *scale; ///< scale for params (unbiased scale) 72 int *offs1; ///< offs to add to params after scale (post bias) 73 74 int *min; ///< min values of input params 75 int *max; ///< max values of input params 76 77 boolean *matchp; ///< do we additionally need to match this param val in the input ? 78 int *matchi; ///< match value 79 80 // enumerated by number of params in target macro 81 int *map; ///< mapping macro parameters to variables in the input (whether we use a default or a variable) 82 // (reverse ordered, starting from the last macro parameter) 83 int *fvali; ///< defaults, mapping to fixed ints 84 double *fvald; ///< defaults, mapping to fixed doubles 85 86 ///////////////////////// following this is not saved/loaded 87 88 LiVESWidget *treev1; 89 LiVESWidget *treev2; 90 91 LiVESTreeStore *gtkstore; 92 LiVESTreeStore *gtkstore2; 93 94 int *tmpvals; 95 } lives_omc_match_node_t; 96 97 typedef struct { 98 LiVESWidget *dialog; 99 LiVESWidget *clear_button; 100 LiVESWidget *del_all_button; 101 102 int tbl_rows; 103 int tbl_currow; 104 LiVESWidget *table; 105 LiVESWidget *top_vbox; 106 } omclearn_w; 107 108 enum { 109 TITLE_COLUMN, 110 VALUE_COLUMN, 111 FILTER_COLUMN, 112 RANGE_COLUMN, 113 OFFS1_COLUMN, 114 SCALE_COLUMN, 115 OFFS2_COLUMN, 116 OMC_NUM_COLUMNS 117 }; 118 119 enum { 120 TITLE2_COLUMN, 121 VALUE2_COLUMN, 122 ADJUSTMENT, 123 OMC_NUM2_COLUMNS 124 }; 125 126 #define OMC_INTERNAL 0 127 128 #define OMC_JS 1 129 #define OMC_JS_AXIS 2 130 #define OMC_JS_BUTTON 3 131 132 #define OMC_MIDI 128 133 #define OMC_MIDI_NOTE 129 134 #define OMC_MIDI_NOTE_OFF 130 135 #define OMC_MIDI_CONTROLLER 131 136 #define OMC_MIDI_PITCH_BEND 132 137 #define OMC_MIDI_PGM_CHANGE 133 138 139 // get a macro 140 const lives_omc_macro_t *get_omc_macro(int idx); 141 142 /// start learning MIDI inputs 143 void on_midi_learn_activate(LiVESMenuItem *, livespointer); 144 145 /// process a string (i.e. convert to an OSC message and pass to OSC subsys) 146 /// only need to set omclw if learn is TRUE 147 boolean omc_process_string(int supertype, const char *string, boolean learn, omclearn_w *omclw); 148 149 #define OMC_FILE_VSTRING "LiVES OMC map version 1.1" 150 #define OMC_FILE_VSTRING_1_0 "LiVES OMC map version 1.0" 151 152 boolean has_devicemap(int has_this_macro); 153 void create_devicemap_directory(void); 154 void on_devicemap_save_activate(LiVESMenuItem *, livespointer); 155 void on_devicemap_load_activate(LiVESMenuItem *, livespointer); 156 157 #include "osc.h" 158 159 #define OSC_BUF_SIZE 1024 160 #define OSC_MAX_TYPETAGS 64 161 162 /// decode learnt behaviours 163 OSCbuf *omc_learner_decode(int type, int index, const char *string); 164 165 #endif // HAS_LIVES_OMC_LEARN_H 166