summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-07-01 17:28:08 -0700
committerLen Ovens <len@ovenwerks.net>2016-07-01 17:28:08 -0700
commit55722a74fb8fae1814def23ff676251240d4723e (patch)
treee5c679d0b13b2d6ef94c09bd13ed65fb06fe3779 /libs
parent1874aa6acdd0b747cc529f3a881d96bcc7801ab7 (diff)
OSC: Change all time feedback to /position/<type>
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/osc/osc.h18
-rw-r--r--libs/surfaces/osc/osc_global_observer.cc39
2 files changed, 39 insertions, 18 deletions
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index cdc9400356..d828dffae7 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -115,21 +115,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
Sorted strips; // list of stripables for this surface
};
/*
- * Reminder of what strip_types there are
- *
- AudioTrack = 0x1 = [0]
- MidiTrack = 0x2 = [1]
- AudioBus = 0x4 = [2]
- MidiBus = 0x8 = [3]
- VCA = 0x10 = [4]
- MasterOut = 0x20 = [5]
- MonitorOut = 0x40 = [6]
- Auditioner = 0x80 = [7] skip don't look for.
- Selected = 0x100 = [8]
- Hidden = 0x200 = [9]
- OrderSet = 0x400,
- */
- /*
* feedback bits:
* [0] - Strips - buttons
* [1] - Strips - variables (pots/faders)
@@ -141,6 +126,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
* [7] - Send metering as dB or positional depending on gainmode
* [8] - Send metering as 16 bits (led strip)
* [9] - Send signal present (signal greater than -20dB)
+ * [10] - Send Playhead position as samples
+ * [11] - Send Playhead position as minutes seconds
+ * [12] - Send Playhead position like primary/secondary GUI clocks
*/
diff --git a/libs/surfaces/osc/osc_global_observer.cc b/libs/surfaces/osc/osc_global_observer.cc
index 5cbb61d3a4..68e18d5141 100644
--- a/libs/surfaces/osc/osc_global_observer.cc
+++ b/libs/surfaces/osc/osc_global_observer.cc
@@ -147,12 +147,12 @@ OSCGlobalObserver::tick ()
os << setw(2) << setfill('0') << timecode.minutes;
os << ':';
os << setw(2) << setfill('0') << timecode.seconds;
- os << '.';
+ os << ':';
os << setw(2) << setfill('0') << timecode.frames;
lo_message msg = lo_message_new ();
lo_message_add_string (msg, os.str().c_str());
- lo_send_message (addr, "/timecode", msg);
+ lo_send_message (addr, "/position/smpte", msg);
lo_message_free (msg);
}
if (feedback[5]) { // Bar beat enabled
@@ -171,7 +171,40 @@ OSCGlobalObserver::tick ()
lo_message msg = lo_message_new ();
lo_message_add_string (msg, os.str().c_str());
- lo_send_message (addr, "/bar_beat", msg);
+ lo_send_message (addr, "/position/bbt", msg);
+ lo_message_free (msg);
+ }
+ if (feedback[11]) { // minutes/seconds enabled
+ framepos_t left = now_frame;
+ int hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
+ left -= (framecnt_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ int mins = (int) floor (left / (session->frame_rate() * 60.0f));
+ left -= (framecnt_t) floor (mins * session->frame_rate() * 60.0f);
+ int secs = (int) floor (left / (float) session->frame_rate());
+ left -= (framecnt_t) floor ((double)(secs * session->frame_rate()));
+ int millisecs = floor (left * 1000.0 / (float) session->frame_rate());
+
+ // Min/sec mode: Hours/Minutes/Seconds/msec
+ ostringstream os;
+ os << setw(2) << setfill('0') << hrs;
+ os << ':';
+ os << setw(2) << setfill('0') << mins;
+ os << ':';
+ os << setw(2) << setfill('0') << secs;
+ os << '.';
+ os << setw(3) << setfill('0') << millisecs;
+
+ lo_message msg = lo_message_new ();
+ lo_message_add_string (msg, os.str().c_str());
+ lo_send_message (addr, "/position/time", msg);
+ lo_message_free (msg);
+ }
+ if (feedback[10]) { // samples
+ ostringstream os;
+ os << now_frame;
+ lo_message msg = lo_message_new ();
+ lo_message_add_string (msg, os.str().c_str());
+ lo_send_message (addr, "/position/samples", msg);
lo_message_free (msg);
}
_last_frame = now_frame;