emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/osc 48d043e: Fix precision of osc-read-timetag


From: Mario Lang
Subject: [elpa] externals/osc 48d043e: Fix precision of osc-read-timetag
Date: Wed, 31 Mar 2021 04:14:48 -0400 (EDT)

branch: externals/osc
commit 48d043e96006e3c0d84848ab506e5590ef8e42a3
Author: Mario Lang <mlang@blind.guru>
Commit: Mario Lang <mlang@blind.guru>

    Fix precision of osc-read-timetag
---
 osc.el | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/osc.el b/osc.el
index daa0421..f676554 100644
--- a/osc.el
+++ b/osc.el
@@ -95,8 +95,7 @@
 (defun osc-timetag (time)
   (cl-multiple-value-bind (high low usec psec) (time-convert time 'list)
     (concat (osc-int32 (+ 2208988800 (ash high 16) low))
-           (osc-int32 (round (* (+ (* usec (expt 10.0 -6))
-                                   (* psec (expt 10.0 -12)))
+           (osc-int32 (round (* (+ (* usec 1e-06) (* psec 1e-12))
                                 (1- (ash 1 32))))))))
 
 ;;;###autoload
@@ -141,6 +140,21 @@ string to a vector if embedding in another OSC message is 
what you want."
   "Send an OSC message from PROCESS to the specified PATH with ARGS."
   (process-send-string process (apply #'osc-make-message path args)))
 
+(defconst osc-bundle-tag (osc-string "#bundle"))
+(defconst osc-timetag-now (concat (osc-int32 0) (osc-int32 1)))
+
+(defun osc-make-bundle (time &rest messages)
+  "Make a bundle with timetag TIME and MESSAGES as payload."
+  (apply #'concat osc-bundle-tag (if time (osc-timetag time) osc-timetag-now)
+        (mapcar (lambda (message)
+                  (concat (osc-int32 (length message)) message))
+                messages)))
+
+;;;###autoload
+(defun osc-send-bundle (process time &rest messages)
+  "Send a bundle to PROCESS with timetag TIME and MESSAGES as payload."
+  (process-send-string process (apply #'osc-make-bundle path args)))
+
 (defun osc-read-string ()
   (let ((pos (point)) string)
     (while (not (= (following-char) 0)) (forward-char 1))
@@ -208,10 +222,8 @@ string to a vector if embedding in another OSC message is 
what you want."
         (1+ (/ f (expt 2.0 52))))))))
 
 (defun osc-read-timetag ()
-  (let ((secs (osc-read-int32))
-       (frac (osc-read-int32)))
-    (time-convert (+ (- secs 2208988800)
-                    (/ (float frac) (1- (ash 1 32)))))))
+  (time-add (time-convert (- (osc-read-int32) 2208988800))
+           (time-convert (cons (osc-read-int32) (ash 1 32)))))
 
 (defun osc-server-set-handler (server path handler)
   "Set HANDLER for PATH on SERVER.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]