OSC: new for 6.0

This commit is contained in:
Len Ovens 2018-11-08 12:47:17 -08:00
parent 94085e0ed8
commit 9d40f14263
12 changed files with 770 additions and 54 deletions

View File

@ -10,13 +10,44 @@
<em>Note:</em> OSC control has changed dramatically since Ardour 4.7. <em>Note:</em> OSC control has changed dramatically since Ardour 4.7.
The Path structure has been completely redone, Banking has been introduced, The Path structure has been completely redone, Banking has been introduced,
The controller is now able to tell Ardour what kind of feedback it can The controller is now able to tell Ardour what kind of feedback it can
work with (including bank size) and two new math styles have been added work with (including bank size) and the gain controls have new math
to gain controls. If you are using an Ardour version of 4.7 or less, calculations. If you are using an Ardour version of 4.7 or less,
please read <a please read <a
href="@@osc-control-for-ardour-4.7-and-prior"> href="@@osc-control-for-ardour-4.7-and-prior">
Osc control in Ardour 4.7 and prior.</a> Osc control in Ardour 4.7 and prior.</a>
</p> </p>
<ul>
<li>
<a href="#set-up">Control Surface Set</a>
</li>
<li>
<a href="#global">Master or Global messages</a>
</li>
<li>
<a href="#transport">Transport Control</a>
</li>
<li>
<a href="#recording">Recording control</a>
</li>
<li>
<a href="#information">Transport Information</a>
</li>
<li>
<a href="#editing">Editing-related</a>
</li>
<li>
<a href="#Master-strip">Master and Monitor strip control</a>
</li>
<li>
<a href="#strips">Track specific operations</a>
</li>
<li>
<a href="#select">Selected Strip Operations</a>
</li>
<li>
<a href="#menu">Menu actions</a>
</li>
</ul>
<p> <p>
Ardour is probably one of the most OSC-controllable audio applications Ardour is probably one of the most OSC-controllable audio applications
around, but as with all OSC-controllable apps, you can't do much without around, but as with all OSC-controllable apps, you can't do much without
@ -39,7 +70,8 @@ here</em>"/&gt;</kbd>
<p> <p>
Ardour sends any feedback to the port and address that sent any Ardour sends any feedback to the port and address that sent any
feedback request. The port does not have to match Ardour's port. In feedback request or to a port set manually in the setup dialog.
The port does not have to match Ardour's port. In
fact it is better not to. This means that Ardour can deal with more fact it is better not to. This means that Ardour can deal with more
than one controller at a time. The two controllers can bank than one controller at a time. The two controllers can bank
independently and even use different math for faders. This could be independently and even use different math for faders. This could be
@ -50,7 +82,7 @@ here</em>"/&gt;</kbd>
OSC feedback In Ardour.</a> OSC feedback In Ardour.</a>
</p> </p>
<h2>Control Surface Set Up</h2> <h2 id="set-up">Control Surface Set Up</h2>
<p> <p>
Control surface set up allows the controller to tell Ardour about its Control surface set up allows the controller to tell Ardour about its
@ -65,9 +97,6 @@ here</em>"/&gt;</kbd>
strip's controls are sent (or refreshed) as well. This will also strip's controls are sent (or refreshed) as well. This will also
refresh the Master feedback setup. refresh the Master feedback setup.
</p> </p>
<p class="note">
Surface Port Setting is available in the OSC GUI.
</p>
<p> <p>
As of Ardour 5.1, There is now a GUI setup in response to those using As of Ardour 5.1, There is now a GUI setup in response to those using
tablets with applications such as touchOSC or AndrOSC who need to be tablets with applications such as touchOSC or AndrOSC who need to be
@ -79,24 +108,27 @@ here</em>"/&gt;</kbd>
</p> </p>
<p>If /set_surface is not sent, the default values are used: <p>If /set_surface is not sent, the default values are used:
<ul> <ul>
<li><em>Bank Size</em>: 0&mdash; No banking (or infinite bank size).</li> <li><em>Bank Size</em>: 0 &mdash; No banking (or infinite bank size).</li>
<li><em>Strip Types</em>: 0&mdash; All strip types except hidden and special.</li> <li><em>Strip Types</em>: 159 &mdash; All strip types except hidden and special.</li>
<li><em>Feedback</em>: 0&mdash; All off.</li> <li><em>Feedback</em>: 0 &mdash; All off.</li>
<li><em>Fader Mode</em>: 0&mdash; gain in dB (not relevant with feedback off)</li> <li><em>Fader Mode</em>: 0 &mdash; gain in dB (not relevant with feedback off)</li>
<li><em>Send Page Size</em>: 0&mdash; No Send Paging.</li> <li><em>Send Page Size</em>: 0 &mdash; No Send Paging.</li>
<li><em>Plugin Page Size</em>: 0&mdash; No Plugin Paging.</li> <li><em>Plugin Page Size</em>: 0 &mdash; No Plugin Paging.</li>
<li><em>reply port</em>: 8000 &mdash; control surface will receive feedback on port 8000</li>
<li><em>Link set</em>: 0 &mdash; no linking for this control surface</li>
<li><em>Link ID</em>: 0 &mdash; no link ID</li>
</ul> </ul>
</p> </p>
<p> <p>
These values give the same behaviour as prior versions of Ardour. (or the closest possible) These values give the same behaviour as prior versions of Ardour. (or the closest possible)
</p> </p>
<table class="dl">
<tr><th><kbd class="osc">/set_surface <em>bank_size</em> <em>strip_types</em> <kbd class="osc">/set_surface <em>bank_size</em> <em>strip_types</em>
<em>feedback</em> <em>fadermode</em> <em>send_page_size</em> <em>plugin_page_size</em></kbd></th> <em>feedback</em> <em>fadermode</em> <em>send_page_size</em>
<td> <em>plugin_page_size</em> <em>port</em> <em>linkset</em> <em>linkid</em></kbd>
See below for an explanation of each parameter. <p>
</td></tr> See below for an explanation of each parameter.
</table> </p>
<p class="note"> <p class="note">
The /set_surface message may have all values except the last in-line. The /set_surface message may have all values except the last in-line.
For example: <code>/set_surface/8/31/8403/0/8 i 16</code> would be valid. For example: <code>/set_surface/8/31/8403/0/8 i 16</code> would be valid.
@ -166,13 +198,23 @@ here</em>"/&gt;</kbd>
<h3>gainmode</h3> <h3>gainmode</h3>
<p> <p>
Gainmode is a an int that acts as a bool: Gainmode is an int:
<ul> <ul>
<li><em>0 (or false)</em> dB value as a float from -193 to +6. Sent as <li><em>0:</em> dB value as a float from -193 to +6. Sent as
/strip/gain SSID value. (-193 or below are the same as -inf)</li> <kbd class="osc">/strip/gain SSID value</kbd>. (-193 or below are the same as -inf)</li>
<li><em>1 (or true)</em> A positional fader based on the same math <li><em>1:</em> A positional fader based on the same math
as Ardour's GUI. An Float from 0 to 1. Sent as as Ardour's GUI. A Float from 0 to 1. Sent as
/strip/fader SSID value</li> <kbd class="osc">/strip/fader SSID value</kbd>. At the same time the
gain value in dB is sent to the channel name as text. The name
will be restored after a short timeout.</li>
<li><em>2:</em> A positional fader based on the same math
as Ardour's GUI. A Float from 0 to 1. Sent as
<kbd class="osc">/strip/fader SSID value</kbd>. At the same time
the gain value in dB is sent as <kbd class="osc">/strip/gain SSID
value</kbd>.</li>
<li><em>3:</em> A positional fader based on the same math
as Ardour's GUI. A Float from 0 to 1. Sent as
<kbd class="osc">/strip/fader SSID value</kbd>.</li>
</ul> </ul>
</p> </p>
<p> <p>
@ -205,7 +247,43 @@ here</em>"/&gt;</kbd>
<p class="note"> <p class="note">
Plugin page size can also be set with <em>/set_surface/plugin_page_size plugin_page_size.</em> Plugin page size can also be set with <em>/set_surface/plugin_page_size plugin_page_size.</em>
</p> </p>
<h3>port</h3>
<p>
The port the controller would like to receive it's feedback on. Starting
with Ardour 6.0, the surface can directly set the manual port or set
it's host to <code>auto</code> port mode.
</p>
<p>
The value for <code>port</code> can be 0 for <code>auto</code> port mode or any
port value above 1024. It is suggested not to use Ardour's port number
of 3819 as controllers on the same machine that try to use the same
port will fail.
</p>
<p>
If the surface does not
tell Ardour which port to use, the default is 8000 or the setting
set up in the OSC setup GUI. There can only be one port setting per
host. If that setting is <code>auto</code>, than more than one
controller can be run on that host, but if a manual port is set there
can only be one. In the case of <code>auto</code> mode, the control
surface must set it's receive port to be the same as it's send port.
If that is not possible, then manual port mode must be used. This
allows a smart controller to use a number of ports on the same ip while
a smartphone set up as a personal monitor control can use the default
manual port.
</p>
<p class="note">
The host's port can also be set with <em>/set_surface/port port.</em>
</p>
<p class="note">
Changing the port will remove feedback from a device on the same host
using a different port.
</p>
<h3>Link set and Link ID</h3>
<p>
Please see <a href="@@osc58-linking-surfaces">Linking Surfaces</a>
For more information.
</p>
<h2>Querying Ardour for information</h2> <h2>Querying Ardour for information</h2>
<p> <p>
The control Surface may wish to control the type a frequency of The control Surface may wish to control the type a frequency of
@ -213,7 +291,14 @@ here</em>"/&gt;</kbd>
href="@@osc58-querying-ardour"> href="@@osc58-querying-ardour">
Querying Ardour with OSC.</a> Querying Ardour with OSC.</a>
</p> </p>
<h2>Using more than one surface</h2>
<p>
Ardour can use more than one surface at a time that both control the
same controls in Ardour. It is also possible to use two surfaces in
concert with each other. See: <a
href="@@osc58-linking-surfaces">
Linking Surfaces</a> for more information.
</p>
<h2>List of OSC messages</h2> <h2>List of OSC messages</h2>
<p class="note"> <p class="note">
Parameter types show how the value will be used. However, they may Parameter types show how the value will be used. However, they may
@ -221,9 +306,9 @@ here</em>"/&gt;</kbd>
href="@@osc58-parameter-types"> href="@@osc58-parameter-types">
Parameter Types in OSC.</a> Parameter Types in OSC.</a>
</p> </p>
<h3>Master or Global messages</h3> <h3 id="global">Master or Global messages</h3>
<h4>Transport Control</h4> <h4 id="transport">Transport Control</h4>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/transport_stop</kbd></th> <tr><th><kbd class="osc">/transport_stop</kbd></th>
<td>Stops a rolling transport</td></tr> <td>Stops a rolling transport</td></tr>
@ -249,6 +334,11 @@ here</em>"/&gt;</kbd>
<td>Where <em>seconds</em> is a float (+/-) of the number of seconds to jump</td></tr> <td>Where <em>seconds</em> is a float (+/-) of the number of seconds to jump</td></tr>
<tr><th><kbd class="osc">/toggle_click</kbd></th> <tr><th><kbd class="osc">/toggle_click</kbd></th>
<td>Toggle metronome click on and off</td></tr> <td>Toggle metronome click on and off</td></tr>
<tr><th><kbd class="osc">/marker <em>marker</em></kbd></th>
<td>Where <em>marker</em> may be a float or int of the nth marker or a
string with the marker name to locate to (new Ardour 6.0). If the playhead
is at a marker and the <em>marker</em> is unique, the marker at the playhead
will be renamed to the string sent</td></tr>
<tr><th><kbd class="osc">/add_marker</kbd></th> <tr><th><kbd class="osc">/add_marker</kbd></th>
<td>(adds marker to the current transport position)</td></tr> <td>(adds marker to the current transport position)</td></tr>
<tr><th><kbd class="osc">/remove_marker</kbd></th> <tr><th><kbd class="osc">/remove_marker</kbd></th>
@ -277,7 +367,7 @@ here</em>"/&gt;</kbd>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/scrub <em>delta</em></kbd></th> <tr><th><kbd class="osc">/scrub <em>delta</em></kbd></th>
<td>Where <em>delta</em> is a float indicating forward or reverse movement. <td>Where <em>delta</em> is a float indicating forward or reverse movement.
See <a href="@@osc58-jog-modes#scrub">OSC Scrub Modes</a></td></tr> <!--#scrub--> See <a href="@@osc58-jog-modes#scrub">OSC Scrub Modes</a></td></tr>
<tr><th><kbd class="osc">/jog <em>delta</em></kbd></th> <tr><th><kbd class="osc">/jog <em>delta</em></kbd></th>
<td>Where <em>delta</em> is a float indicating forward or reverse movement</td></tr> <td>Where <em>delta</em> is a float indicating forward or reverse movement</td></tr>
<tr><th><kbd class="osc">/jog/mode <em>mode</em></kbd></th> <tr><th><kbd class="osc">/jog/mode <em>mode</em></kbd></th>
@ -286,7 +376,7 @@ here</em>"/&gt;</kbd>
OSC Jog Modes</a></td></tr> OSC Jog Modes</a></td></tr>
</table> </table>
<h4>Recording control</h4> <h4 id="recording">Recording control</h4>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/toggle_punch_in</kbd></th> <tr><th><kbd class="osc">/toggle_punch_in</kbd></th>
<td></td></tr> <td></td></tr>
@ -296,7 +386,7 @@ here</em>"/&gt;</kbd>
<td>Toggles master record enable</td></tr> <td>Toggles master record enable</td></tr>
</table> </table>
<h4>Transport Information</h4> <h4 id="information">Transport Information</h4>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/transport_frame</kbd></th> <tr><th><kbd class="osc">/transport_frame</kbd></th>
<td>Ardour sends /transport_frame <em>current_frame</em></td></tr> <td>Ardour sends /transport_frame <em>current_frame</em></td></tr>
@ -306,7 +396,7 @@ here</em>"/&gt;</kbd>
<td>Ardour sends /record_enabled <em>recordenable_status</em></td></tr> <td>Ardour sends /record_enabled <em>recordenable_status</em></td></tr>
</table> </table>
<h4>Editing-related</h4> <h4 id="editing">Editing-related</h4>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/undo</kbd></th> <tr><th><kbd class="osc">/undo</kbd></th>
<td></td></tr> <td></td></tr>
@ -315,9 +405,11 @@ here</em>"/&gt;</kbd>
<tr><th><kbd class="osc">/save_state</kbd></th> <tr><th><kbd class="osc">/save_state</kbd></th>
<td>(this is the regular <kbd class="menu">Session &gt; Save</kbd> <td>(this is the regular <kbd class="menu">Session &gt; Save</kbd>
operation)</td></tr> operation)</td></tr>
<tr><th><kbd class="osc">/session_name <em>new_name</em></kbd></th>
<td>Set session name to <em>new_name</em> (if new_name is legal and unique)</td></tr>
</table> </table>
<h4>Master and Monitor strip control</h4> <h4 id="Master-strip">Master and Monitor strip control</h4>
<table class="dl"> <table class="dl">
<tr><th><kbd class="osc">/master/gain <em>dB</em></kbd></th> <tr><th><kbd class="osc">/master/gain <em>dB</em></kbd></th>
<td>dB is a float indicating the desired gain in dB</td></tr> <td>dB is a float indicating the desired gain in dB</td></tr>
@ -347,10 +439,15 @@ here</em>"/&gt;</kbd>
<td>state is an int of 0 or 1 where 1 is mono mode</td></tr> <td>state is an int of 0 or 1 where 1 is mono mode</td></tr>
</table> </table>
<h3>Track specific operations</h3> <h3 id="strips">Track specific operations</h3>
<p> <p>
For each of the following, <em>ssid</em> is the Surface Strip ID for the track For each of the following, <em>ssid</em> is the Surface Strip ID for the track
</p> </p>
<p>
As of Ardour 6.0, the user may use a subset all available strips. See:
<a href="@@osc58-custom-strips">
Making a user selected strip list.</a>
</p>
<p class="note"> <p class="note">
SSID has a different meaning than RID in Ardour version 4.7 and before. SSID has a different meaning than RID in Ardour version 4.7 and before.
Effectively, banking is always being used and the SSID is generated on Effectively, banking is always being used and the SSID is generated on
@ -376,6 +473,19 @@ here</em>"/&gt;</kbd>
<tr><th><kbd class="osc">/use_group <em>state</em></kbd></th> <tr><th><kbd class="osc">/use_group <em>state</em></kbd></th>
<td>Where <em>state</em> is a float of 1 to use group or 0 to not use group. <td>Where <em>state</em> is a float of 1 to use group or 0 to not use group.
<a href="@@osc58-feedback-and-strip-types-values#use-group">more info on use_group</a></td></tr> <a href="@@osc58-feedback-and-strip-types-values#use-group">more info on use_group</a></td></tr>
<tr><th><kbd class="osc">/strip/spill <em>ssid</em></kbd></th>
<td> Use strips this strip is grouped with or those that feed this bus
(if this strip is a bus) or that this vca (if this is a VCA) controls.
See <a href="#spill">Spill Strips</a> for more details</td></tr>
<tr><th><kbd class="osc">/strip/hide <em>ssid</em> <em>y/n</em></kbd></th>
<td>Where <em>y/n</em> = 1 hide this strip, 0 for show this track.
<a href="@@osc58-feedback-and-strip-types-values#hidden">
Hiding strips.</a></td></tr>
<tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>strip_name</em></kbd></th>
<td>where <em>strip_name</em> is a string representing the desired name for the strip</td></tr>
<tr><th><kbd class="osc">/strip/group <em>ssid</em> <em>group_name</em></kbd></th>
<td>where <em>group_name</em> is a string representing the name of the group desired.
See <a href="#groups">groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/strip/mute <em>ssid</em> <em>mute_st</em></kbd></th> <tr><th><kbd class="osc">/strip/mute <em>ssid</em> <em>mute_st</em></kbd></th>
<td>where <em>mute_st</em> is a bool/int representing the desired mute state of the track</td></tr> <td>where <em>mute_st</em> is a bool/int representing the desired mute state of the track</td></tr>
<tr><th><kbd class="osc">/strip/solo <em>ssid</em> <em>solo_st</em></kbd></th> <tr><th><kbd class="osc">/strip/solo <em>ssid</em> <em>solo_st</em></kbd></th>
@ -448,7 +558,7 @@ here</em>"/&gt;</kbd>
<tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>name</em></kbd></th> <tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>name</em></kbd></th>
<td>where <em>name</em> is a string for the desired name of the track</td></tr> <td>where <em>name</em> is a string for the desired name of the track</td></tr>
</table> </table>
<h3>Selected Strip Operations</h3> <h3 id="select">Selected Strip Operations</h3>
<p> <p>
New for Ardour 5, A whole set of operations that work on the selected New for Ardour 5, A whole set of operations that work on the selected
or expanded strip. or expanded strip.
@ -491,6 +601,56 @@ here</em>"/&gt;</kbd>
Expanded. Setting to 0 resets the expansion to follow selection.</td></tr> Expanded. Setting to 0 resets the expansion to follow selection.</td></tr>
<tr><th><kbd class="osc">/select/expand <em>y/n</em></kbd></th> <tr><th><kbd class="osc">/select/expand <em>y/n</em></kbd></th>
<td>Where <em>y/n</em> = 1 for expanded mode, 0 for Select mode.</td></tr> <td>Where <em>y/n</em> = 1 for expanded mode, 0 for Select mode.</td></tr>
<tr><th><kbd class="osc">/select/hide <em>y/n</em></kbd></th>
<td>Where <em>y/n</em> = 1 hide this strip, 0 for show this track.
<a href="@@osc58-feedback-and-strip-types-values#hidden">
Hiding strips.</a></td></tr>
<tr><th><kbd class="osc">/select/name <em>strip_name</em></kbd></th>
<td>where <em>strip_name</em> is a string representing the desired name for the strip</td></tr>
<tr><th><kbd class="osc">/select/comment <em>comment</em></kbd></th>
<td>where <em>comment</em> is a string representing the desired comment for the strip</td></tr>
<tr><th><kbd class="osc">/select/group <em>group_name</em></kbd></th>
<td>where <em>group_name</em> is a string representing the name of the group desired.
See <a href="#groups">groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/enable <em>state</em></kbd></th>
<td>where <em>state</em> is an int representing the desired enable state
of the group the selected strip is a part of</td></tr>
<tr><th><kbd class="osc">/select/group/gain <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the gain sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/relative <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets relative state of thew
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/mute <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the mute sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/solo <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the solo sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/recenable <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the recenable sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/select <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the select sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/active <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the route active sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/color <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the color sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/monitoring <em>state</em></kbd></th>
<td>where <em>state</em> is an int which sets the monitoring sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/recenable <em>y/n</em></kbd></th> <tr><th><kbd class="osc">/select/recenable <em>y/n</em></kbd></th>
<td>Where <em>y/n</em> is 1 for enabled and 0 for disabled</td></tr> <td>Where <em>y/n</em> is 1 for enabled and 0 for disabled</td></tr>
<tr><th><kbd class="osc">/select/record_safe <em>y/n</em></kbd></th> <tr><th><kbd class="osc">/select/record_safe <em>y/n</em></kbd></th>
@ -514,7 +674,20 @@ here</em>"/&gt;</kbd>
<tr><th><kbd class="osc">/select/fader <em>position</em></kbd></th> <tr><th><kbd class="osc">/select/fader <em>position</em></kbd></th>
<td>Where <em>position</em> is an float ranging from 0 to 1 representing the fader control position.</td></tr> <td>Where <em>position</em> is an float ranging from 0 to 1 representing the fader control position.</td></tr>
<tr><th><kbd class="osc">/select/db_delta <em>delta</em></kbd></th> <tr><th><kbd class="osc">/select/db_delta <em>delta</em></kbd></th>
<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> <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>
<tr><th><kbd class="osc">/select/vca <em>name</em> <em>state</em></kbd></th>
<td>where <em>name</em> is a string with the name of the VCA, and
<em>state</em> is an int that determines if the named VCA will control
this strip. (Ardour 6.0)</td></tr>
<tr><th><kbd class="osc">/select/vca/toggle <em>name</em></kbd></th>
<td>where <em>name</em> is a string with the name of the VCA. This toggles the
use of the named vca with this strip. Any trailing "[_]" will be ignored.
(Ardour 6.0)</td></tr>
<tr><th><kbd class="osc">/select/spill</kbd></th>
<td> show only strips this strip is grouped with or
those that feed this bus or that this vca controls.
See <a href="#spill">Spill Strips</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/*/automation <em>mode</em></kbd></th> <tr><th><kbd class="osc">/select/*/automation <em>mode</em></kbd></th>
<td>where <em>mode</em> is an int ranging from 0 to 3 representing the desired automation mode for the control. <td>where <em>mode</em> is an int ranging from 0 to 3 representing the desired automation mode for the control.
<a href="@@osc58-automation">See OSC Automation.</a></td></tr> <a href="@@osc58-automation">See OSC Automation.</a></td></tr>
@ -545,6 +718,8 @@ here</em>"/&gt;</kbd>
<td>where <em>delta</em> is an int or float selecting another send as a delta from the current send.</td></tr> <td>where <em>delta</em> is an int or float selecting another send as a delta from the current send.</td></tr>
<tr><th><kbd class="osc">/select/plugin_page", <em>delta</em></kbd></th> <tr><th><kbd class="osc">/select/plugin_page", <em>delta</em></kbd></th>
<td>where <em>delta</em> is an int or float selecting another plugin parameter as a delta from the current parameter.</td></tr> <td>where <em>delta</em> is an int or float selecting another plugin parameter as a delta from the current parameter.</td></tr>
<tr><th><kbd class="osc">/select/plugin/activate", <em>state</em></kbd></th>
<td>where <em>state</em> is an int or float with the desired state of the current plugin activation.(new Ardour 6.0)</td></tr>
<tr><th><kbd class="osc">/select/plugin/parameter", <em>plugin</em> <em>parameter</em> <em>value</em></kbd></th> <tr><th><kbd class="osc">/select/plugin/parameter", <em>plugin</em> <em>parameter</em> <em>value</em></kbd></th>
<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> <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>
</table> </table>
@ -554,7 +729,85 @@ here</em>"/&gt;</kbd>
for page up and a switch with a value of <code>-1</code> for page down. An encoder for page up and a switch with a value of <code>-1</code> for page down. An encoder
can be used as well. (these commands were added in Ardour version 5.10) can be used as well. (these commands were added in Ardour version 5.10)
</p> </p>
<h3>Menu actions</h3> <h4 id="groups">Using groups with strip and select (new for Ardour 6.0)</h4>
<p class="note">
No grouping will occure unless <code>use_group</code> is set either
by using <kbd class="osc">/set_surface/strip_types</kbd> with the use groups bit set
or by using <kbd class="osc">/use_group i 1</kbd>.
</p>
<p>
The result for <kbd class="osc">/strip/group</kbd> or
<kbd class="osc">/select/group</kbd> is determined by the parameter
passed in the command and the current group and available list of
groups. The group name the control surface sends may be:
</p>
<ul>
<li>
"none", "" or " " will remove this strip from this group. If this
was the only strip in this group, the group is deleted. Some
OSC controllers have trouble sending an empty string and a
list of groups contains "none" as well so a dropdown can just
send a text item and work.
</li>
<li>
The name of a group this strip does not belong to will remove
this strip from it's current group and add it to the named group.
If this strip was the only strip in the group it was removed from,
that group will be deleted.
</li>
<li>
An unused name when this strip is not part of a group will create
a new group with the group name sent and add this strip to that
group
</li>
<li>
An unused name when this strip is already a part of a group will
rename this group to the name sent.
</li>
</ul>
<p>To create a new group from a strip that is already joined to a group,
the strip must first remove itself from the current group.
</p>
<h4 id="spill">Spill Strips</h4>
<p><kbd class="osc">/select/spill</kbd> or <kbd class="osc">/strip/spill</kbd>
will:</p>
<ul>
<li>
set the current set of strips in use to include only the strips
that are a part of the group the strip is a part of so long
as that strip is a track.</li>
<li>
set the current set of strips to the set of strips that feed
this strip if it is a bus. In the case where this strip is
being fed by sends rather than strip outputs, the strips that
feed this bus will have their names set to the name of the strip
with <em>-send</em> appended to it and the fader, pan and mute will
control the send rather than the strip. The other strip controls
will be disabled in this mode. This only happens when the strip
that calls spill is a bus. In the case where a strip that is part
of a group is chosen as above where the group all sends to a common
bus this will not happen. This can be useful for a group that uses
"Add New Aux Bus" to switch from sends to faders.</li>
<li>
set the current set of strips to the set of strips that are
controled by the VCA if this strip is a VCA.</li>
</ul>
<p>spill/group, spill/bus or spill/vca can also be used to force
the type of spilling that is done. This may be useful if the strip
is a bus that is a part of a group and the group variation is required.</p>
<p>In all cases, if there is a bus or VCA attached to the group of strips
it will be included as well.</p>
<P>What is less obvious, is how to return to the normal set of strips.
There are a number of ways of doing so depending on the operator's wishes.
The most obvious way is to use <kbd class="osc">/set_surface/strip_types</kbd>
to set the strip list as desired. It is expected that a control surface
may have more than one strip types button in any case to see only
inputs or only busses etc and of course one to give a full mix. Another
option is to reselect the custom set of strips with
<kbd class="osc">/strip/custom/mode <em>mode</em></kbd>.
</p>
<h3 id="menu">Menu actions</h3>
<p> <p>
Every single menu item in Ardour's GUI is accessible via OSC. There is Every single menu item in Ardour's GUI is accessible via OSC. There is
a single common syntax to trigger the action as if it was selected a single common syntax to trigger the action as if it was selected

View File

@ -0,0 +1,142 @@
<p>
It is sometimes desirable to work only with a set of strips out of the whole
list of available strips. This could be in any case where there is more than
one engineer and one of them is responsible for only a group of strips such
as all percussion, all sound effects, choir only, orchestra only, etc.
</p>
<p class="note">
New Ardour 6.0
</p>
<p>
After a strip is added to the custom strip list, it will retain the same
SSID for the life of the session so long as banking is not used. If a strip
is removed it will leave a gap in the SSID list. Custom strip lists do
not survive a session reload and need to be recreated at session start.
</p>
<p class="note">
A custom strip list will only affect the surface that sets it. Any
other surface will continue to operate on all strips or may have it's
own set of custom strips.
</p>
<p>
The commands below control the use of a custom strip set.
</p>
<table class="dl">
<tr><th><kbd class="osc">/strip/listen <em>ssid</em> <em>...</em></kbd></th>
<td>where <em>ssid</em> is an integer or list of integers representing
tracks to add to the custom track list</td></tr>
<tr><th><kbd class="osc">/strip/ignore <em>ssid</em> <em>...</em></kbd></th>
<td>where <em>ssid</em> is an integer or list of integers representing
tracks to remove from the custom track list</td></tr>
<tr><th><kbd class="osc">/strip/custom/mode <em>mode</em></kbd></th>
<td>where <em>mode</em> is an integer representing the desired mode
of custom strips.</td></tr>
<tr><th><kbd class="osc">/strip/custom/clear </kbd></th>
<td>disables custom strips and clears the previously set custom strip list</td></tr>
</table>
<h2>Setting up a custom strip set</h2>
<p>
The control surface may set up a custom strip list all at once or one
strip at a time. A control surface that uses banking would probably
be best served by setting up one strip at a time, while one that does
no banking (bank_size = 0) and uses <code>/strip/list</code> would
probably be best served by having them all selected at once.
</p>
<ul>
<li>
<p>One at a time example:</p>
<code>/strip/listen 2</code>
<p>adds strip 2 to custom strip list</p>
</li>
<li>
<p>Many at a time example:</p>
<code>/strip/listen 2 4 6 8</code>
<p>Adds strips 2, 4, 6 and 8 to the custom strip list</p>
</li>
</ul>
<p class="note">
<code>/strip/listen</code> will only work with custom enable turned off.
Using <code>/strip/listen</code> while in custom mode will have no effect.
</p>
<h2>Using the custom strip set</h2>
<p>
Once the custom strip set has been set up as shown above, it must be enabled.
This is done from the control surface with the <code>/strip/custom/mode <em>mode</em></code>
OSC command. <em>Mode</em> may be <em>0</em>: Off, <em>1</em>: Use custom
strip set in selected order or <em>2</em>: Use custom strip set
in mixer order. <code>/strip/list</code> will now show the custom strip list
and and its SSIDs. No more strips may be added to the custom strip list while
in custom mode. To add more strips to the end of the list, first send the
<code>/strip/custom/mode 0</code> then more strips can be added to the end
of the list. After adding the next strips send the
<code>/strip/custom/mode <em>mode</em></code>
to re-enable custom mode. It is possible to switch back and forth between
normal and custom mode as desired.
</p>
<h3>Custom Strip ordering</h3>
<p>
The ordering of strips in the custom strip set is affected by both the
custom <code>mode</code> and the <code>bank_size</code> setting for the
surface.
</p>
<p class="note">
A <code>bank_size</code> of <em>0</em> is also described as having
banking turned off. In such a case all strips are shown.
</p>
<ul>
<li>
<h4>Mode 0</h4>
<p>
Custom mode <em>Off</em>. All strips will be used as set by
<code>strip_types</code>.
</p>
</li>
<li>
<h4>Mode 1</h4>
<p>
If <code>mode</code> is set to <em>1</em> the custom strip ordering
is always "first come, first served". That is,
<code>/strip/listen 2 4</code> followed by <code>/strip/listen 1 3</code>
will result in strip 2 showing as SSID 1 , strip 4 as SSID 2, strip 1
as SSID 3 and strip 3 as SSID 4 when in custom mode <em>1</em>. Once these SSID are set
in this way, they will remain linked to this SSID with banking turned off and
will at least remain in the same order with banking on.
</p>
</li>
<li>
<h4>Mode 2</h4>
<p>
If <code>mode</code> is set to <em>2</em> the custom strip ordering
will be set to mixer order and any deleted strips will not leave
a blank strip in the set.
</p>
</li>
<li>
<h4>With banking on</h4>
<p>
If <code>bank_size</code> is set to greater than <em>0</em>, Then
banking is turned on. In this case <code>strip_types</code> will
be honored and only strips from the custom strip set that match
<code>strip_types</code> will be shown in a bank. However, the
order that the strips appear will still be affected by the
<code>mode</code>.
</p>
</li>
</ul>
<h2>Removing a strip from the custom strip list</h2>
<p>
<code>/strip/ignore ssid</code> will remove that strip from the
custom strip list if custom strip use is enabled. In <code>mode</code>
<em>1</em> there will be a blank strip at that SSID and all other
SSIDs will remain the same for no banking. With banking
in use, <code>strip_types</code> are honored and so removed strips
which have no type, will not be shown.
</p>
<p>
<code>/strip/custom/clear</code> will remove
all strips and SSIDs allowing custom strip lists to be restarted from
SSID 1. Custom <code>mode</code> will be set to <em>0</em>.
</p>

View File

@ -68,6 +68,7 @@
or the control should only affect the strip the control is applied to. or the control should only affect the strip the control is applied to.
The <code>/use_group f state</code> command can be used to temporarily The <code>/use_group f state</code> command can be used to temporarily
change this on the fly. change this on the fly.
</p>
<p> <p>
Some handy numbers to use might be: 15 (all tracks and busses - Some handy numbers to use might be: 15 (all tracks and busses -
1 + 2 + 4 + 8), 31 1 + 2 + 4 + 8), 31
@ -77,9 +78,39 @@
surface with just a bank of fader strips, adding master or monitor surface with just a bank of fader strips, adding master or monitor
would allow access to them within the banks. Selected would be useful would allow access to them within the banks. Selected would be useful
for working on a group or a set of user selected strips. Hidden shows for working on a group or a set of user selected strips. Hidden shows
strips the GUI has hidden. strips the GUI has hidden. As such, a control surface will likely have
a number of buttons with different strip_types for convenience.
<ul>
<li>
Mixer - All strip types <kbd class="osc">/set_surface/strip_types 159</kbd>
</li>
<li>
Audio Tracks - Just Audio tracks that can record <kbd class="osc">/set_surface/strip_types 1</kbd>
</li>
<li>
MIDI Tracks - Tracks with at least 1 MIDI input that can record
<kbd class="osc">/set_surface/strip_types 2</kbd>
</li>
<li>
Busses - A mix of all busses, possibly including VCAs
<kbd class="osc">/set_surface/strip_types 156</kbd>
</li>
<li>
Selected - All strips that are currently selected
<kbd class="osc">/set_surface/strip_types 256</kbd>
</li>
<li>
Hidden - All hidden strips <kbd class="osc">/set_surface/strip_types 512</kbd>
</li>
<li>
Custom - see <a href="@@osc58-custom-strips">
Making a user selected strip list.</a>
<kbd class="osc">/strip/custom/mode 1</kbd>
</li>
</ul>
</p> </p>
<p class-"note"> <p class="note">
Audio Aux? say what? I am sure most people will have noticed that they Audio Aux? say what? I am sure most people will have noticed that they
can find no <em>Aux</em> strips in the Ardour mixer. There are none. can find no <em>Aux</em> strips in the Ardour mixer. There are none.
There are busses that can be used a number of ways. From analog days, There are busses that can be used a number of ways. From analog days,
@ -94,7 +125,39 @@
performer would be able to mix their own monitor. The user is free performer would be able to mix their own monitor. The user is free
to enable both busses and auxes if they would prefer. to enable both busses and auxes if they would prefer.
</p> </p>
<h3 id="hidden">Using hidden strips</h3>
<p>
Ardour allows any of it's strips to be hidden so that they do not show
up on the GUI mixer or editor. OSC follows the GUI by default and will
not show hidden strips. As of Ardour 6.0 the OSC commands include
<kbd class="osc">/select/hide <em>y/n</em></kbd> for the selected
strip and <kbd class="osc">/strip/hide <em>ssid</em> <em>y/n</em></kbd>
for any strip. This allows the control surface to hide or unhide a strip.
What may not be obvious is that hiding a strip makes it disappear and
become unselected. So if a selected strip is hidden, it is no longer
selected and the select channel will show the default select strip
(Master). In order to show a hidden strip, the hidden strips need to
be shown first using the <kbd class="osc">/set_surface/strip_types 512</kbd>
command to show only hidden strips. Then use the
<kbd class="osc">/strip/hide <em>SSID</em> 0</kbd> or
<kbd class="osc">/select/hide 0</kbd>
to show that strip. Of course, because only hidden strips are showing,
the strip you have set to no long hide will seem to vanish. A
<kbd class="osc">/set_surface/strip_types 159</kbd> will then show
the default strip types or replace the 159 with the desired strip_types.
</p>
<p class="note">
When hiding more than one strip in a row, check the strip name before
hiding as the strips will move as each strip is hidden just as it does
with the GUI mixer. So to hide strips 5, 6 and 7, the hide button
for <code>ssid</code> 5 is pressed 3 times. A more intuitive method
would be to hide strips from right to left (7, 6 and 5) which will
work as expected.
<p>
In short, shown strips can only be hidden when they are viewable and
hidden strip can only shown (or un-hid) when strip_types include hidden
strips.
</p>
<h2 id="feedback">feedback</h2> <h2 id="feedback">feedback</h2>
<p>Feedback is an integer made up of bits. The easy way to <p>Feedback is an integer made up of bits. The easy way to
deal with this is to think of feedback items being worth a number and deal with this is to think of feedback items being worth a number and

View File

@ -118,6 +118,9 @@
<td><em>state</em> is true when transport is moving forward but not at speed 1.0</td></tr> <td><em>state</em> is true when transport is moving forward but not at speed 1.0</td></tr>
<tr><th><kbd class="osc">/rewind <em>state</em></kbd></th> <tr><th><kbd class="osc">/rewind <em>state</em></kbd></th>
<td><em>state</em> is true when transport speed is less than 0.0</td></tr> <td><em>state</em> is true when transport speed is less than 0.0</td></tr>
<tr><th><kbd class="osc">/marker <em>position</em></kbd></th>
<td><em>position</em> is a string in the form <kbd class="osc">previous &lt;-&gt; next</kbd>
or <kbd class="osc">current</kbd> (new Ardour 6.0)</td></tr>
<tr><th><kbd class="osc">/loop_toggle <em>state</em></kbd></th> <tr><th><kbd class="osc">/loop_toggle <em>state</em></kbd></th>
<td><em>state</em> is true when loop mode is true</td></tr> <td><em>state</em> is true when loop mode is true</td></tr>
<tr><th><kbd class="osc">/cancel_all_solos <em>state</em></kbd></th> <tr><th><kbd class="osc">/cancel_all_solos <em>state</em></kbd></th>
@ -183,9 +186,10 @@
<td>where <em>LED</em> is a bool that indicates another bank_up operation is possible.</td></tr> <td>where <em>LED</em> is a bool that indicates another bank_up operation is possible.</td></tr>
<tr><th><kbd class="osc">/bank_down <em>LED</em></kbd></th> <tr><th><kbd class="osc">/bank_down <em>LED</em></kbd></th>
<td>where <em>LED</em> is a bool that indicates another bank_down operation is possible.</td></tr> <td>where <em>LED</em> is a bool that indicates another bank_down operation is possible.</td></tr>
<tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>track_name</em></kbd></th> <tr><th><kbd class="osc">/strip/name <em>ssid</em> <em>strip_name</em></kbd></th>
<td>where <em>track_name</em> is a string representing the name of the track <td>where <em>strip_name</em> is a string representing the name of the strip</td></tr>
(note there is no corresponding command to set the track name)</td></tr> <tr><th><kbd class="osc">/strip/group <em>ssid</em> <em>group_name</em></kbd></th>
<td>where <em>group_name</em> is a string representing the name of the group the track belongs to</td></tr>
<tr><th><kbd class="osc">/strip/mute <em>ssid</em> <em>mute_st</em></kbd></th> <tr><th><kbd class="osc">/strip/mute <em>ssid</em> <em>mute_st</em></kbd></th>
<td>where <em>mute_st</em> is a bool/int representing the actual mute state of the track</td></tr> <td>where <em>mute_st</em> is a bool/int representing the actual mute state of the track</td></tr>
<tr><th><kbd class="osc">/strip/solo <em>ssid</em> <em>solo_st</em></kbd></th> <tr><th><kbd class="osc">/strip/solo <em>ssid</em> <em>solo_st</em></kbd></th>
@ -241,8 +245,54 @@
<tr><th><kbd class="osc">/select/send_name <em>sendid</em> <em>send_name</em></kbd></th> <tr><th><kbd class="osc">/select/send_name <em>sendid</em> <em>send_name</em></kbd></th>
<td>where <em>send_name</em> is a string representing the name of the buss <td>where <em>send_name</em> is a string representing the name of the buss
this send goes to.</td></tr> this send goes to.</td></tr>
<tr><th><kbd class="osc">/select/group/enable <em>state</em></kbd></th>
<td>where <em>state</em> is an int representing the current enable state
of the group the selected strip is a part of</td></tr>
<tr><th><kbd class="osc">/select/group/gain <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the gain sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/relative <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows relative state of thew
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/mute <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the mute sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/solo <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the solo sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/recenable <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the recenable sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/select <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the select sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/active <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the route active sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/color <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the color sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/group/monitoring <em>state</em></kbd></th>
<td>where <em>state</em> is an int which shows the monitoring sharing of the
group the strip belongs to. See <a href="@@track-and-bus-groups">
Track and Bus Groups</a> for more details</td></tr>
<tr><th><kbd class="osc">/select/vcas <em>name</em> <em>state</em> ...</kbd></th>
<td>where <em>name</em> is a string with the name of the VCA, and
<em>state</em> is an int that determines if the named VCA will control
this strip. Note that this lists all VCAs in a session. (Ardour 6.0)</td></tr>
</table> </table>
<h3>Menu actions</h3> <h3>Menu actions</h3>
<p class="note">
There is no feedback for Menu actions.
</p>
<p> <p>
Every single menu item in Ardour's GUI is accessible via OSC. However, Every single menu item in Ardour's GUI is accessible via OSC. However,
there is no provision for returning the state of anything set this way. there is no provision for returning the state of anything set this way.

View File

@ -0,0 +1,170 @@
<p>
As of Ardour 6.0, Ardour provides the possibility of linking two or
more surface to work as one surface. This means that two surfaces,
one with 8 strips and one with 6 strips would look like a single 14
strip surface. A <code>/bank_up</code> or down on either surface with bank the two
so that they bank in 14 strip increments.
</p>
<p class="note">
Ardour 5.0 to 5.12 can use two surfaces as shown in <a href="#example3">Example 3</a>.
</p>
<h2>Surface Linking Concepts</h2>
<p>
<ul>
<li>A group of surfaces linked together are called a <code>Link Set</code>. A
<code>Link Set</code> is called by a positive integer number.</li>
<li>There may be more than one <code>Link Set</code> at a time used
with Ardour.</li>
<li>Each surface inside a <code>Link Set</code> has a <code>Link Id</code>.</li>
<li>The <code>Link ID</code> is a positive integer numbering consecutive
surfaces starting from 1 for the left most and going up to the right. So
if there are three surfaces in a <code>Link Set</code>, The left surface
will have a <code>Link Id</code> of <em>1</em>, the middle surface will
have a <code>Link Id</code> of <em>2</em> and the right surface will
have a <code>Link Id</code> of <em>3</em>.</li>
<li>There may not be skipped <code>Link Ids</code>. If there are a
surface 1 and 3, there must also be a surface 2. Surface 1 must always
exist. If any surface is missing, the track names will indicate the
<code>Link Id</code> of the first device missing.</li>
<li>In most things, surfaces are separate and can do things independently.
<ul>
<li>Each surface can have a different <code>Gain Mode</code></li>
<li>Each surface has it's own <code>Bank Size</code></li>
<li>Each surface has it's own <code>Feedback</code></li>
<li>Each surface has it's own <em>Expanded Strip</em></li>
</ul>
However, some things are shared by all surfaces in a <code>Link Set</code>:
<ul>
<li>Banking is done as a unit and each surface bank start is
determined by the <code>Link Set</code>. Any surface can
<em>Bank Up</em> or <em>Bank Down</em>.</li>
<li>All surfaces share the same <em>strip types</em>. Setting
<em>Strip Types</em> in any one surface sets it for the whole
<code>Link Set</code>.</li>
</ul>
</li>
</ul>
</p>
<h2>Setting Up a Link Set</h2>
<p>
There are only two OSC commands needed to set up a <code>Link Set</code>:
</p>
<table class="dl">
<tr><th><kbd class="osc">/link/set <em>linkset</em> <em>linkid</em></kbd></th>
<td>Where <em>linkset</em> is the Link Set this surface will be added to and
<em>linkid</em> is the Link Id of this surface.</td></tr>
<tr><th><kbd class="osc">/link/bank_size <em>linkset</em> <em>banksize</em></kbd></th>
<td>Where <em>linkset</em> is the Link Set this surface will be added to and
<em>banksize</em> is the target bank size for this Link Set. This Link Set
will not operate unless the total strip numbers is <em>banksize</em>.</td></tr>
</table>
<p>
It is also possible to send link set and ID values as part of a
<code>/set_surface</code> command.
<kbd class="osc">/set_surface <em>bank_size</em> <em>strip_types</em>
<em>feedback</em> <em>fadermode</em> <em>send_page_size</em> <em>plugin_page_size</em>
<em>port</em> <em>linkset</em> <em>linkid</em></kbd>
</p>
<p> The <code>/link/bank_size</code> command is optional. Ardour defaults
to linking with auto sizing banks where the <code>Link Set</code>
bank size is determined by adding the available surface bank sizes
together. So long as the <code>Link Ids</code> are consecutive, the
<code>Link Set</code> is considered ready. If the surface wants to make
sure all surfaces are present before the <code>Link Set</code> is
ready, the <code>/link/bank_size</code> command will not allow the
<code>Link Set</code> to be ready until the surface bank sizes add up
to the <code>Link Set's</code> bank size.
</p>
<p>
Setting up a linked set of surfaces is a simple as choosing a number
for the <code>Link Set</code>, <em>1</em> will work fine if there is
only one linked set of surfaces, and giving each surface a <code>
Link Id</code>. This can be done with the same method as the <code>
/set_surface</code> command is sent or by having each surface send
the <code>/link/set</code> command. As with other commands, the first
parameter (linkset) may be sent inline: <code>/link/set/1 <em>linkid</em></code>
for those surfaces unable to send multi parameter OSC messages.
</p>
<h2>Example Multi Device Surfaces</h2>
<h3>Example 1</h3>
<p>
Assuming two devices, the left device has 8 strips and very little
else on it's main page or tab. It may have secondary pages or tabs or
a physical control section to access the extra selected strip controls
like send levels or plugin controls. The right device has only 6
strips because it also has Master and Monitor channel as well as
transport controls. It also has a select section. As part of it's
Global controls it has a Bank up and a bank down button. (there is
nothing stopping the left surface from also having banking buttons)
The left surface will be linkid <em>1</em> and the right surface will be
linkid <em>2</em>. For this example the linkset will be <em>1</em>.
</p>
<p>
Device <em>1</em> will have a "Connect" button that will send:
<code>/set_surface iiiiiiiii 8 159 8323 0 0 0 0 1 1</code> and the second
device will have two buttons. One will be a "Connect" button that
sends: <code>/set_surface iiii 6 159 8403 0</code> and the other
will be a "Link" button that will send: <code>/link/set ii 1 2</code>.
These devices use two different methods of setup both to illustrate
their use and because this will allow them to be used unlinked. Device
<em>1</em> even as a linked device will operate on it's own as a one
device <code>Link Set</code>. However, device <em>2</em> would show
an error condition if device <em>1</em> is not present so we have a
seperate "Link" button. This is an optional way of doing things and
both could use just one "Connect" button or both could have a separate
"Link" button. Device <em>2</em> could also have an "Unlink" button
that sends: <code>/link/set ii 0 0</code> if desired.
</p>
<p>
To use these two devices as one, the "Connect" button on both devices and
the "Link" button on the second device are pressed in any order. The two
surfaces will now act as one surface with 14 bankable strips.
</p>
<h3>Example 2</h3>
<p>
This example will be more complex and use a total of five devices. The
first three devices will form Link Set <em>1</em> and have 8 strips each.
They are similar to the left device above, but will only show "input"
strips. The last two devices will form Link Set <em>2</em>. Device <em>1</em>
will be similar to the first three devices with 8 strips and the other
will be similar to the 6 strip device in example 1 having Master and
transport controls as well. The devices in Link Set 2 will be set up
to only use bus and VCA strips and so don't need to include record
enable buttons etc. It is expected that all devices have
banking buttons, but at least one surface in each Link Set would have
to have them.
</p>
<p>
Devices 1 to 3 (from left to right) would each have a "Connect"
button that sends: <code>/set_surface iiiiiiiii 8 3 8323 0 0 0 0 1 n</code>
where <em>n</em> is the position or Link Id of that surface from 1 to
3, left to right. Device 4 would use: <code>/set_surface iiiiiiiii 8
156 8323 0 0 0 0 2 1</code> and device 5 would use: <code>/set_surface
iiiiiiiii 6 156 8403 0 0 0 0 2 2</code>.
</p>
<p>
As before, the "Connect" on each surface is pressed in any order and
the resulting surface would have 24 input strips where the banking
buttons on any of the first three surfaces would bank those three
surfaces 24 strips at a time through the input strips (assuming more
than 24 input strips are available). The last two strips would form
a master and bus section with 14 bus only strips that will bank through
the bus strips (assuming more than 14 bus strips). This combined
surface would have 38 strips (plus Master) all together.
</p>
<h2 id="example3">Example 3</h2>
<p>
In this example there are two devices as in example 1. However, the
goal is to have only input strips on the left device and only bus strips,
Master and transport controls on the right device. In this case linking
is not needed. The left device would use a "Connect" button that sent:
<code>/set_surface iiii 8 3 8323 0</code> and the right device would
use a "Connect" button that sent: <code>/set_surface iiii 6 156 8403 0</code>.
The banking buttons on the left surface would bank through the input
channels and the banking buttons on the right surface would bank
through the buses and VCAs. As this example does not use Ardours OSC
linking commands, it will also work with Ardour versions 5.0 to 5.12.
</p>

View File

@ -25,6 +25,8 @@
<td>Asks for a list of descriptors for plug-in <em>piid</em> on strip <em>ssid</em></td></tr> <td>Asks for a list of descriptors for plug-in <em>piid</em> on strip <em>ssid</em></td></tr>
<tr><th><kbd class="osc">/set_surface</kbd></th> <tr><th><kbd class="osc">/set_surface</kbd></th>
<td>Ask for the current surface setting. Reply is in the same form as setting the surface would be.</td></tr> <td>Ask for the current surface setting. Reply is in the same form as setting the surface would be.</td></tr>
<tr><th><kbd class="osc">/surface/list</kbd></th>
<td>Print a list of known surfaces and Link Sets to the log window.</td></tr>
</table> </table>
<h3>A list of strips</h3> <h3>A list of strips</h3>
@ -181,4 +183,21 @@
access to plug-ins, the /select/plugin/ set of commands will handle most access to plug-ins, the /select/plugin/ set of commands will handle most
needs. needs.
</p> </p>
<h3>Obtaining a list of surfaces Ardour knows about</h3>
<p>
Ardour can work with more than one OSC control surface at a time.
Sometimes it is useful to know the information stored about all
surfaces. Sending <code>/surface/list</code> from any surface or selecting:
<kbd class="menu">Print surface information to Log window</kbd> from
the <kbd class="menu">Debug</kbd> dropdown in the OSC setup dialog,
will list all the information Ardour uses to calculate the feedback
it sends. The Log window can be opened from the menu with
<kbd class="option">Window &gt; Log</kbd>.
This would be useful information to include with any OSC
related Bug report. The output is printed in this format:
</p>
<p>
<img alt="Surface Output"
src="/images/osc-surface-log.png">
</p>

View File

@ -12,11 +12,9 @@
Many OSC devices get their IP from a DHCP making it difficult to set Many OSC devices get their IP from a DHCP making it difficult to set
an IP in Ardour's OSC settings. Therefore, most of the settings are an IP in Ardour's OSC settings. Therefore, most of the settings are
<em>default</em> settings. Values are set and the next OSC surface to <em>default</em> settings. Values are set and the next OSC surface to
send an OSC message to Ardour will use those settings. An OSC send an OSC message to Ardour will use those settings. Any change to a
surface that has previously sent a message to Ardour will retain the setting will reset all
settings it already had. Any change to a setting will reset all device settings. The use of <em>/set_surface</em> will override all
device settings. A <em>/refresh</em> message will set that device to
any new settings. The use of <em>/set_surface</em> will override all
settings except <em>Port Mode</em>. <em>Port Mode</em> affects all settings except <em>Port Mode</em>. <em>Port Mode</em> affects all
connected surfaces and so all surfaces must use either the set manual connected surfaces and so all surfaces must use either the set manual
port or send OSC messages from the same port they expect to receive port or send OSC messages from the same port they expect to receive
@ -102,9 +100,11 @@
Sets the faders (and sends faders) feedback math to position where a Sets the faders (and sends faders) feedback math to position where a
value between 0 and 1 represents the fader position of the same fader value between 0 and 1 represents the fader position of the same fader
in the mixer GUI or dB where the feedback from fader movement will be in the mixer GUI or dB where the feedback from fader movement will be
returned as a dB value. When the Gain Mode is set to position, the returned as a dB value. When the Gain Mode is set to position, there
are also options to send the gain in dB either to the channel name,
/*/name feedback for the channel will show dB values in text while the /*/name feedback for the channel will show dB values in text while the
fader is being adjusted and then return the name text. fader is being adjusted and then return the name text. It can also be
set to send both position and gain or just position.
</p> </p>
<h4>Debug:</h4> <h4>Debug:</h4>
@ -117,7 +117,10 @@
<p> <p>
For debugging purposes this allows logging either all OSC messages For debugging purposes this allows logging either all OSC messages
Ardour receives or invalid messages received or none. Ardour receives or invalid messages received or none. The last option:
<kbd class="menu">Print surface information to Log window</kbd> prints
the internal information that Ardour uses to create feedback for all
surfaces Ardour knows about.
</p> </p>
<h4>Preset:</h4> <h4>Preset:</h4>

View File

@ -1792,6 +1792,14 @@ uri: using-control-surfaces/controlling-ardour-with-osc/osc-setup-dialog
part: subchapter part: subchapter
--- ---
---
title: OSC&#58; Linking Surfaces
include: osc58-linking-surfaces.html
link: osc58-linking-surfaces
uri: using-control-surfaces/controlling-ardour-with-osc/linking-surfaces
part: subchapter
---
--- ---
title: OSC&#58; Querying Ardour title: OSC&#58; Querying Ardour
include: osc58-querying-ardour.html include: osc58-querying-ardour.html
@ -1824,6 +1832,14 @@ uri: using-control-surfaces/controlling-ardour-with-osc/jog-modes
part: subchapter part: subchapter
--- ---
---
title: OSC&#58; Custom Strip Lists
include: osc58-custom-strips.html
link: osc58-custom-strips
uri: using-control-surfaces/controlling-ardour-with-osc/custom-strips
part: subchapter
---
--- ---
title: OSC&#58; Automation title: OSC&#58; Automation
include: osc58-automation.html include: osc58-automation.html

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB