X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fsurfaces%2Fosc%2Fosc.h;h=bc612b0881fd6ab7ec8eaa388d89c23c3c5fa65e;hb=8de580c12393a79a9137b8c8191b0a951003514b;hp=8249f544118dc712938b790a271c104c52d81e40;hpb=5bf8a5537b7771a7f523ab242f186e513c3a4c76;p=ardour.git diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 8249f54411..bc612b0881 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -37,6 +37,7 @@ #include "pbd/abstract_ui.h" #include "ardour/types.h" +#include "ardour/send.h" #include "control_protocol/control_protocol.h" #include "pbd/i18n.h" @@ -45,6 +46,7 @@ class OSCControllable; class OSCRouteObserver; class OSCGlobalObserver; class OSCSelectObserver; +class OSCCueObserver; namespace ARDOUR { class Session; @@ -81,9 +83,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int set_active (bool yn); bool get_active () const; - int set_feedback (bool yn); - bool get_feedback () const; - int start (); int stop (); @@ -97,14 +96,13 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI }; typedef std::vector > Sorted; - Sorted get_sorted_stripables(std::bitset<32> types); - // cue - //Sorted cue_get_sorted_stripables(boost::shared_ptr aux); + Sorted get_sorted_stripables(std::bitset<32> types, bool cue); // keep a surface's global setup by remote server url struct OSCSurface { public: std::string remote_url; // the url these setting belong to + bool no_clear; // don't send osc clear messages on strip change uint32_t bank; // current bank uint32_t bank_size; // size of banks for this surface std::bitset<32> strip_types;// what strip types are a part of this bank @@ -115,6 +113,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI bool expand_enable; // use expand instead of select OSCSelectObserver* sel_obs; // So we can sync select feedback with selected channel Sorted strips; // list of stripables for this surface + bool cue; // is this a cue surface + uint32_t aux; // aux index for this cue surface + Sorted sends; // list of sends for cue aux }; /* * feedback bits: @@ -174,7 +175,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI lo_server _osc_unix_server; std::string _osc_unix_socket_path; std::string _osc_url_file; - bool _send_route_changes; OSCDebugMode _debugmode; bool address_only; std::string remote_port; @@ -219,20 +219,37 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI void transport_speed (lo_message msg); void record_enabled (lo_message msg); + // cue + Sorted cue_get_sorted_stripables(boost::shared_ptr aux, uint32_t id, lo_message msg); + int cue_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg); + int cue_set (uint32_t aux, lo_message msg); + int _cue_set (uint32_t aux, lo_address addr); + int cue_next (lo_message msg); + int cue_previous (lo_message msg); + int cue_send_fader (uint32_t id, float position, lo_message msg); + int cue_send_enable (uint32_t id, float state, lo_message msg); + int cue_aux_fader (float position, lo_message msg); + int cue_aux_mute (float state, lo_message msg); + void cue_set_aux (uint32_t aux, lo_message msg); + int cue_float_message (std::string, float value, lo_address addr); + int text_message (std::string path, std::string val, lo_address addr); + boost::shared_ptr cue_get_send (uint32_t id, lo_address addr); + // end cue + #define OSC_DEBUG \ if (_debugmode == All) { \ debugmsg (dgettext(PACKAGE, "OSC"), path, types, argv, argc); \ } -#define PATH_CALLBACK_MSG(name) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ +#define PATH_CALLBACK_MSG(name) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ if (argc > 0 && !strcmp (types, "f") && argv[0]->f != 1.0) { return 0; } \ - name (data); \ - return 0; \ + name (data); \ + return 0; \ } PATH_CALLBACK_MSG(route_get_sends); @@ -246,11 +263,11 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK_MSG(bank_down); #define PATH_CALLBACK(name) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg ** argv, int argc, void *) { \ - OSC_DEBUG; \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg ** argv, int argc, void *) { \ + OSC_DEBUG; \ if (argc > 0 && !strcmp (types, "f") && argv[0]->f != 1.0) { return 0; } \ name (); \ return 0; \ @@ -312,16 +329,16 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK(scroll_up_1_page); PATH_CALLBACK(scroll_dn_1_page); -#define PATH_CALLBACK1(name,type,optional) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ +#define PATH_CALLBACK1(name,type,optional) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ - OSC_DEBUG; \ - if (argc > 0) { \ - name (optional argv[0]->type); \ - } \ - return 0; \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ + if (argc > 0) { \ + name (optional argv[0]->type); \ + } \ + return 0; \ } PATH_CALLBACK1(set_transport_speed,f,); @@ -335,17 +352,20 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1(master_set_mute,i,); PATH_CALLBACK1(monitor_set_gain,f,); PATH_CALLBACK1(monitor_set_fader,f,); + PATH_CALLBACK1(monitor_set_mute,i,); + PATH_CALLBACK1(monitor_set_dim,i,); + PATH_CALLBACK1(monitor_set_mono,i,); -#define PATH_CALLBACK1_MSG(name,arg1type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ +#define PATH_CALLBACK1_MSG(name,arg1type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ - if (argc > 0) { \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ + if (argc > 0) { \ name (argv[0]->arg1type, data); \ - } \ - return 0; \ + } \ + return 0; \ } // pan position needs message info to send feedback @@ -381,65 +401,65 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1_MSG(sel_eq_hpf,f); PATH_CALLBACK1_MSG(sel_expand,i); -#define PATH_CALLBACK2(name,arg1type,arg2type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ +#define PATH_CALLBACK2(name,arg1type,arg2type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ - OSC_DEBUG; \ - if (argc > 1) { \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ + if (argc > 1) { \ name (argv[0]->arg1type, argv[1]->arg2type); \ - } \ - return 0; \ + } \ + return 0; \ } -#define PATH_CALLBACK2_MSG(name,arg1type,arg2type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ +#define PATH_CALLBACK2_MSG(name,arg1type,arg2type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ - if (argc > 1) { \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ + if (argc > 1) { \ name (argv[0]->arg1type, argv[1]->arg2type, data); \ - } \ - return 0; \ + } \ + return 0; \ } -#define PATH_CALLBACK2_MSG_s(name,arg1type,arg2type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ - return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ - if (argc > 1) { \ - name (argv[0]->arg1type, &argv[1]->arg2type, data); \ - } \ - return 0; \ - } - -#define PATH_CALLBACK3(name,arg1type,arg2type,arg3type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ - return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ - if (argc > 1) { \ - name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type, data); \ - } \ - return 0; \ - } - -#define PATH_CALLBACK4(name,arg1type,arg2type,arg3type,arg4type) \ - static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ - return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ - } \ - int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ - OSC_DEBUG; \ - if (argc > 1) { \ - name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type, data); \ - } \ - return 0; \ - } +#define PATH_CALLBACK2_MSG_s(name,arg1type,arg2type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ + return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ + if (argc > 1) { \ + name (argv[0]->arg1type, &argv[1]->arg2type, data); \ + } \ + return 0; \ + } + +#define PATH_CALLBACK3(name,arg1type,arg2type,arg3type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ + return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ + if (argc > 1) { \ + name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type, data); \ + } \ + return 0; \ + } + +#define PATH_CALLBACK4(name,arg1type,arg2type,arg3type,arg4type) \ + static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ + return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ + } \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ + if (argc > 1) { \ + name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type, data); \ + } \ + return 0; \ + } PATH_CALLBACK2_MSG(sel_sendgain,i,f); PATH_CALLBACK2_MSG(sel_sendfader,i,f); @@ -530,6 +550,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int master_set_mute (uint32_t state); int monitor_set_gain (float dB); int monitor_set_fader (float position); + int monitor_set_mute (uint32_t state); + int monitor_set_dim (uint32_t state); + int monitor_set_mono (uint32_t state); int sel_recenable (uint32_t state, lo_message msg); int sel_recsafe (uint32_t state, lo_message msg); int sel_mute (uint32_t state, lo_message msg); @@ -575,11 +598,11 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI void notify_routes_added (ARDOUR::RouteList &); void notify_vca_added (ARDOUR::VCAList &); - void update_clock (); int cancel_all_solos (); bool periodic (void); sigc::connection periodic_connection; PBD::ScopedConnectionList session_connections; + PBD::ScopedConnectionList cueobserver_connections; int route_send_fail (std::string path, uint32_t ssid, float val, lo_address addr); int sel_send_fail (std::string path, uint32_t id, float val, lo_address addr); @@ -592,6 +615,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI typedef std::list GlobalObservers; GlobalObservers global_observers; + typedef std::list CueObservers; + CueObservers cue_observers; + void debugmsg (const char *prefix, const char *path, const char* types, lo_arg **argv, int argc); static OSC* _instance;