OSC: update OSC docs.

This commit is contained in:
Len Ovens 2016-07-16 17:44:14 -07:00
parent fa5c66e267
commit 1138f1dadb
5 changed files with 860 additions and 337 deletions

View File

@ -43,7 +43,15 @@ title: OSC Feedback With Ardour
<dt><kbd class="osc">/transport_stop <em>state</em></kbd></dt>
<dd>where <em>state</em> is an int/bool indicating if the transport is stopped or not.</dd>
</dl>
<p>
With feedback turned on, OSC control commands that try to change a
control that does not exist will get feedback that resets that control
to off. For example, sending a /strip/recenable to a buss will not work
and Ardour will try to turn the controller LED off in that case. Also
note that Pan operation may be limited by pan width in some cases.
That is with pan width at 100% (or -100%) there is no pan position
movement available.
</p>
<h2>List of OSC feedback messages</h2>
<h3>Feedback only</h3>
@ -55,7 +63,7 @@ title: OSC Feedback With Ardour
</p>
<p class="note">
See strip section below for info about ssid and wrapping it into the
path.
path. Also /master and /monitor support what the /strip does.
</p>
<dl class="bindings">
<dt><kbd class="osc">/strip/name <em>ssid</em> <em>track_name</em></kbd></dt>
@ -66,30 +74,36 @@ title: OSC Feedback With Ardour
<dd>where <em>meter</em> is a value repesenting the current audio level.
(the exact math used is determined by the feedback bits set)</dd>
<dt><kbd class="osc">/strip/signal <em>ssid</em> <em>signal</em></kbd></dt>
<dd>where <em>signal</em> is a float indicating the instantainious
<dd>where <em>signal</em> is a float indicating the instantaneous
audio level is -40dB or higher.</dd>
<dt><kbd class="osc">/timecode <em>time</em></kbd></dt>
<dd>where <em>time</em> is a string with the current play head time.</dd>
<dt><kbd class="osc">/bar_beat <em>beat</em></kbd></dt>
<dt><kbd class="osc">/position/smpte <em>time</em></kbd></dt>
<dd>where <em>time</em> is a string with the current play head time. Seconds as per smpte.</dd>
<dt><kbd class="osc">/position/bbt <em>beat</em></kbd></dt>
<dd>where <em>beat</em> is a string with the current play head bar/beat.</dd>
<dt><kbd class="osc">/position/time <em>time</em></kbd></dt>
<dd>where <em>time</em> is a string with the current play head time. Seconds are in milliseconds</dd>
<dt><kbd class="osc">/position/samples <em>samples</em></kbd></dt>
<dd>where <em>samples</em> is a string with the current play head position in samples.</dd>
<dt><kbd class="osc">/heartbeat <em>LED</em></kbd></dt>
<dd>where <em>LED</em> is a float that cycles 1/0 at 1 second intervals.</dd>
<dt><kbd class="osc">/record_tally <em>state</em></kbd></dt>
<dd>Some record enable is true or "ready to record"</dd>
<dd>Some record enable is true or "ready to record". For a "Recording" sign at studio door.</dd>
</dl>
<h3>Transport Control</h3>
<dl class="bindings">
<dt><kbd class="osc">/transport_stop <em>state</em></kbd></dt>
<dd></dd>
<dd><em>state</em> is true when transport is stopped</dd>
<dt><kbd class="osc">/transport_play <em>state</em></kbd></dt>
<dd></dd>
<dd><em>state</em> is true when transport speed is 1.0</dd>
<dt><kbd class="osc">/ffwd <em>state</em></kbd></dt>
<dd></dd>
<dd><em>state</em> is true when transport is moving forward but not at speed 1.0</dd>
<dt><kbd class="osc">/rewind <em>state</em></kbd></dt>
<dd></dd>
<dd><em>state</em> is true when transport speed is less than 0.0</dd>
<dt><kbd class="osc">/loop_toggle <em>state</em></kbd></dt>
<dd></dd>
<dd><em>state</em> is true when loop mode is true</dd>
<dt><kbd class="osc">/cancel_all_solos <em>state</em></kbd></dt>
<dd>Where <em>state</em> true indicates there are active solos that can be canceled.</dd>
</dl>
<h3>Recording control</h3>
@ -139,6 +153,10 @@ title: OSC Feedback With Ardour
</p>
<dl class="bindings">
<dt><kbd class="osc">/bank_up <em>LED</em></kbd></dt>
<dd>where <em>LED</em> is a bool that indicates another bank_up operation is possible.</dd>
<dt><kbd class="osc">/bank_down <em>LED</em></kbd></dt>
<dd>where <em>LED</em> is a bool that indicates another bank_down operation is possible.</dd>
<dt><kbd class="osc">/strip/name <em>ssid</em> <em>track_name</em></kbd></dt>
<dd>where <em>track_name</em> is a string representing the name of the track
(note there is no coresponding command to set the track name)</dd>
@ -164,7 +182,37 @@ title: OSC Feedback With Ardour
<dt><kbd class="osc">/strip/pan_stereo_position <em>ssid</em> <em>position</em></kbd></dt>
<dd>where <em>position</em> is a float ranging from 0 to 1 representing the actual pan position of the track</dd>
</dl>
<h3>Selection Operations</h3>
<p>
Selection feedback is the same as for strips, only the path changes
from <em>/strip</em> to <em>/select</em> and there is no <em>ssid</em>.
there are some extra feedback and commands that will be listed here.
</p>
<dl class="bindings">
<dt><kbd class="osc">/select/n_inputs <em>number</em></kbd></dt>
<dd>where <em>number</em> number of inputs for this strip</dd>
<dt><kbd class="osc">/select/n_outputs <em>number</em></kbd></dt>
<dd>where <em>number</em> number of outputs for this strip</dd>
<dt><kbd class="osc">/select/comment <em>text</em></kbd></dt>
<dd>where <em>text</em> is the strip comment</dd>
<dt><kbd class="osc">/select/solo_iso <em>state</em></kbd></dt>
<dd>where <em>state</em> is a bool/int representing the Actual solo isolate state of the track</dd>
<dt><kbd class="osc">/select/solo_safe <em>state</em></kbd></dt>
<dd>where <em>state</em> is a bool/int representing the actual solo safe/lock state of the track</dd>
<dt><kbd class="osc">/select/polarity <em>invert</em></kbd></dt>
<dd>where <em>invert</em> is a bool/int representing the actual polarity of the track</dd>
<dt><kbd class="osc">/select/pan_stereo_width <em>width</em></kbd></dt>
<dd>where <em>width</em> is a float ranging from -1 to 1 representing the actual pan width of the track</dd>
<dt><kbd class="osc">/select/send_gain", <em>sendid</em> <em>send_gain</em></kbd></dt>
<dd>where <em>sendid</em> = nth_send, <em>send_gain</em>is a float
ranging from -193 to +6 representing the actual gain in dB for the send</dd>
<dt><kbd class="osc">/select/send_fader", <em>sendid</em> <em>send_gain</em></kbd></dt>
<dd>where <em>sendid</em> = nth_send, <em>send_gain</em>is a float
ranging from 0 to 1023 representing the actual position for the send as a fader</dd>
<dt><kbd class="osc">/select/send_name <em>sendid</em> <em>send_name</em></kbd></dt>
<dd>where <em>send_name</em> is a string representing the name of the buss
this send goes to.</dd>
</dl>
<h3>Menu actions</h3>
<p>
Every single menu item in Ardour's GUI is accessible via OSC. However,

View File

@ -11,7 +11,7 @@ title: Calculating Feedback and Strip-types Values
</p>
<p>Both ,<em>feedback</em> and <em>strip-types</em> use bitsets to keep
track what they are doing. Any number in a computer is made out of
bits that are on or off, but we represtent them as normal base 10
bits that are on or off, but we represent them as normal base 10
numbers. Any one bit turned on will add a unique value to the
number as a whole. So for each kind of feedback or strip type
to be used, that number should be added to the total.</p>
@ -32,29 +32,36 @@ title: Calculating Feedback and Strip-types Values
2 - MidiTracks.
</li>
<li>
4 - AudioBusses.
4 - AudioBuses.
</li>
<li>
8 - MidiBusses.
8 - MidiBuses.
</li>
<li>
16 - VCAs.
</li>
<li>
2048 - Master.
32 - Master.
</li>
<li>
4096 - Monitor.
64 - Monitor.
</li>
<li>
16384 - Selected.
256 - Selected.
</li>
<li>
32768 - Hidden.
512 - Hidden.
</li>
</ul>
<p class="note">
Selected and Hidden bits are normally not needed as Ardour defaults to
showing Selected strips and not showing Hidden strips. The purpose of
these two flags is to allow showing only Selected strips or only
Hidden strips. Using Hidden with other flags will allow Hidden strips
to show inline with other strips.
</p>
<p>
Some handy numbers to use might be: 15 (all tracks and busses), 31
Some handy numbers to use might be: 15 (all tracks and buses), 31
(add VCAs to that). Master or Monitor strips are generally not useful
on a surface that has dedicated controls for these strips as there are
/master* and /monitor* commands already. However, on a surface with
@ -100,7 +107,13 @@ title: Calculating Feedback and Strip-types Values
will not work if the above option is turned on.
</li>
<li>
512 - Send signal present, true if level is higher than -20dB
512 - Send signal present, true if level is higher than -40dB
</li>
<li>
1024 - Send position in samples
</li>
<li>
2048 - Send position in time, hours, minutes, seconds and milliseconds
</li>
</ul>
<p>

View File

@ -0,0 +1,33 @@
---
layout: default
title: Parameter Types in OSC
---
<p>
An OSC message is laid out in this form:
</p>
<kbd>
/path/of/command type parameter
</kbd>
<p>
The type is there to indicate what the parameter is. This gives
the idea that parameter types are quite strict and if the command
requires an Integer <em>"i"</em> then the controller had better send it.
However, the checking of the parameter type is left to the receiving
software.
</p>
<p>
What this means in practical terms is that the surface can get away
with sending the wrong type of parameter. There are some places
where that just doesn't make sense. For example, a parameter that
is specified as a Float with a range of 0 to 1, could be sent as
an Integer, but would only have full scale and minimum value with
nothing in between. This is not much use for a fader, though ok for
a button.
</p>
<p>
There are a number of OSC controllers based on iOS and Android
tablets that only send or receive parameters as floats or text.
These controllers should have no problem sending bool or int values
as floats. Ardour will interpret the values as required.
</p>

View File

@ -0,0 +1,69 @@
---
layout: default
title: Selection/Feedback Expansion Considerations in OSC
---
<p>
Ardour does not send every possible feedback value for each channel.
It does send expanded information on the selected channel. There are
also extra commands for the selected strip. All the feedback and
select commands have their own path <em>/select</em>.
This means that for the selected channel the surface does not have to
keep track of the strip ID. The /select strip will follow the
"current mixer strip" in the GUI editor window.
</p>
<p>
There are two major uses for this:
<ol>
<li>Single strip control surfaces. Using
<em>/access_action Editor/select-next-route</em> or
<em>/access_action Editor/select-prev-route</em>
to step through the mixer strips.</li>
<li>Using a "Super strip" section of knobs to control parts
of the strip that are changed less often such as polarity, sends or
plugin parameters.</li>
</ol>
</p>
<p>
Selection in Ardour's OSC implementation are complicated by the
possibility of using more than one OSC controller at the same time.
User "A" may select strip 4 and use a selected controller to make
changes to that strip. User "B" may subsequently select strip 7 to
make changes on. This leaves user "A" making changes to strip 7
which they did not choose.
</p>
<p>
For this reason Ardour offers local expansion aside from the GUI
selection. Local expansion only affects the one OSC controller. GUI
selection is global and affects all controllers using GUI selection
as well as the GUI.
</p>
<p>
In general, in a one user situation where that one user may use either
the OSC surface or the GUI, using GUI based selection makes the most
sense. This is the default because this is the more common use.
</p>
<p>
When there is more than one operator, then expansion only is the
mode of choice. It may make sense for one of the surfaces to
use GUI selection where the operator is also using the GUI for some
things. However, the set up should be carefully analyzed for the
possibility of selection confusions. Expansion should be
considered the <em>safe</em> option.
</p>
<p>
It is always ok to use expansion on the surface even in a one
user scenario. This allows the user to use GUI and surface selection
for different uses.
</p>
<p>
It is also possible to use both if desired. /strip/select will ways
set the GUI select, but /strip/expand will set the select feedback
and commands locally without changing the GUI select. Another
/strip/expand or a /strip/select will override that expand command
and releasing the /strip/expand or /select/expand (setting it to 0 or
false) will set the /select set of commands/feedback back to whichever
strip the GUI has selected at that time. This could be used to switch
between the GUI select and the local expand to compare two strips
settings.
</p>