diff base/RealTime.cpp @ 427:72ec275e458b

* Basic implementation of add and remove point in data editor * Improve resilience of frame - real-time - frame round-trip conversions
author Chris Cannam
date Mon, 16 Jun 2008 14:48:42 +0000
parents 65311fb86166
children beb2948baa77
line wrap: on
line diff
--- a/base/RealTime.cpp	Mon Jun 16 07:55:35 2008 +0000
+++ b/base/RealTime.cpp	Mon Jun 16 14:48:42 2008 +0000
@@ -304,17 +304,8 @@
 RealTime::realTime2Frame(const RealTime &time, unsigned int sampleRate)
 {
     if (time < zeroTime) return -realTime2Frame(-time, sampleRate);
-
-    // We like integers.  The last term is always zero unless the
-    // sample rate is greater than 1MHz, but hell, you never know...
-
-    long frame =
-	time.sec * sampleRate +
-	(time.msec() * sampleRate) / 1000 +
-	((time.usec() - 1000 * time.msec()) * sampleRate) / 1000000 +
-	((time.nsec - 1000 * time.usec()) * sampleRate) / 1000000000;
-
-    return frame;
+    double s = time.sec + double(time.nsec + 1) / 1000000000.0;
+    return long(s * sampleRate);
 }
 
 RealTime
@@ -325,7 +316,7 @@
     RealTime rt;
     rt.sec = frame / long(sampleRate);
     frame -= rt.sec * long(sampleRate);
-    rt.nsec = (int)(((float(frame) * 1000000) / long(sampleRate)) * 1000);
+    rt.nsec = (int)(((double(frame) * 1000000.0) / long(sampleRate)) * 1000.0);
     return rt;
 }