Mercurial > hg > svcore
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; }