Ardour  9.2-129-gdf5e1050bd
osc.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2009-2011 Carl Hetherington <carl@carlh.net>
3  * Copyright (C) 2009-2017 Paul Davis <paul@linuxaudiosystems.com>
4  * Copyright (C) 2009 David Robillard <d@drobilla.net>
5  * Copyright (C) 2013-2016 Robin Gareus <robin@gareus.org>
6  * Copyright (C) 2015 Johannes Mueller <github@johannes-mueller.org>
7  * Copyright (C) 2016-2018 Len Ovens <len@ovenwerks.net>
8  * Copyright (C) 2016 Ben Loftis <ben@harrisonconsoles.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24 
25 #ifndef ardour_osc_h
26 #define ardour_osc_h
27 
28 #include <bitset>
29 #include <memory>
30 #include <string>
31 #include <vector>
32 
33 #include <pthread.h>
34 
35 #include <lo/lo.h>
36 
37 #include <glibmm/main.h>
38 
39 #define ABSTRACT_UI_EXPORTS
40 #include "pbd/abstract_ui.h"
41 
42 #include "ardour/types.h"
43 #include "ardour/send.h"
44 #include "ardour/plugin.h"
46 
47 #include "pbd/i18n.h"
48 
49 
50 class OSCControllable;
51 class OSCRouteObserver;
52 class OSCSelectObserver;
53 class OSCCueObserver;
54 
55 namespace ARDOUR {
56 class Session;
57 class Route;
58 class ZeroConf;
59 }
60 
61 /* this is mostly a placeholder because I suspect that at some
62  point we will want to add more members to accommodate
63  certain types of requests to the OSC UI
64 */
65 
66 namespace ArdourSurface {
67 
68 class OSCGlobalObserver;
69 
70 struct OSCUIRequest : public BaseUI::BaseRequestObject {
71  public:
74 };
75 
76 class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
77 {
78  public:
79  OSC (ARDOUR::Session&, uint32_t port);
80  virtual ~OSC();
81 
82  XMLNode& get_state () const;
83  int set_state (const XMLNode&, int version);
84 
86 
87  bool has_editor () const { return true; }
88  void* get_gui () const;
89  void tear_down_gui ();
90 
91  int set_active (bool yn);
92  bool get_active () const;
93 
94  // generic osc send
96  int float_message (std::string, float value, lo_address addr);
97  int int_message (std::string, int value, lo_address addr);
98  int text_message (std::string path, std::string val, lo_address addr);
99  int float_message_with_id (std::string, uint32_t ssid, float value, bool in_line, lo_address addr);
100  int int_message_with_id (std::string, uint32_t ssid, int value, bool in_line, lo_address addr);
101  int text_message_with_id (std::string path, uint32_t ssid, std::string val, bool in_line, lo_address addr);
102 
103  int send_group_list (lo_address addr);
104 
105  int start ();
106  int stop ();
107 
111  All
112  };
113 
114  enum OSCTempMode {
115  TempOff = 0,
117  VCAOnly = 2,
118  BusOnly = 3
119  };
120 
121  typedef std::vector<std::shared_ptr<ARDOUR::Stripable> > Sorted;
122  Sorted get_sorted_stripables(std::bitset<32> types, bool cue, uint32_t custom, Sorted my_list);
123  typedef std::map<std::shared_ptr<ARDOUR::AutomationControl>, uint32_t> FakeTouchMap;
125 
126 // keep a surface's global setup by remote server url
127  struct OSCSurface {
128  public:
129  //global
130  std::string remote_url; // the url these setting belong to
131  bool no_clear; // don't send osc clear messages on strip change
132  uint32_t jogmode; // current jogmode
133  OSCGlobalObserver* global_obs; // pointer to this surface's global observer
134  uint32_t nstrips; // how many strips are there for strip_types
135  std::bitset<32> feedback; // What is fed back? strips/meters/timecode/bar_beat/global
136  int gainmode; // what kind of faders do we have Gain db or position 0 to 1?
138  Sorted custom_strips; // a sorted list of user selected strips
139  uint32_t custom_mode; // use custom strip list
140  OSCTempMode temp_mode; // use temp strip list
141  Sorted temp_strips; // temp strip list for grouponly, vcaonly, auxonly
142  std::shared_ptr<ARDOUR::Stripable> temp_master; // stripable this surface uses as temp master
143  Sorted strips; // list of stripables for this surface
144  // strips
145  uint32_t bank; // current bank
146  uint32_t bank_size; // size of banks for this surface
147  std::vector<OSCRouteObserver*> observers; // route observers for this surface
148  std::bitset<32> strip_types;// what strip types are a part of this bank
149  //select
150  OSCSelectObserver* sel_obs; // So we can sync select feedback with selected channel
151  uint32_t expand; // Used by /select/select
152  bool expand_enable; // use expand instead of select
153  std::shared_ptr<ARDOUR::Stripable> expand_strip; // stripable this surface uses for expand
154  std::shared_ptr<ARDOUR::Stripable> select; // stripable this surface uses as selected
155  int plug_page; // current plugin page
156  uint32_t plug_page_size; // plugin page size (number of controls)
157  int plugin_id; // id of current plugin
158  std::vector<int> plug_params; // vector to store ports that are controls
159  std::vector<int> plugins; // stores allowable plugins with index (work around MB strip PIs)
160  int send_page; // current send page
161  uint32_t send_page_size; // send page size in channels
162  uint32_t nsends; // number of sends select has
163  PBD::ScopedConnection proc_connection; // for processor signal monitoring
164  // cue
165  bool cue; // is this a cue surface
166  uint32_t aux; // aux index for this cue surface
167  Sorted sends; // list of sends for cue aux
168  OSCCueObserver* cue_obs; // pointer to this surface's cue observer
169  uint32_t linkset; // ID of a set of surfaces used as one
170  uint32_t linkid; // ID of this surface within a linkset
171  };
172  /*
173  * feedback bits:
174  * [0] - Strips - buttons
175  * [1] - Strips - variables (pots/faders)
176  * [2] - Strips - Send SSID as path extension
177  * [3] - Send heart beat to surface
178  * [4] - Send feedback for master/global buttons/variables
179  * [5] - Send Bar and Beat
180  * [6] - Send Time code
181  * [7] - Send metering as dB or positional depending on gainmode
182  * [8] - Send metering as 16 bits (led strip)
183  * [9] - Send signal present (signal greater than -20dB)
184  * [10] - Send Playhead position as samples
185  * [11] - Send Playhead position as minutes seconds
186  * [12] - Send Playhead position like primary/secondary GUI clocks
187  * [13] - Send well known feedback (for /select/command
188  * [14] - use OSC 1.0 only (#reply -> /reply)
189  * [15] - report 8x8 trigger grid status
190  * [16] - report mixer scene status
191  *
192  * Strip_type bits:
193  * [0] - Audio Tracks
194  * [1] - Midi Tracks
195  * [2] - Audio Bus
196  * [3] - Midi Bus
197  * [4] - VCAs
198  * [5] - master
199  * [6] - Monitor
200  * [7] - Listen Bus
201  * [8] - Selected
202  * [9] - Hidden
203  * [10] - Use Groups
204  * [11] - Global Expand
205  */
206 
207 // storage for each surface's settings
209  typedef std::vector<OSCSurface> Surface;
211 
212 // linked surfaces
213  struct LinkSet {
214  public:
215  std::vector<std::string> urls; //urls of linked surfaces
216  uint32_t banksize; // linkset banksize
217  uint32_t bank; // linkset current bank
218  bool autobank; // banksize is derived from total
219  uint32_t not_ready; // number of 1st device, 0 = ready
220  Sorted custom_strips; // a sorted list of user selected strips
221  uint32_t custom_mode; // use custom strip list
222  OSCTempMode temp_mode; // use custom strip list
223  Sorted temp_strips; // temp strip list for grouponly, vcaonly, auxonly
224  std::shared_ptr<ARDOUR::Stripable> temp_master; // temp master stripable
225  std::bitset<32> strip_types; // strip_types for this linkset
226  Sorted strips; // list of valid strips in order for this set
227  };
228 
229  std::map<uint32_t, LinkSet> link_sets;
230  // list of linksets
231 
232  struct PortAdd {
233  public:
234  std::string host;
235  std::string port;
236  };
237 
238  std::vector<PortAdd> _ports;
239 
240 // GUI calls
241  std::string get_server_url ();
244  int get_portmode() { return address_only; }
245  void set_portmode (int pm) { address_only = pm; }
246  int get_banksize () { return default_banksize; }
247  void set_banksize (int bs) {default_banksize = bs; }
248  int get_gainmode() { return default_gainmode; }
249  void set_gainmode (int gm) { default_gainmode = gm; }
250  int get_defaultstrip() { return default_strip; }
251  void set_defaultstrip (int st) { default_strip = st; }
253  void set_defaultfeedback (int fb) { default_feedback = fb; }
255  void set_send_size (int ss) { default_send_size = ss; }
257  void set_plugin_size (int ps) { default_plugin_size = ps; }
258  void clear_devices ();
259  void gui_changed ();
260  void get_surfaces ();
261  std::string get_remote_port () { return remote_port; }
262  void set_remote_port (std::string pt) { remote_port = pt; }
263 
265 
266  int trigger_bank_state (lo_address addr);
267  int trigger_grid_state (lo_address addr, bool zero_it = false);
268 
269  int mixer_scene_state (lo_address addr, bool zero_it = false);
270 
271  protected:
272  void thread_init ();
274 
275  GSource* local_server;
276  GSource* remote_server;
277 
278  bool osc_input_handler (Glib::IOCondition, lo_server);
279 
280  private:
281  uint32_t _port;
282  volatile bool _ok;
283  volatile bool _shutdown;
284  lo_server _osc_server;
285  lo_server _osc_unix_server;
287  std::string _osc_url_file;
290  std::string remote_port;
292  uint32_t default_strip;
297  bool tick;
300  float scrub_speed; // Current scrub speed
301  double scrub_place; // place of play head at latest jog/scrub wheel tick
302  int64_t scrub_time; // when did the wheel move last?
304  std::shared_ptr<ARDOUR::Stripable> _select; // which stripable out of /surface/stripables is gui selected
305 
307 
309 
311 
312  // Handlers for "Application Hook" signals
314  void session_exported (std::string, std::string);
315 
316  // end "Application Hook" handles
317 
318  std::string get_unix_server_url ();
319  lo_address get_address (lo_message msg);
320  std::string get_port (std::string host);
321  OSCSurface * get_surface (lo_address addr, bool quiet = false);
322  int check_surface (lo_message msg);
323  uint32_t get_sid (std::shared_ptr<ARDOUR::Stripable> strip, lo_address addr);
324  std::shared_ptr<ARDOUR::Stripable> get_strip (uint32_t ssid, lo_address addr);
326  void strip_feedback (OSCSurface* sur, bool new_bank_size);
328  uint32_t bank_limits_check (uint32_t bank, uint32_t size, uint32_t total);
329  void bank_leds (OSCSurface* sur);
330 
331  void send_current_value (const char* path, lo_arg** argv, int argc, lo_message msg);
332  void current_value_query (const char* path, size_t len, lo_arg **argv, int argc, lo_message msg);
333 
334  int current_value (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data);
335 
336  int catchall (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg);
337  static int _catchall (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data);
338 
339  int set_automation (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
340  int touch_detect (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
341  int fake_touch (std::shared_ptr<ARDOUR::AutomationControl> ctrl);
342 
343  int spill (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
344 
345  int route_get_sends (lo_message msg);
346  int route_get_receives(lo_message msg);
347  void routes_list (lo_message msg);
348  int group_list (lo_message msg);
349  void surface_list (lo_message msg);
350  void transport_sample (lo_message msg);
351  void transport_speed (lo_message msg);
352  void record_enabled (lo_message msg);
353 
354  void add_marker_name(const std::string &markername) {
355  add_marker(markername);
356  }
357 
358  int goto_marker(const char* types, lo_arg **argv, int argc, lo_message msg);
359  int rename_marker_at_playhead(char *n, lo_message msg);
360  int rename_marker(char *on, char *nn, lo_message msg);
361 
362  // cue
363  Sorted cue_get_sorted_stripables(std::shared_ptr<ARDOUR::Stripable> aux, uint32_t id, lo_address);
364  int cue_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
365  int cue_set (uint32_t aux, lo_message msg);
366  int _cue_set (uint32_t aux, lo_address addr);
367  int cue_new_aux (std::string name, std::string dest_1, std::string dest_2, uint32_t count, lo_message msg);
368  int cue_new_send (std::string rt_name, lo_message msg);
369  int cue_connect_aux (std::string dest, lo_message msg);
370  int cue_next (lo_message msg);
371  int cue_previous (lo_message msg);
372  int cue_send_fader (uint32_t id, float position, lo_message msg);
373  int cue_send_enable (uint32_t id, float state, lo_message msg);
374  int cue_aux_fader (float position, lo_message msg);
375  int cue_aux_mute (float state, lo_message msg);
376  void cue_set_aux (uint32_t aux, lo_message msg);
377  std::shared_ptr<ARDOUR::Send> cue_get_send (uint32_t id, lo_address addr);
378  // end cue
379 
380  // link
381  LinkSet * get_linkset (uint32_t set, lo_address addr);
382  int parse_link (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
383  int link_check (uint32_t linkset);
384  int set_link (uint32_t set, uint32_t id, lo_address addr);
386  void link_strip_types (uint32_t linkset, uint32_t striptypes);
387 
388 #define OSC_DEBUG \
389  if (_debugmode == All) { \
390  debugmsg (dgettext(PACKAGE, "OSC"), path, types, argv, argc); \
391  }
392 
393 #define PATH_CALLBACK_MSG(name) \
394  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
395  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
396  } \
397  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
398  OSC_DEBUG; \
399  if (argc > 0 && !strcmp (types, "f") && argv[0]->f != 1.0) { return 0; } \
400  name (msg); \
401  return 0; \
402  }
403 
418 
419 #define PATH_CALLBACK(name) \
420  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
421  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
422  } \
423  int cb_ ## name (const char *path, const char *types, lo_arg ** argv, int argc, lo_message msg) { \
424  OSC_DEBUG; \
425  check_surface (msg); \
426  if (argc > 0 && !strcmp (types, "f") && argv[0]->f != 1.0) { return 0; } \
427  name (); \
428  return 0; \
429  }
430 
485 
486 #define PATH_CALLBACK1(name,type,optional) \
487  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
488  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
489  } \
490  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
491  OSC_DEBUG; \
492  check_surface (msg); \
493  if (argc > 0) { \
494  name (optional argv[0]->type); \
495  } \
496  return 0; \
497  }
498 
500  PATH_CALLBACK1(trigger_stop_all,i,); //0 = "stop at end of bar" 1 = "stop now"
501 
504 
508 
512 
513 #define PATH_CALLBACK1_MSG(name,arg1type) \
514  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
515  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
516  } \
517  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
518  OSC_DEBUG; \
519  if (argc > 0) { \
520  name (argv[0]->arg1type, msg); \
521  } \
522  return 0; \
523  }
524 
525 #define PATH_CALLBACK1_MSG_s(name,arg1type) \
526  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
527  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
528  } \
529  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
530  OSC_DEBUG; \
531  if (argc > 0) { \
532  name (&argv[0]->arg1type, msg); \
533  } \
534  return 0; \
535  }
536 
539 
569 
570 #define PATH_CALLBACK2(name,arg1type,arg2type) \
571  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
572  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
573  } \
574  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
575  OSC_DEBUG; \
576  check_surface (msg); \
577  if (argc > 1) { \
578  name (argv[0]->arg1type, argv[1]->arg2type); \
579  } \
580  return 0; \
581  }
582 
583 #define PATH_CALLBACK2_MSG(name,arg1type,arg2type) \
584  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
585  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
586  } \
587  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
588  OSC_DEBUG; \
589  if (argc > 1) { \
590  name (argv[0]->arg1type, argv[1]->arg2type, msg); \
591  } \
592  return 0; \
593  }
594 
595 #define PATH_CALLBACK2_MSG_s(name,arg1type,arg2type) \
596  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
597  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
598  } \
599  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
600  OSC_DEBUG; \
601  if (argc > 1) { \
602  name (argv[0]->arg1type, &argv[1]->arg2type, msg); \
603  } \
604  return 0; \
605  }
606 
607 #define PATH_CALLBACK2_MSG_s_s(name,arg1type,arg2type) \
608  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
609  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
610  } \
611  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
612  OSC_DEBUG; \
613  if (argc > 1) { \
614  name (&argv[0]->arg1type, &argv[1]->arg2type, msg); \
615  } \
616  return 0; \
617  }
618 
619 #define PATH_CALLBACK3(name,arg1type,arg2type,arg3type) \
620  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
621  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
622  } \
623  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
624  OSC_DEBUG; \
625  if (argc > 1) { \
626  name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type, msg); \
627  } \
628  return 0; \
629  }
630 
631 #define PATH_CALLBACK4(name,arg1type,arg2type,arg3type,arg4type) \
632  static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { \
633  return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, msg); \
634  } \
635  int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, lo_message msg) { \
636  OSC_DEBUG; \
637  if (argc > 1) { \
638  name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type, msg); \
639  } \
640  return 0; \
641  }
642 
650 
663 
665 
668  PATH_CALLBACK2_MSG(trigger_stop,i,i); /* second arg is 'stop now' */
669 
671 
672  int strip_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
673  int master_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
674  int monitor_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
675  int _strip_parse (const char *path, const char *sub_path, const char* types, lo_arg **argv, int argc, std::shared_ptr<ARDOUR::Stripable> s, int param_1, bool strp, lo_message msg);
676  int strip_state (const char *path, std::shared_ptr<ARDOUR::Stripable> s, int ssid, lo_message msg);
677  int strip_list (lo_message msg);
678  int _strip_select (std::shared_ptr<ARDOUR::Stripable> s, lo_address addr);
679  int _strip_select2 (std::shared_ptr<ARDOUR::Stripable> s, OSCSurface *sur, lo_address addr);
680 
681  void loop_location (int start, int end);
682 
683  int route_set_send_gain_dB (int rid, int sid, float val, lo_message msg);
684  int route_set_send_fader (int rid, int sid, float val, lo_message msg);
685  int route_set_send_enable (int rid, int sid, float val, lo_message msg);
686  int route_plugin_parameter (int rid, int piid,int par, float val, lo_message msg);
687  int route_plugin_parameter_print (int rid, int piid,int par, lo_message msg);
688  int route_plugin_activate (int rid, int piid, lo_message msg);
689  int route_plugin_deactivate (int rid, int piid, lo_message msg);
690  int route_plugin_list(int ssid, lo_message msg);
691  int route_plugin_descriptor(int ssid, int piid, lo_message msg);
692  int route_plugin_reset(int ssid, int piid, lo_message msg);
693 
694  int trigger_bang(int rid, int stop_now, lo_message msg);
695  int trigger_unbang(int rid, int stop_now, lo_message msg);
696  int trigger_stop(int rid, int row_id, lo_message msg);
697 
698  //banking functions
699  int set_bank (uint32_t bank_start, lo_message msg);
700  int _set_bank (uint32_t bank_start, lo_address addr);
701  int bank_up (lo_message msg);
702  int bank_delta (float delta, lo_message msg);
703  int use_group (float value, lo_message msg);
704  int bank_down (lo_message msg);
705  // surface set up
706  int surface_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
707  int set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gmode, uint32_t se_size, uint32_t pi_size, lo_message msg);
708  int set_surface_bank_size (uint32_t bs, lo_message msg);
709  int set_surface_strip_types (uint32_t st, lo_message msg);
710  int set_surface_feedback (uint32_t fb, lo_message msg);
711  int set_surface_gainmode (uint32_t gm, lo_message msg);
712  int set_surface_port (uint32_t po, lo_message msg);
713  int refresh_surface (lo_message msg);
714  int custom_clear (lo_message msg);
715  int custom_mode (float state, lo_message msg);
716  int _custom_mode (uint32_t state, lo_address addr);
717  int name_session (char *n, lo_message msg);
718  // select
719  int select_parse (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
720  int sel_send_pagesize (uint32_t size, lo_message msg);
721  int sel_send_page (int page, lo_message msg);
722  int sel_plug_pagesize (uint32_t size, lo_message msg);
723  int sel_plug_page (int page, lo_message msg);
724  int sel_plugin (int delta, lo_message msg);
725  int _sel_plugin (int id, lo_address addr);
726  int sel_plugin_activate (float state, lo_message msg);
727  int select_plugin_parameter (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
728  void processor_changed (std::string remote_url);
729 
730  int scrub (float delta, lo_message msg);
731  int jog (float delta, lo_message msg);
732  int jog_mode (float mode, lo_message msg);
733  int click_level (float position);
734  int sel_previous (lo_message msg);
735  int sel_next (lo_message msg);
736  int sel_delta (int delta, lo_message msg);
737  std::shared_ptr<ARDOUR::Send> get_send (std::shared_ptr<ARDOUR::Stripable> st, lo_address addr);
738  int sel_sendgain (int id, float dB, lo_message msg);
739  int sel_sendfader (int id, float pos, lo_message msg);
740  int sel_sendenable (int id, float pos, lo_message msg);
741  int sel_master_send_enable (int state, lo_message msg);
742  int sel_expand (uint32_t state, lo_message msg);
743  int sel_pan_elevation (float val, lo_message msg);
744  int sel_pan_frontback (float val, lo_message msg);
745  int sel_pan_lfe (float val, lo_message msg);
746  int sel_comp_enable (float val, lo_message msg);
747  int sel_comp_threshold (float val, lo_message msg);
748  int sel_comp_mode (float val, lo_message msg);
749  int sel_comp_makeup (float val, lo_message msg);
750  int sel_eq_enable (float val, lo_message msg);
751  int sel_eq_hpf_freq (float val, lo_message msg);
752  int sel_eq_hpf_enable (float val, lo_message msg);
753  int sel_eq_hpf_slope (float val, lo_message msg);
754  int sel_eq_lpf_freq (float val, lo_message msg);
755  int sel_eq_lpf_enable (float val, lo_message msg);
756  int sel_eq_lpf_slope (float val, lo_message msg);
757  int sel_eq_gain (int id, float val, lo_message msg);
758  int sel_eq_freq (int id, float val, lo_message msg);
759  int sel_eq_q (int id, float val, lo_message msg);
760  int sel_eq_shape (int id, float val, lo_message msg);
761  int sel_new_personal_send (char *n, lo_message msg);
762  int set_temp_mode (lo_address addr);
763  int parse_sel_group (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
764  std::shared_ptr<ARDOUR::VCA> get_vca_by_name (std::string vname);
765 
766  void listen_to_route (std::shared_ptr<ARDOUR::Stripable>, lo_address);
767 
768  void route_name_changed (const PBD::PropertyChange&, std::weak_ptr<ARDOUR::Route> r, lo_address addr);
769  void recalcbanks ();
770  void _recalcbanks ();
773 
774  int osc_tbank_step_routes (int step, lo_message msg);
775  int osc_tbank_step_rows (int step, lo_message msg);
776 
778  int osc_toggle_roll (bool ret2strt);
779  bool periodic (void);
780  sigc::connection periodic_connection;
782 
783  void debugmsg (const char *prefix, const char *path, const char* types, lo_arg **argv, int argc);
784 
785  mutable void *gui;
786  void build_gui ();
787 };
788 
789 } // namespace
790 
791 #endif // ardour_osc_h
virtual std::string name() const
bool periodic(void)
int custom_mode(float state, lo_message msg)
int route_plugin_descriptor(int ssid, int piid, lo_message msg)
int spill(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
uint32_t bank_limits_check(uint32_t bank, uint32_t size, uint32_t total)
void transport_sample(lo_message msg)
int sel_sendenable(int id, float pos, lo_message msg)
int jog_mode(float mode, lo_message msg)
int current_value(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data)
int monitor_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
bool address_only
Definition: osc.h:289
double scrub_place
Definition: osc.h:301
int name_session(char *n, lo_message msg)
void notify_routes_added(ARDOUR::RouteList &)
void notify_vca_added(ARDOUR::VCAList &)
int mixer_scene_state(lo_address addr, bool zero_it=false)
int sel_previous(lo_message msg)
int cue_new_send(std::string rt_name, lo_message msg)
void set_send_size(int ss)
Definition: osc.h:255
int sel_comp_makeup(float val, lo_message msg)
void processor_changed(std::string remote_url)
std::string _osc_unix_socket_path
Definition: osc.h:286
int use_group(float value, lo_message msg)
GSource * remote_server
Definition: osc.h:276
int set_automation(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
std::shared_ptr< ARDOUR::Stripable > get_strip(uint32_t ssid, lo_address addr)
void surface_link_state(LinkSet *set)
OSCDebugMode get_debug_mode()
Definition: osc.h:243
bool bank_dirty
Definition: osc.h:298
int click_level(float position)
int set_surface(uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gmode, uint32_t se_size, uint32_t pi_size, lo_message msg)
FakeTouchMap _touch_timeout
Definition: osc.h:124
int cue_new_aux(std::string name, std::string dest_1, std::string dest_2, uint32_t count, lo_message msg)
int _custom_mode(uint32_t state, lo_address addr)
int goto_marker(const char *types, lo_arg **argv, int argc, lo_message msg)
int route_plugin_deactivate(int rid, int piid, lo_message msg)
int sel_next(lo_message msg)
int int_message_with_id(std::string, uint32_t ssid, int value, bool in_line, lo_address addr)
int _strip_parse(const char *path, const char *sub_path, const char *types, lo_arg **argv, int argc, std::shared_ptr< ARDOUR::Stripable > s, int param_1, bool strp, lo_message msg)
void do_request(OSCUIRequest *)
int send_group_list(lo_address addr)
Sorted get_sorted_stripables(std::bitset< 32 > types, bool cue, uint32_t custom, Sorted my_list)
int cue_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
std::vector< std::shared_ptr< ARDOUR::Stripable > > Sorted
Definition: osc.h:121
Surface _surface
Definition: osc.h:210
void set_gainmode(int gm)
Definition: osc.h:249
int set_surface_gainmode(uint32_t gm, lo_message msg)
std::vector< PortAdd > _ports
Definition: osc.h:238
int fake_touch(std::shared_ptr< ARDOUR::AutomationControl > ctrl)
std::shared_ptr< ARDOUR::Stripable > _select
Definition: osc.h:304
int set_surface_strip_types(uint32_t st, lo_message msg)
int sel_comp_mode(float val, lo_message msg)
int set_link(uint32_t set, uint32_t id, lo_address addr)
int trigger_grid_state(lo_address addr, bool zero_it=false)
int sel_master_send_enable(int state, lo_message msg)
int route_set_send_enable(int rid, int sid, float val, lo_message msg)
int sel_expand(uint32_t state, lo_message msg)
int sel_send_pagesize(uint32_t size, lo_message msg)
std::string remote_port
Definition: osc.h:290
void route_name_changed(const PBD::PropertyChange &, std::weak_ptr< ARDOUR::Route > r, lo_address addr)
int sel_eq_lpf_enable(float val, lo_message msg)
int strip_state(const char *path, std::shared_ptr< ARDOUR::Stripable > s, int ssid, lo_message msg)
int sel_eq_gain(int id, float val, lo_message msg)
int route_set_send_fader(int rid, int sid, float val, lo_message msg)
int strip_list(lo_message msg)
int route_plugin_parameter(int rid, int piid, int par, float val, lo_message msg)
int _strip_select2(std::shared_ptr< ARDOUR::Stripable > s, OSCSurface *sur, lo_address addr)
int cue_aux_mute(float state, lo_message msg)
int sel_comp_threshold(float val, lo_message msg)
int parse_sel_group(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
std::string get_remote_port()
Definition: osc.h:261
int text_message_with_id(std::string path, uint32_t ssid, std::string val, bool in_line, lo_address addr)
void current_value_query(const char *path, size_t len, lo_arg **argv, int argc, lo_message msg)
int int_message(std::string, int value, lo_address addr)
GSource * local_server
Definition: osc.h:275
std::map< uint32_t, LinkSet > link_sets
Definition: osc.h:229
void set_remote_port(std::string pt)
Definition: osc.h:262
int sel_plug_page(int page, lo_message msg)
Sorted cue_get_sorted_stripables(std::shared_ptr< ARDOUR::Stripable > aux, uint32_t id, lo_address)
int get_defaultfeedback()
Definition: osc.h:252
std::map< std::shared_ptr< ARDOUR::AutomationControl >, uint32_t > FakeTouchMap
Definition: osc.h:123
void surface_destroy(OSCSurface *sur)
void add_marker_name(const std::string &markername)
Definition: osc.h:354
void loop_location(int start, int end)
int custom_clear(lo_message msg)
int route_plugin_parameter_print(int rid, int piid, int par, lo_message msg)
int trigger_stop(int rid, int row_id, lo_message msg)
void cue_set_aux(uint32_t aux, lo_message msg)
int catchall(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
std::string get_unix_server_url()
int float_message(std::string, float value, lo_address addr)
uint32_t _port
Definition: osc.h:281
lo_server _osc_unix_server
Definition: osc.h:285
int sel_send_page(int page, lo_message msg)
int sel_eq_lpf_slope(float val, lo_message msg)
int sel_eq_hpf_slope(float val, lo_message msg)
int check_surface(lo_message msg)
std::string get_port(std::string host)
int sel_plugin_activate(float state, lo_message msg)
int sel_pan_frontback(float val, lo_message msg)
void link_strip_types(uint32_t linkset, uint32_t striptypes)
PBD::ScopedConnectionList session_connections
Definition: osc.h:781
int set_temp_mode(lo_address addr)
void session_exported(std::string, std::string)
int sel_plugin(int delta, lo_message msg)
int get_portmode()
Definition: osc.h:244
void set_defaultstrip(int st)
Definition: osc.h:251
void route_added(ARDOUR::RouteList &)
void stripable_selection_changed()
Definition: osc.h:85
int sel_eq_enable(float val, lo_message msg)
bool observer_busy
Definition: osc.h:299
int64_t scrub_time
Definition: osc.h:302
uint32_t default_strip
Definition: osc.h:292
int cue_set(uint32_t aux, lo_message msg)
OSC(ARDOUR::Session &, uint32_t port)
int sel_plug_pagesize(uint32_t size, lo_message msg)
void set_debug_mode(OSCDebugMode m)
Definition: osc.h:242
int master_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
int trigger_unbang(int rid, int stop_now, lo_message msg)
ARDOUR::ZeroConf * _zeroconf
Definition: osc.h:306
std::string get_server_url()
int sel_sendfader(int id, float pos, lo_message msg)
lo_address get_address(lo_message msg)
volatile bool _ok
Definition: osc.h:282
void build_gui()
Definition: osc_gui.h:156
int bank_down(lo_message msg)
sigc::connection periodic_connection
Definition: osc.h:780
int route_plugin_activate(int rid, int piid, lo_message msg)
int link_check(uint32_t linkset)
int sel_delta(int delta, lo_message msg)
void transport_speed(lo_message msg)
OSCSurface * get_surface(lo_address addr, bool quiet=false)
OSCDebugMode _debugmode
Definition: osc.h:288
uint32_t default_gainmode
Definition: osc.h:294
int set_bank(uint32_t bank_start, lo_message msg)
void set_plugin_size(int ps)
Definition: osc.h:257
uint32_t get_sid(std::shared_ptr< ARDOUR::Stripable > strip, lo_address addr)
int route_plugin_list(int ssid, lo_message msg)
int sel_eq_shape(int id, float val, lo_message msg)
LinkSet * get_linkset(uint32_t set, lo_address addr)
void send_current_value(const char *path, lo_arg **argv, int argc, lo_message msg)
int select_plugin_parameter(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
void routes_list(lo_message msg)
void tear_down_gui()
Definition: osc_gui.h:142
void * get_gui() const
Definition: osc_gui.h:132
int set_surface_feedback(uint32_t fb, lo_message msg)
std::vector< OSCSurface > Surface
Definition: osc.h:209
lo_server _osc_server
Definition: osc.h:284
void session_loaded(ARDOUR::Session &)
int cue_next(lo_message msg)
int cue_connect_aux(std::string dest, lo_message msg)
volatile bool _shutdown
Definition: osc.h:283
int route_get_sends(lo_message msg)
int scrub(float delta, lo_message msg)
int sel_new_personal_send(char *n, lo_message msg)
uint32_t default_banksize
Definition: osc.h:291
int cue_send_enable(uint32_t id, float state, lo_message msg)
int strip_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
int sel_eq_freq(int id, float val, lo_message msg)
int set_surface_port(uint32_t po, lo_message msg)
int trigger_bang(int rid, int stop_now, lo_message msg)
int _cue_set(uint32_t aux, lo_address addr)
int group_list(lo_message msg)
int set_state(const XMLNode &, int version)
int sel_eq_hpf_enable(float val, lo_message msg)
int refresh_surface(lo_message msg)
int route_set_send_gain_dB(int rid, int sid, float val, lo_message msg)
int cue_aux_fader(float position, lo_message msg)
std::string _osc_url_file
Definition: osc.h:287
int get_gainmode()
Definition: osc.h:248
int sel_eq_hpf_freq(float val, lo_message msg)
int sel_pan_elevation(float val, lo_message msg)
int _strip_select(std::shared_ptr< ARDOUR::Stripable > s, lo_address addr)
int parse_link(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
int float_message_with_id(std::string, uint32_t ssid, float value, bool in_line, lo_address addr)
int touch_detect(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
int route_plugin_reset(int ssid, int piid, lo_message msg)
void surface_list(lo_message msg)
int trigger_bank_state(lo_address addr)
bool get_active() const
int surface_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
static int _catchall(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data)
int text_message(std::string path, std::string val, lo_address addr)
float scrub_speed
Definition: osc.h:300
bool global_init
Definition: osc.h:303
void debugmsg(const char *prefix, const char *path, const char *types, lo_arg **argv, int argc)
int sel_sendgain(int id, float dB, lo_message msg)
PBD::Mutex surfaces_lock
Definition: osc.h:208
void set_defaultfeedback(int fb)
Definition: osc.h:253
PBD::Mutex _lo_lock
Definition: osc.h:95
void record_enabled(lo_message msg)
int cue_send_fader(uint32_t id, float position, lo_message msg)
void set_banksize(int bs)
Definition: osc.h:247
int get_send_size()
Definition: osc.h:254
uint32_t default_plugin_size
Definition: osc.h:296
int route_get_receives(lo_message msg)
int jog(float delta, lo_message msg)
int _sel_plugin(int id, lo_address addr)
std::shared_ptr< ARDOUR::VCA > get_vca_by_name(std::string vname)
int get_defaultstrip()
Definition: osc.h:250
int osc_tbank_step_rows(int step, lo_message msg)
CONTROL_PROTOCOL_THREADS_NEED_TEMPO_MAP_DECL()
std::shared_ptr< ARDOUR::Send > get_send(std::shared_ptr< ARDOUR::Stripable > st, lo_address addr)
int sel_eq_q(int id, float val, lo_message msg)
void listen_to_route(std::shared_ptr< ARDOUR::Stripable >, lo_address)
int get_banksize()
Definition: osc.h:246
void global_feedback(OSCSurface *sur)
uint32_t default_send_size
Definition: osc.h:295
int rename_marker_at_playhead(char *n, lo_message msg)
bool has_editor() const
Definition: osc.h:87
bool osc_input_handler(Glib::IOCondition, lo_server)
int sel_pan_lfe(float val, lo_message msg)
int cue_previous(lo_message msg)
void bank_leds(OSCSurface *sur)
void * gui
Definition: osc.h:785
void set_portmode(int pm)
Definition: osc.h:245
int bank_delta(float delta, lo_message msg)
int sel_eq_lpf_freq(float val, lo_message msg)
int _set_bank(uint32_t bank_start, lo_address addr)
int osc_toggle_roll(bool ret2strt)
int rename_marker(char *on, char *nn, lo_message msg)
int get_plugin_size()
Definition: osc.h:256
int set_active(bool yn)
int bank_up(lo_message msg)
int sel_comp_enable(float val, lo_message msg)
int select_parse(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg)
uint32_t default_feedback
Definition: osc.h:293
int set_surface_bank_size(uint32_t bs, lo_message msg)
std::shared_ptr< ARDOUR::Send > cue_get_send(uint32_t id, lo_address addr)
XMLNode & get_state() const
void strip_feedback(OSCSurface *sur, bool new_bank_size)
int osc_tbank_step_routes(int step, lo_message msg)
void ffwd()
void temporal_zoom_in()
void fit_16_tracks()
void mark_out()
void save_state()
void apply_mixer_scene(int scn)
void transport_stop()
void add_marker(const std::string &=std::string(), ARDOUR::Location::Flags flags=ARDOUR::Location::IsMark)
void locate(ARDOUR::samplepos_t sample, ARDOUR::LocateTransportDisposition ltd)
void remove_marker_at_playhead()
void midi_panic()
void trigger_cue_row(int cue)
void goto_end()
void rec_enable_toggle()
void scroll_up_1_page()
void store_mixer_scene(int scn)
void quick_snapshot_stay()
void scroll_up_1_track()
void fit_2_tracks()
void redo()
void all_tracks_rec_in()
void next_marker()
void scroll_dn_1_page()
void loop_toggle()
void set_punch_range()
void access_action(std::string action_path)
void goto_start(bool and_roll=false)
void prev_marker()
void zoom_1_sec()
void scroll_dn_1_track()
void toggle_punch_out()
void fit_1_track()
void tbank_set_size(int route_width, int row_height)
void trigger_stop_all(bool stop_now=false)
void zoom_100_ms()
void zoom_5_min()
void stop_forget()
void zoom_to_session()
void undo()
void fit_4_tracks()
void zoom_10_min()
void toggle_click()
void quick_snapshot_switch()
void zoom_1_min()
void toggle_all_rec_enables()
void jump_by_bars(int bars, ARDOUR::LocateTransportDisposition ltd=ARDOUR::RollIfAppropriate)
void rewind()
ARDOUR::samplepos_t transport_sample()
void zoom_10_sec()
void fit_32_tracks()
void jump_by_seconds(double sec, ARDOUR::LocateTransportDisposition ltd=ARDOUR::RollIfAppropriate)
void set_loop_range()
void set_transport_speed(double speed)
void mark_in()
void transport_play(bool jump_back=false)
void toggle_monitor_mono()
void temporal_zoom_out()
void fit_8_tracks()
void toggle_punch_in()
void fit_all_tracks()
void all_tracks_rec_out()
void toggle_monitor_dim()
void set_session_range()
void toggle_monitor_mute()
std::list< ScopedConnectionList * >::size_type size() const
Definition: signals.h:294
Definition: xml++.h:114
std::list< std::shared_ptr< VCA > > VCAList
std::list< std::shared_ptr< Route > > RouteList
#define PATH_CALLBACK1(name, type, optional)
Definition: osc.h:486
#define PATH_CALLBACK3(name, arg1type, arg2type, arg3type)
Definition: osc.h:619
#define PATH_CALLBACK_MSG(name)
Definition: osc.h:393
#define PATH_CALLBACK(name)
Definition: osc.h:419
#define PATH_CALLBACK2_MSG(name, arg1type, arg2type)
Definition: osc.h:583
#define PATH_CALLBACK2_MSG_s_s(name, arg1type, arg2type)
Definition: osc.h:607
#define PATH_CALLBACK1_MSG_s(name, arg1type)
Definition: osc.h:525
#define PATH_CALLBACK2(name, arg1type, arg2type)
Definition: osc.h:570
#define PATH_CALLBACK4(name, arg1type, arg2type, arg3type, arg4type)
Definition: osc.h:631
#define PATH_CALLBACK1_MSG(name, arg1type)
Definition: osc.h:513
OSCTempMode temp_mode
Definition: osc.h:222
std::bitset< 32 > strip_types
Definition: osc.h:225
std::vector< std::string > urls
Definition: osc.h:215
std::shared_ptr< ARDOUR::Stripable > temp_master
Definition: osc.h:224
OSCSelectObserver * sel_obs
Definition: osc.h:150
std::shared_ptr< ARDOUR::Stripable > select
Definition: osc.h:154
std::vector< int > plug_params
Definition: osc.h:158
OSCCueObserver * cue_obs
Definition: osc.h:168
std::bitset< 32 > feedback
Definition: osc.h:135
OSCGlobalObserver * global_obs
Definition: osc.h:133
std::vector< int > plugins
Definition: osc.h:159
PBD::Controllable::GroupControlDisposition usegroup
Definition: osc.h:137
PBD::ScopedConnection proc_connection
Definition: osc.h:163
std::vector< OSCRouteObserver * > observers
Definition: osc.h:147
std::bitset< 32 > strip_types
Definition: osc.h:148
std::shared_ptr< ARDOUR::Stripable > expand_strip
Definition: osc.h:153
std::string remote_url
Definition: osc.h:130
std::shared_ptr< ARDOUR::Stripable > temp_master
Definition: osc.h:142
std::string port
Definition: osc.h:235
std::string host
Definition: osc.h:234