]> Shamusworld >> Repos - ardour-manual/blob - include/osc58-controlling-ardour-with-osc.html
bc3d330e7f7a62faa36e6f9a2c33a75c874502f5
[ardour-manual] / include / osc58-controlling-ardour-with-osc.html
1
2 <p>
3   <abbr title="Open Sound Control"><dfn>OSC</dfn></abbr> lets synthesizers
4   and other devices communicate with Ardour. OSC devices can send commands
5   relating to playback (such as play or stop), performance (such as volume,
6   play, stop, and almost any other function (such as Edit, or Undo).
7 </p>
8
9 <p class="note">
10   <em>Note:</em> OSC control has changed dramatically since Ardour 4.7.
11   The Path structure has been completely redone, Banking has been introduced,
12   The controller is now able to tell Ardour what kind of feedback it can
13   work with (including bank size) and two new math styles have been added
14   to gain controls. If you are using an Ardour version of 4.7 or less,
15   please read <a
16   href="@@osc-control-for-ardour-4.7-and-prior">
17   Osc control in ardour 4.7 and prior.</a>
18 </p>
19
20 <p>
21   Ardour is probably one of the most OSC-controllable audio applications
22   around, but as with all OSC-controllable apps, you can't do much without
23   knowing what <dfn>messages</dfn> can be sent. This document describes the
24   various categories of messages that Ardour understands. It is subject to
25   change, particularly the "Actions" part below, since this relates to the
26   GTK GUI for Ardour rather than the backend.
27 </p>
28
29 <h2>Connecting to Ardour via OSC</h2>
30 <p>
31   OSC support is not enabled by default, but can be turned on via
32   <kbd class="menu">Edit &gt; Preferences &gt; Control Surfaces</kbd>.
33   Once enabled, Ardour will listen on port <code>3819</code> by default.
34   This port number can be changed by editing <code>$ARDOUR_CONFIG</code>
35   and adding this line within the <code>&lt;Config&gt;</code> section:
36 </p>
37 <kbd class="input">&lt;Option name="osc-port" value="<em>Your choice
38 here</em>"/&gt;</kbd>
39
40 <p>
41   Ardour sends any feedback to the port and address that sent any
42   feedback request. The port does not have to match Ardour's port. In
43   fact it is better not to. This means that Ardour can deal with more
44   than one controller at a time. The two controllers can bank
45   independently and even use different math for faders. This could be
46   used to allow talent to adjust their own monitor mix using a tablet
47   or phone that can run an OSC controller. For a full explanation of
48   how Ardour's feedback works please read <a
49   href="@@osc58-feedback">
50   OSC feedback In Ardour.</a>
51 </p>
52
53 <h2>Control Surface Set Up</h2>
54
55 <p>
56   Control surface set up allows the controller to tell Ardour about it's
57   capabilities. The surface can tell Ardour how many control strips it
58   has for banking, if it is capable of setting it's faders or buttons
59   to values set by Ardour's GUI or automation, What kind of math the
60   faders use and more.
61 </p>
62 <p>
63   Any time the <em>/set_surface</em> command is sent, the current bank
64   is recalculated and if feedback is turned on, the values of each
65   strip's controls are sent (or refreshed) as well. This will also
66   refresh the Master feedback setup.
67 </p>
68 <p class="note">
69   Surface Port Setting is available in the OSC GUI.
70 </p>
71 <p>
72   As of Ardour 5.1, There is now a GUI setup in response to those using
73   tablets with applications such as touchOSC or AndrOSC who need to be
74   able to set a port for Ardour to send to. It can also change the
75   default setting for set_surface. For more information about Ardour's
76   OSC configuration GUI please read <a
77   href="@@osc58-using-the-setup-dialog">
78   Ardour's Setup Dialog.</a>
79 </p>
80 <p>If /set_surface is not sent, the default values are used:
81   <ul>
82           <li><em>Bank Size</em>: 0&mdash; No banking (or infinite bank size).</li>
83           <li><em>Strip Types</em>: 0&mdash; All strip types except hidden and special.</li>
84           <li><em>Feedback</em>: 0&mdash; All off.</li>
85           <li><em>Fader Mode</em>: 0&mdash; gain in dB (not relevant with feedback off)</li>
86           <li><em>Send Page Size</em>: 0&mdash; No Send Paging.</li>
87           <li><em>Plugin Page Size</em>: 0&mdash; No Plugin Paging.</li>
88   </ul>
89 </p>
90 <p>
91   These values give the same behaviour as prior versions of Ardour. (or the closest possible)
92 </p>
93 <table class="dl">
94   <tr><th><kbd class="osc">/set_surface <em>bank_size</em> <em>strip_types</em>
95   <em>feedback</em> <em>fadermode</em> <em>send_page_size</em> <em>plugin_page_size</em></kbd></th>
96   <td>
97           See below for an explanation of each parameter.
98   </td></tr>
99 </table>
100 <p class="note">
101         The /set_surface message may have all values except the last in-line.
102         For example: <code>/set_surface/8/31/8403/0/8 i 16</code> would be valid.
103         Do be careful of switches which send a 0 on release, it may be necessary
104         to set the value as the release value rather than the press value.
105 </p>
106 <p class="note">
107         The /set_surface message may have less than the full set of parameters.
108         those left out will remain as they were before the /set_surface message was
109         sent. All parameters included must be valid. For example, setting send page
110         size would require also setting bank_size, strip_types, feedback and gain mode.
111         using only two parameters will set bank_size and strip_types. Sending /set_surface with
112         no parameters will result in Ardour returning a /set_surface message with the
113         current settings. Surfaces using /set_surface iiii b st fb gm as was the case
114         in versions of Ardour older than 5.10 will continue to work.
115 </p>
116 <h3>bank_size</h3>
117 <p>
118   Bank Size is the number of channel strips the controller supports
119   without banking. Setting this to 0 turns banking off by setting the
120   bank size to infinite.
121 </p>
122 <p class="note">
123         Bank size can also be set with <em>/set_surface/bank_size size.</em>
124 </p>
125 <h3>strip_types</h3>
126 <p>
127   strip_types is an integer made up of bits. The easy way to
128   deal with this is to think of strip_types items being worth a number and
129   then adding all those numbers together for a value to send.
130   Strip Types will determine what kind of strips will be included in
131   bank. This would include: Audio, MIDI, busses, VCAs, Master, Monitor
132   and hidden or selected strips.
133 </p>
134 <p>
135   Aside from setting the track types for the main mix assignments, using
136   /set_surface/strip_types with more than one surface button will allow
137   switching between modes for example: inputs only, busses only,
138   selected only, hidden only, by having the buttons send values of: 3,
139   12, 256, 512. A full mix button might have a value 31.
140 </p>
141 <p>
142   While Master and Monitor are listed as possibilities, most surfaces
143   will not use them. Using /master and /monitor makes more sense.
144   However, in the case where there are no master or monitor fader strips
145   on the surface, it may be necessary to include them in the banked
146   strips.
147 </p>
148 <p>Please see: <a
149   href="@@osc58-feedback-and-strip-types-values">
150   Calculating Feedback and Strip-types Values.</a>
151 </p>
152 <p class="note">
153         Strip types can also be set with <em>/set_surface/strip_types types.</em>
154 </p>
155 <h3>feedback</h3>
156 <p>Feedback is an integer made up of bits. The easy way to
157   deal with this is to think of feedback items being worth a number and
158   then adding all those numbers together for a value to send.
159 </p>
160 <p>Please see: <a
161   href="@@osc58-feedback-and-strip-types-values">
162   Calculating Feedback and Strip-types Values.</a></p>
163 <p class="note">
164         Feedback can also be set with <em>/set_surface/feedback feedback.</em>
165 </p>
166
167 <h3>gainmode</h3>
168 <p>
169   Gainmode is a an int that acts as a bool:
170   <ul>
171           <li><em>0 (or false)</em> dB value as a float from -193 to +6. Sent as
172           /strip/gain SSID value. (-193 or below are the same as -inf)</li>
173           <li><em>1 (or true)</em> A positional fader based on the same math
174           as Ardour's GUI.  An Float from 0 to 1. Sent as
175           /strip/fader SSID value</li>
176   </ul>
177 </p>
178 <p>
179   Gainmode applies only to feedback values. The controller can choose
180   which gain math to use by choosing to use the /*/gain or /*/fader path
181   to send to Ardour. This makes sure a controller that doesn't set up
182   Ardour's OSC can still use either math. The gainmode for feedback also
183   determines the path Ardour uses for feedback so that the feedback
184   messages match the control messages.
185 </p>
186 <p class="note">
187         Gain mode can also be set with <em>/set_surface/gainmode gainmode.</em>
188 </p>
189 <h3>send_page_size</h3>
190 <p>
191         Send_page_size is an int for the number of send channels that can be controlled
192         at one time. Each channel has a name, level and enable control. (added in Ardour 5.10)
193 </p>
194 <p class="note">
195         Send page size can also be set with <em>/set_surface/send_page_size send_page_size.</em>
196 </p>
197 <h3>plugin_page_size</h3>
198 <p>
199         plugin_page_size is an int for the number of plugin controls that can be controlled
200         at one time. Each control has a name and level. As each plugin is different (as is each
201         parameter), the surface should expect to control the plugin parameters with a variable
202         control (pot or slider) with a float value from 0 to 1 (even on/off switches). (added in
203         Ardour 5.10)
204 </p>
205 <p class="note">
206         Plugin page size can also be set with <em>/set_surface/plugin_page_size plugin_page_size.</em>
207 </p>
208
209 <h2>Querying Ardour for information</h2>
210 <p>
211   The control Surface may wish to control the type a frequency of
212   updates it receives. It can do this with querying commands. See: <a
213   href="@@osc58-querying-ardour">
214   Querying Ardour with OSC.</a>
215 </p>
216
217 <h2>List of OSC messages</h2>
218 <p class="note">
219         Parameter types show how the value will be used. However, they may
220         be sent as a different type if needed, see: <a
221         href="@@osc58-parameter-types">
222         Parameter Types in OSC.</a>
223 </p>
224 <h3>Master or Global messages</h3>
225
226 <h4>Transport Control</h4>
227 <table class="dl">
228   <tr><th><kbd class="osc">/transport_stop</kbd></th>
229   <td>Stops a rolling transport</td></tr>
230   <tr><th><kbd class="osc">/transport_play</kbd></th>
231   <td>Puts transport in play mode</td></tr>
232   <tr><th><kbd class="osc">/toggle_roll</kbd></th>
233   <td>Toggles between play and stop</td></tr>
234   <tr><th><kbd class="osc">/stop_forget</kbd></th>
235   <td>Stop transport and delete/forget last take</td></tr>
236   <tr><th><kbd class="osc">/set_transport_speed <em>speed</em></kbd></th>
237   <td>where <em>speed</em> is a float ranging from -8.0f to 8.0f</td></tr>
238   <tr><th><kbd class="osc">/ffwd</kbd></th>
239   <td>Adds 1.5 times to transport speed to maximum +8 times normal speed</td></tr>
240   <tr><th><kbd class="osc">/rewind</kbd></th>
241   <td>Adds -1.5 times to transport speed to maximum -8 times normal speed</td></tr>
242   <tr><th><kbd class="osc">/goto_start</kbd></th>
243   <td>Move playhead to start of session</td></tr>
244   <tr><th><kbd class="osc">/goto_end</kbd></th>
245   <td>Move playhead to end of session</td></tr>
246   <tr><th><kbd class="osc">/jump_bars <em>bars</em></kbd></th>
247   <td>Where <em>bars</em> is a float (+/-) of the number of bars to jump</td></tr>
248   <tr><th><kbd class="osc">/jump_seconds <em>seconds</em></kbd></th>
249   <td>Where <em>seconds</em> is a float (+/-) of the number of seconds to jump</td></tr>
250   <tr><th><kbd class="osc">/toggle_click</kbd></th>
251   <td>Toggle metronome click on and off</td></tr>
252   <tr><th><kbd class="osc">/add_marker</kbd></th>
253   <td>(adds marker to the current transport position)</td></tr>
254   <tr><th><kbd class="osc">/remove_marker</kbd></th>
255   <td>Removes marker at the current transport position (if there is one)</td></tr>
256   <tr><th><kbd class="osc">/next_marker</kbd></th>
257   <td>Move playhead to next marker</td></tr>
258   <tr><th><kbd class="osc">/prev_marker</kbd></th>
259   <td>Move playhead to previous marker</td></tr>
260   <tr><th><kbd class="osc">/locate <em>spos</em> <em>roll</em></kbd></th>
261   <td>where <em>spos</em> is the target position in samples and
262   <em>roll</em> is a bool/integer defining whether you want transport
263   to be kept rolling or not</td></tr>
264   <tr><th><kbd class="osc">/loop_toggle</kbd></th>
265   <td>Toggle loop mode on and off</td></tr>
266   <tr><th><kbd class="osc">/loop_location <em>start</em> <em>end</em></kbd></th>
267   <td><em>start</em> is the beginning of a loop and <em>end</em> is the
268   end of a loop both are integer frame positions.</td></tr>
269   <tr><th><kbd class="osc">/midi_panic</kbd></th>
270   <td>Ardour will send an all notes off to all midi tracks</td></tr>
271   <tr><th><kbd class="osc">/cancel_all_solos</kbd></th>
272   <td>Cancel All Solos/PFLs/AFLs</td></tr>
273 </table>
274 <p>
275   New for Ardour 5.9.
276 </p>
277 <table class="dl">
278   <tr><th><kbd class="osc">/scrub <em>delta</em></kbd></th>
279   <td>Where <em>delta</em> is a float indicating forward or reverse movement.
280   See <a href="@@osc58-jog-modes#scrub">OSC Scrub Modes</a></td></tr> <!--#scrub-->
281   <tr><th><kbd class="osc">/jog <em>delta</em></kbd></th>
282   <td>Where <em>delta</em> is a float indicating forward or reverse movement</td></tr>
283   <tr><th><kbd class="osc">/jog/mode <em>mode</em></kbd></th>
284   <td>Where <em>mode</em> is an int from 0 to 7 indicating what the <em>/jog</em>
285   command controls. See <a href="@@osc58-jog-modes">
286   OSC Jog Modes</a></td></tr>
287 </table>
288
289 <h4>Recording control</h4>
290 <table class="dl">
291   <tr><th><kbd class="osc">/toggle_punch_in</kbd></th>
292   <td></td></tr>
293   <tr><th><kbd class="osc">/toggle_punch_out</kbd></th>
294   <td></td></tr>
295   <tr><th><kbd class="osc">/rec_enable_toggle</kbd></th>
296   <td>Toggles master record enable</td></tr>
297 </table>
298
299 <h4>Transport Information</h4>
300 <table class="dl">
301   <tr><th><kbd class="osc">/transport_frame</kbd></th>
302   <td>Ardour sends /transport_frame <em>current_frame</em></td></tr>
303   <tr><th><kbd class="osc">/transport_speed</kbd></th>
304   <td>Ardour sends /transport_speed <em>speed</em></td></tr>
305   <tr><th><kbd class="osc">/record_enabled</kbd></th>
306   <td>Ardour sends /record_enabled <em>recordenable_status</em></td></tr>
307 </table>
308
309 <h4>Editing-related</h4>
310 <table class="dl">
311   <tr><th><kbd class="osc">/undo</kbd></th>
312   <td></td></tr>
313   <tr><th><kbd class="osc">/redo</kbd></th>
314   <td></td></tr>
315   <tr><th><kbd class="osc">/save_state</kbd></th>
316   <td>(this is the regular <kbd class="menu">Session &gt; Save</kbd>
317   operation)</td></tr>
318 </table>
319
320 <h4>Master and Monitor strip control</h4>
321 <table class="dl">
322   <tr><th><kbd class="osc">/master/gain <em>dB</em></kbd></th>
323   <td>dB is a float indicating the desired gain in dB</td></tr>
324   <tr><th><kbd class="osc">/master/fader  <em>position</em></kbd></th>
325   <td>position is a float between 0 and 1 setting the desired position of the fader</td></tr>
326   <tr><th><kbd class="osc">/master/db_delta <em>delta</em></kbd></th>
327   <td>where <em>delta</em> is a float that will increase or decrease the gain of master by the amount of the delta. (Ardour 5.11+)</td></tr>
328   <tr><th><kbd class="osc">/master/trimdB <em>dB</em></kbd></th>
329   <td>dB is a float from -20 to +20 representing the desired trim gain in dB</td></tr>
330   <tr><th><kbd class="osc">/master/pan_stereo_position <em>position</em></kbd></th>
331   <td>position is a float from 0 to 1 representing the desired pan position</td></tr>
332   <tr><th><kbd class="osc">/master/mute  <em>key</em></kbd></th>
333   <td>key is an optional float 1 representing a master bus select</td></tr>
334   <tr><th><kbd class="osc">/master/select  <em>state</em></kbd></th>
335   <td>state is an int of o or 1 representing the desired mute state</td></tr>
336   <tr><th><kbd class="osc">/monitor/gain <em>dB</em></kbd></th>
337   <td>dB is a float indicating the desired gain in dB</td></tr>
338   <tr><th><kbd class="osc">/monitor/fader  <em>position</em></kbd></th>
339   <td>position is a float between 0 and 1 setting the desired position of the fader</td></tr>
340   <tr><th><kbd class="osc">/monitor/db_delta <em>delta</em></kbd></th>
341   <td>where <em>delta</em> is a float that will increase or decrease the gain of monitor by the amount of the delta. (Ardour 5.11+)</td></tr>
342   <tr><th><kbd class="osc">/monitor/mute  <em>state</em></kbd></th>
343   <td>state is an int of 0 or 1 where 1 is muted</td></tr>
344   <tr><th><kbd class="osc">/monitor/dim  <em>state</em></kbd></th>
345   <td>state is an int of 0 or 1 where 1 is dimmed</td></tr>
346   <tr><th><kbd class="osc">/monitor/mono  <em>state</em></kbd></th>
347   <td>state is an int of 0 or 1 where 1 is mono mode</td></tr>
348 </table>
349
350 <h3>Track specific operations</h3>
351 <p>
352   For each of the following, <em>ssid</em> is the Surface Strip ID for the track
353 </p>
354 <p class="note">
355   SSID has a different meaning than RID in Ardour version 4.7 and before.
356   Effectively, banking is always being used and the SSID is generated on
357   the fly. The SSID is the position of the strip within bank as an int
358   1 to bank size. There are no gaps as there have been in the past.
359   Depending on the value of strip_types sent to Ardour, Master and
360   Monitor, may be included in the list of SSIDs or not as set in
361   <em>/set_surface</em>.
362 </p>
363 <p class="note">
364   Some Surfaces (many Android applets) are not able to deal with more
365   than one parameter in a command. However, the two parameter commands
366   below can also be sent as /strip/command/ssid param. In this case the
367   param should be a float even if an int is required below.
368 </p>
369 <table class="dl">
370   <tr><th><kbd class="osc">/bank_up</kbd></th>
371   <td>Change bank to the next higher bank.</td></tr>
372   <tr><th><kbd class="osc">/bank_up <em>delta</em></kbd></th>
373   <td>Where <em>delta</em> is a float of 1 to bank up and -1 is bank down for use with an encoder (Ardour 5.11+)</td></tr>
374   <tr><th><kbd class="osc">/bank_down </kbd></th>
375   <td>Change bank to the next lower bank.</td></tr>
376   <tr><th><kbd class="osc">/strip/mute <em>ssid</em> <em>mute_st</em></kbd></th>
377   <td>where <em>mute_st</em> is a bool/int representing the desired mute state of the track</td></tr>
378   <tr><th><kbd class="osc">/strip/solo <em>ssid</em> <em>solo_st</em></kbd></th>
379   <td>where <em>solo_st</em> is a bool/int representing the desired solo state of the track</td></tr>
380   <tr><th><kbd class="osc">/strip/solo_iso <em>ssid</em> <em>state</em></kbd></th>
381   <td>where <em>state</em> is a bool/int representing the desired solo isolate state of the track</td></tr>
382   <tr><th><kbd class="osc">/strip/solo_safe <em>ssid</em> <em>state</em></kbd></th>
383   <td>where <em>state</em> is a bool/int representing the desired solo safe/lock state of the track</td></tr>
384   <tr><th><kbd class="osc">/strip/monitor_input <em>ssid</em> <em>monitor_st</em></kbd></th>
385   <td>where <em>monitor_st</em> is a bool/int where 1 is forced input monitoring.</td></tr>
386   <tr><th><kbd class="osc">/strip/monitor_disk <em>ssid</em> <em>monitor_st</em></kbd></th>
387   <td>where <em>monitor_st</em> is a bool/int where 1 is forced disk monitoring. When input and disk are both off,
388   Auto monitoring is enabled.</td></tr>
389   <tr><th><kbd class="osc">/strip/recenable <em>ssid</em> <em>rec_st</em></kbd></th>
390   <td>where <em>rec_st</em> is a bool/int representing the desired rec state of the track</td></tr>
391   <tr><th><kbd class="osc">/strip/record_safe <em>ssid</em> <em>rec_st</em></kbd></th>
392   <td>where <em>rec_st</em> is a bool/int representing the desired record safe state of the track</td></tr>
393   <tr><th><kbd class="osc">/strip/polarity <em>ssid</em> <em>invert</em></kbd></th>
394   <td>where <em>invert</em> is a bool/int representing the desired polarity of the track</td></tr>
395   <tr><th><kbd class="osc">/strip/gain <em>ssid</em>  <em>gain</em></kbd></th>
396   <td>where <em>gain</em> is a float ranging from -193 to 6 representing the desired gain of the track in dB.</td></tr>
397   <tr><th><kbd class="osc">/strip/fader <em>ssid</em>  <em>position</em></kbd></th>
398   <td>where <em>position</em> is a float ranging from 0 to 1 representing the fader control position.</td></tr>
399   <tr><th><kbd class="osc">/strip/db_delta <em>ssid</em>  <em>delta</em></kbd></th>
400   <td>where <em>delta</em> is a float that will increase or decrease the gain of a track by the amount of the delta. (Ardour 5.11+)</td></tr>
401   <tr><th><kbd class="osc">/strip/*/automation <em>ssid</em>  <em>mode</em></kbd></th>
402   <td>where <em>mode</em> is an int ranging from 0 to 3 representing the desired automation mode for the control.
403   <a href="@@osc58-automation">See OSC Automation.</a></td></tr>
404   <tr><th><kbd class="osc">/strip/*/touch  <em>ssid</em> <em>state</em></kbd></th>
405   <td>where <em>state</em> is an int of 1 for touched and 0 for released.
406   <a href="@@osc58-automation">See OSC Automation.</a></td></tr>
407   <tr><th><kbd class="osc">/strip/trimdB <em>ssid</em>  <em>trim_db</em></kbd></th>
408   <td>where <em>trim_db</em> is a float ranging from -20 to 20 representing the desired trim of the track in dB.</td></tr>
409   <tr><th><kbd class="osc">/strip/pan_stereo_position <em>ssid</em> <em>position</em></kbd></th>
410   <td>where <em>position</em> is a float ranging from 0 to 1 representing the desired pan position of the track</td></tr>
411   <tr><th><kbd class="osc">/strip/pan_stereo_width <em>ssid</em> <em>width</em></kbd></th>
412   <td>where <em>width</em> is a float ranging from 0 to 1 representing the desired pan width of the track</td></tr>
413   <tr><th><kbd class="osc">/strip/send/gain <em>ssid</em> <em>sendid</em> <em>send_gain</em></kbd></th>
414   <td>where <em>sendid</em> = nth_send, <em>send_gain</em> is a float
415   ranging from -193 to +6 representing the desired gain in dB for the send</td></tr>
416   <tr><th><kbd class="osc">/strip/send/fader <em>ssid</em> <em>sendid</em> <em>send_gain</em></kbd></th>
417   <td>where <em>sendid</em> = nth_send, <em>send_gain</em> is a float
418   ranging from 0 to 1 representing the desired position for the send as a fader</td></tr>
419   <tr><th><kbd class="osc">/strip/send/enable <em>ssid</em> <em>sendid</em> <em>state</em></kbd></th>
420   <td>where <em>sendid</em> = nth_send, <em>state</em> is 1 for enabled and 0 for disabled</td></tr>
421   <tr><th><kbd class="osc">/strip/list </kbd></th>
422   <td>see: <a href="@@osc58-querying-ardour">
423   Querying Ardour with OSC.</a></td></tr>
424   <tr><th><kbd class="osc">/strip/sends <em>ssid</em></kbd></th>
425   <td>see: <a href="@@osc58-querying-ardour">
426   Querying Ardour with OSC.</a></td></tr>
427   <tr><th><kbd class="osc">/strip/receives <em>ssid</em></kbd></th>
428   <td>see: <a href="@@osc58-querying-ardour">
429   Querying Ardour with OSC.</a></td></tr>
430   <tr><th><kbd class="osc">/strip/plugin/list <em>ssid</em></kbd></th>
431   <td>see: <a href="@@osc58-querying-ardour">
432   Querying Ardour with OSC.</a></td></tr>
433   <tr><th><kbd class="osc">/strip/plugin/descriptor <em>ssid</em></kbd></th>
434   <td>see: <a href="@@osc58-querying-ardour">
435   Querying Ardour with OSC.</a></td></tr>
436   <tr><th><kbd class="osc">/strip/plugin/reset <em>ssid</em> <em>piid</em> </kbd></th>
437   <td>where <em>piid</em> = nth Plugin, will reset all values to the plugin's original values</td></tr>
438   <tr><th><kbd class="osc">/strip/plugin/activate <em>ssid</em> <em>piid</em> </kbd></th>
439   <td>where <em>piid</em> = nth Plugin, will set the plugin's state to active</td></tr>
440   <tr><th><kbd class="osc">/strip/plugin/deactivate <em>ssid</em> <em>piid</em> </kbd></th>
441   <td>where <em>piid</em> = nth Plugin, will set the plugin's state to inactive</td></tr>
442   <tr><th><kbd class="osc">/strip/plugin/parameter <em>ssid</em> <em>piid</em> <em>param</em> <em>value</em></kbd></th>
443   <td>where <em>piid</em> = nth Plugin, <em>param</em> = nth param, <em>value</em>
444   is a float ranging from 0 to 1 representing the desired parameter value</td></tr>
445   <tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>name</em></kbd></th>
446   <td>where <em>name</em> is a string for the desired name of the track</td></tr>
447 </table>
448 <h3>Selected Strip Operations</h3>
449 <p>
450   New for Ardour 5, A whole set of operations that work on the selected
451   or expanded strip.
452 </p>
453 <p class="note">
454   Selected strip operations are complex enough for their own page.
455   Please read: <a
456   href="@@osc58-selection-and-expansion-considerations">
457   Selection Considerations in OSC.</a> This is most important if more
458   than one OSC surface is being used with Ardour.
459 </p>
460 <p>
461   There are two kinds of selection in OSC. GUI selection and local
462   expansion. By default expansion follows selection.
463   <ul>
464         <li>
465                 GUI selection: Use <em>/strip/select</em> to set.  Selecting
466                 a strip in the GUI will set OSC surface select and the surface
467                 will set GUI selection as well.
468         </li>
469         <li>
470                 Local expansion: Use <em>/strip/expand</em> to expand a strip
471                 without changing overall selection. When /strip/expand is set
472                 to 0 or false, the select channel will go back to using the
473                 strip selected by the GUI. While expand is turned on,
474                 selecting a strip on the GUI does not
475                 select the OSC strip. Sending a /strip/select message will
476                 override the expand as if it had been set to false.
477                 Good for more than one OSC controller at a time.
478         </li>
479   </ul>
480 </p>
481
482 <table class="dl">
483   <tr><th><kbd class="osc">/strip/select <em>ssid</em> <em>y/n</em></kbd></th>
484   <td>Where <em>y/n</em> = 1 for select. Sets both GUI select and strip
485   to expanded mode. (0 is ignored)</td></tr>
486   <tr><th><kbd class="osc">/strip/expand <em>ssid</em> <em>y/n</em></kbd></th>
487   <td>Where <em>y/n</em> = 1 for expanded mode. Sets only local strip to
488   Expanded. Setting to 0 resets the expansion to follow selection.</td></tr>
489   <tr><th><kbd class="osc">/select/expand <em>y/n</em></kbd></th>
490   <td>Where <em>y/n</em> = 1 for expanded mode, 0 for Select mode.</td></tr>
491   <tr><th><kbd class="osc">/select/recenable <em>y/n</em></kbd></th>
492   <td>Where <em>y/n</em> is 1 for enabled and 0 for disabled</td></tr>
493   <tr><th><kbd class="osc">/select/record_safe <em>y/n</em></kbd></th>
494   <td>Where <em>y/n</em> is 1 for safe and 0 for unlocked</td></tr>
495   <tr><th><kbd class="osc">/select/mute <em>y/n</em></kbd></th>
496   <td>Where <em>y/n</em> is 1 for enabled and 0 for disabled</td></tr>
497   <tr><th><kbd class="osc">/select/solo <em>y/n</em></kbd></th>
498   <td>Where <em>y/n</em> is 1 for enabled and 0 for disabled</td></tr>
499   <tr><th><kbd class="osc">/select/solo_iso <em>state</em></kbd></th>
500   <td>where <em>state</em> is a bool/int representing the desired solo isolate state of the track</td></tr>
501   <tr><th><kbd class="osc">/select/solo_safe <em>state</em></kbd></th>
502   <td>where <em>state</em> is a bool/int representing the desired solo safe/lock state of the track</td></tr>
503   <tr><th><kbd class="osc">/select/monitor_input <em>y/n</em></kbd></th>
504   <td>Where <em>y/n</em> is 1 for monitor from input and 0 for auto</td></tr>
505   <tr><th><kbd class="osc">/select/monitor_disk <em>y/n</em></kbd></th>
506   <td>Where <em>y/n</em> is 1 for monitor from disk and 0 for auto</td></tr>
507   <tr><th><kbd class="osc">/select/polarity <em>invert</em></kbd></th>
508   <td>where <em>invert</em> is a bool/int representing the desired polarity of the track</td></tr>
509   <tr><th><kbd class="osc">/select/gain <em>gain</em></kbd></th>
510   <td>Where <em>gain</em> is a float ranging from -193 to 6 representing the desired gain of the track in dB.</td></tr>
511   <tr><th><kbd class="osc">/select/fader <em>position</em></kbd></th>
512   <td>Where <em>position</em> is an float ranging from 0 to 1 representing the fader control position.</td></tr>
513   <tr><th><kbd class="osc">/select/db_delta <em>delta</em></kbd></th>
514   <td>where <em>delta</em> is a float that will increase or decrease the gain of the selected track by the amount of the delta. (Ardour 5.11+)</td></tr>
515   <tr><th><kbd class="osc">/select/*/automation  <em>mode</em></kbd></th>
516   <td>where <em>mode</em> is an int ranging from 0 to 3 representing the desired automation mode for the control.
517   <a href="@@osc58-automation">See OSC Automation.</a></td></tr>
518   <tr><th><kbd class="osc">/select/*/touch  <em>state</em></kbd></th>
519   <td>where <em>state</em> is an int of 1 for touched and 0 for released.
520   <a href="@@osc58-automation">See OSC Automation.</a></td></tr>
521   <tr><th><kbd class="osc">/select/trimdB <em>trim_db</em></kbd></th>
522   <td>where <em>trim_db</em> is a float ranging from -20 to 20 representing the desired trim of the track in dB.</td></tr>
523   <tr><th><kbd class="osc">/select/pan_stereo_position <em>position</em></kbd></th>
524   <td>where <em>position</em> is a float ranging from 0 to 1 representing the desired pan position of the track</td></tr>
525   <tr><th><kbd class="osc">/select/pan_stereo_width <em>width</em></kbd></th>
526   <td>where <em>width</em> is a float ranging from 0 to 1 representing the desired pan width of the track</td></tr>
527   <tr><th><kbd class="osc">/select/pan_elevation_position <em>position</em></kbd></th>
528   <td>where <em>position</em> is a float ranging from 0 to 1 representing the desired pan elevation of the track</td></tr>
529   <tr><th><kbd class="osc">/select/pan_frontback_position <em>position</em></kbd></th>
530   <td>where <em>position</em> is a float ranging from 0 to 1 representing the desired front to back position of the track</td></tr>
531   <tr><th><kbd class="osc">/select/pan_lfe_control <em>value</em></kbd></th>
532   <td>where <em>value</em> is a float ranging from 0 to 1 representing the desired LFE control value for the track</td></tr>
533   <tr><th><kbd class="osc">/select/send_gain", <em>sendid</em> <em>send_gain</em></kbd></th>
534   <td>where <em>sendid</em> = nth_send, <em>send_gain</em> is a float
535   ranging from -193 to +6 representing the desired gain in dB for the send</td></tr>
536   <tr><th><kbd class="osc">/select/send_fader", <em>sendid</em> <em>send_gain</em></kbd></th>
537   <td>where <em>sendid</em> = nth_send, <em>send_gain</em> is a float
538   ranging from 0 to 1 representing the desired position for the send as a fader</td></tr>
539   <tr><th><kbd class="osc">/select/send_enable", <em>sendid</em> <em>state</em></kbd></th>
540   <td>where <em>sendid</em> = nth_send, <em>state</em> is 1 for enabled and 0 for disabled</td></tr>
541   <tr><th><kbd class="osc">/select/send_page", <em>delta</em></kbd></th>
542   <td>where <em>delta</em> is an int or float selecting another send as a delta from the current send.</td></tr>
543   <tr><th><kbd class="osc">/select/plugin_page", <em>delta</em></kbd></th>
544   <td>where <em>delta</em> is an int or float selecting another plugin parameter as a delta from the current parameter.</td></tr>
545   <tr><th><kbd class="osc">/select/plugin/parameter", <em>plugin</em> <em>parameter</em> <em>value</em></kbd></th>
546   <td>where <em>plugin</em> = nth plugin, <em>parameter</em> = nth parameter and <em>value</em> is a float from 0 to 1</td></tr>
547 </table>
548 <p class="note">
549         <code>/select/send_page</code> and <code>/select/plugin_page</code> may be used
550         with a page up and page down switch by using a switch with a value of <code>1</code>
551         for page up and a switch with a value of <code>-1</code> for page down. An encoder
552         can be used as well. (these commands were added in Ardour version 5.10)
553 </p>
554 <h3>Menu actions</h3>
555 <p>
556   Every single menu item in Ardour's GUI is accessible via OSC. There is
557   a single common syntax to trigger the action as if it was selected
558   with the mouse (or keyboard):</p>
559 <kbd class="osc">/access_action <em>action_name</em></kbd>
560 <p>
561   As of Ardour 5.9, <em>access_action</em> can be inlined for control surfaces
562   that are unable to send string parameters. The <em>action_name</em> is composed of
563   a group and an action in the form of <em>Group/action</em> which fits very well
564   as an OSC path extension:
565 </p>
566 <kbd class="osc">/access_action/<em>Group/action</em> <em>key_pressed</em></kbd>
567 <p>
568   The key_pressed is optional, but if present is a float 1 or 0 where the
569   command is ignored if key_pressed is  0.
570 </p>
571 <p class="note">
572   Some of the Menu Actions duplicate other OSC commands. In all cases it is better
573   to use the OSC commands rather than the Menu Actions if possible as the OSC commands
574   are more direct.
575 </p>
576 <p>
577   The <a href="@@list-of-menu-actions"> list of actions</a>
578   shows all available values of <em>action-name</em> for Ardour.
579 </p>
580
581 <!--p> These listed below are still working but may in the future not work
582 any more. All of them are just short cuts to a menu action and since menu
583 actions can now be "inlined", all known OSC controllers can call them directly.
584 Any of these actions that can be moved to session->action calls may reapear.
585 </p>
586
587   <tr><th><kbd class="osc">/mark_in</kbd></th>
588   <td>Marks the begining of a range at the current transport position</td></tr>
589   <tr><th><kbd class="osc">/mark_out</kbd></th>
590   <td>Marks the end of a range at the current transport position</td></tr>
591   <tr><th><kbd class="osc">/set_loop_range</kbd></th>
592   <td>Uses edit range as loop range</td></tr>
593   <tr><th><kbd class="osc">/set_session_range</kbd></th>
594   <td>Uses edit range as session range</td></tr>
595   <tr><th><kbd class="osc">/quick_snapshot_switch</kbd></th>
596   <td>Take a snapshot and switch to new version</td></tr>
597   <tr><th><kbd class="osc">/quick_snapshot_stay</kbd></th>
598   <td>Take a snapshot and keep working on this version</td></tr>
599   <tr><th><kbd class="osc">/fit_*_track(s)</kbd></th>
600   <td>Were <em>*</em> is one of 1, 2, 4, 8, 16, 32 or all. Fits this
601   many tracks in editor window. (add s for more than 1)</td></tr>
602   <tr><th><kbd class="osc">/zoom_*</kbd></th>
603   <td>Zoom editor to include <em>*</em> where <em>*</em> is 100_ms, 1_sec,
604   10_sec, 1_min, 5_min, 10_min or to_session</td></tr>
605   <tr><th><kbd class="osc">/temporal_zoom_in</kbd></th>
606   <td>Zoom editor in to show less time</td></tr>
607   <tr><th><kbd class="osc">/temporal_zoom_out</kbd></th>
608   <td>Zoom editor out to show more time</td></tr>
609   <tr><th><kbd class="osc">/scroll_up_1_track</kbd></th>
610   <td>Scroll the editor pane up 1 track</td></tr>
611   <tr><th><kbd class="osc">/scroll_up_1_page</kbd></th>
612   <td>Scroll the editor pane up 1 page</td></tr>
613   <tr><th><kbd class="osc">/scroll_dn_1_track</kbd></th>
614   <td>Scroll the editor pane down 1 track</td></tr>
615   <tr><th><kbd class="osc">/scroll_dn_1_page</kbd></th>
616   <td>Scroll the editor pane down 1 page</td></tr>
617   <tr><th><kbd class="osc">/set_punch_range</kbd></th>
618   <td>Uses edit range as punch range</td></tr>
619   <dt><kbd class="osc">/toggle_all_rec_enables</kbd></th>
620   <td>(toggles all tracks' recording state)</dd-->
621