shithub: orca

Download patch

ref: 86e8a52ab36b91b97617a76e2913d55e39adb584
parent: 0a224fa2c57bea021468d96ccaf1968e89dc2c47
author: cancel <cancel@cancel.fm>
date: Fri Dec 21 06:27:56 EST 2018

Add --strict-timing as a commandline option

--- a/tui_main.c
+++ b/tui_main.c
@@ -41,6 +41,10 @@
       "        Set MIDI to be sent via OSC formatted for Plogue Bidule.\n"
       "        The path argument is the path of the Plogue OSC MIDI device.\n"
       "        Example: /OSC_MIDI_0/MIDI\n"
+      "\n"
+      "    --strict-timing\n"
+      "        Reduce the timing jitter of outgoing MIDI and OSC messages.\n"
+      "        Uses more CPU time.\n"
       );
   // clang-format on
 }
@@ -1705,6 +1709,7 @@
   Argopt_osc_server,
   Argopt_osc_port,
   Argopt_osc_midi_bidule,
+  Argopt_strict_timing,
 };
 
 int main(int argc, char** argv) {
@@ -1714,11 +1719,13 @@
       {"osc-server", required_argument, 0, Argopt_osc_server},
       {"osc-port", required_argument, 0, Argopt_osc_port},
       {"osc-midi-bidule", required_argument, 0, Argopt_osc_midi_bidule},
+      {"strict-timing", no_argument, 0, Argopt_strict_timing},
       {NULL, 0, NULL, 0}};
   char* input_file = NULL;
   int margin_thickness = 2;
   char const* osc_hostname = NULL;
   char const* osc_port = NULL;
+  bool strict_timing = false;
   Midi_mode midi_mode;
   midi_mode_init(&midi_mode);
   for (;;) {
@@ -1748,6 +1755,9 @@
     case Argopt_osc_midi_bidule: {
       midi_mode_set_osc_bidule(&midi_mode, optarg);
     } break;
+    case Argopt_strict_timing: {
+      strict_timing = true;
+    } break;
     case '?':
       usage();
       return 1;
@@ -1905,55 +1915,55 @@
         doupdate();
       double secs_to_d = ged_secs_to_deadline(&ged_state);
       int new_timeout;
-#if 1
-      if (secs_to_d < ms_to_sec(0.5)) {
-        new_timeout = 0;
-      } else if (secs_to_d < ms_to_sec(1.5)) {
-        new_timeout = 0;
-      } else if (secs_to_d < ms_to_sec(3.0)) {
-        new_timeout = 1;
-      } else if (secs_to_d < ms_to_sec(5.0)) {
-        new_timeout = 2;
-      } else if (secs_to_d < ms_to_sec(7.0)) {
-        new_timeout = 3;
-      } else if (secs_to_d < ms_to_sec(9.0)) {
-        new_timeout = 4;
-      } else if (secs_to_d < ms_to_sec(11.0)) {
-        new_timeout = 5;
-      } else if (secs_to_d < ms_to_sec(13.0)) {
-        new_timeout = 6;
-      } else if (secs_to_d < ms_to_sec(15.0)) {
-        new_timeout = 7;
-      } else if (secs_to_d < ms_to_sec(25.0)) {
-        new_timeout = 12;
-      } else if (secs_to_d < ms_to_sec(50.0)) {
-        new_timeout = 20;
-      } else if (secs_to_d < ms_to_sec(100.0)) {
-        new_timeout = 40;
+      if (strict_timing) {
+        if (secs_to_d < ms_to_sec(0.5)) {
+          new_timeout = 0;
+        } else if (secs_to_d < ms_to_sec(1.5)) {
+          new_timeout = 0;
+        } else if (secs_to_d < ms_to_sec(3.0)) {
+          new_timeout = 1;
+        } else if (secs_to_d < ms_to_sec(5.0)) {
+          new_timeout = 2;
+        } else if (secs_to_d < ms_to_sec(7.0)) {
+          new_timeout = 3;
+        } else if (secs_to_d < ms_to_sec(9.0)) {
+          new_timeout = 4;
+        } else if (secs_to_d < ms_to_sec(11.0)) {
+          new_timeout = 5;
+        } else if (secs_to_d < ms_to_sec(13.0)) {
+          new_timeout = 6;
+        } else if (secs_to_d < ms_to_sec(15.0)) {
+          new_timeout = 7;
+        } else if (secs_to_d < ms_to_sec(25.0)) {
+          new_timeout = 12;
+        } else if (secs_to_d < ms_to_sec(50.0)) {
+          new_timeout = 20;
+        } else if (secs_to_d < ms_to_sec(100.0)) {
+          new_timeout = 40;
+        } else {
+          new_timeout = 50;
+        }
       } else {
-        new_timeout = 50;
+        if (secs_to_d < ms_to_sec(0.5)) {
+          new_timeout = 0;
+        } else if (secs_to_d < ms_to_sec(1.0)) {
+          new_timeout = 0;
+        } else if (secs_to_d < ms_to_sec(2.0)) {
+          new_timeout = 1;
+        } else if (secs_to_d < ms_to_sec(7.0)) {
+          new_timeout = 2;
+        } else if (secs_to_d < ms_to_sec(15.0)) {
+          new_timeout = 5;
+        } else if (secs_to_d < ms_to_sec(25.0)) {
+          new_timeout = 10;
+        } else if (secs_to_d < ms_to_sec(50.0)) {
+          new_timeout = 20;
+        } else if (secs_to_d < ms_to_sec(100.0)) {
+          new_timeout = 40;
+        } else {
+          new_timeout = 50;
+        }
       }
-#else
-      if (secs_to_d < ms_to_sec(0.5)) {
-        new_timeout = 0;
-      } else if (secs_to_d < ms_to_sec(1.0)) {
-        new_timeout = 0;
-      } else if (secs_to_d < ms_to_sec(2.0)) {
-        new_timeout = 1;
-      } else if (secs_to_d < ms_to_sec(7.0)) {
-        new_timeout = 2;
-      } else if (secs_to_d < ms_to_sec(15.0)) {
-        new_timeout = 5;
-      } else if (secs_to_d < ms_to_sec(25.0)) {
-        new_timeout = 10;
-      } else if (secs_to_d < ms_to_sec(50.0)) {
-        new_timeout = 20;
-      } else if (secs_to_d < ms_to_sec(100.0)) {
-        new_timeout = 40;
-      } else {
-        new_timeout = 50;
-      }
-#endif
       if (new_timeout != cur_timeout) {
         wtimeout(stdscr, new_timeout);
         cur_timeout = new_timeout;