Mercurial > hg > svcore
comparison base/RealTime.cpp @ 1040:a1cd5abcb38b cxx11
Introduce and use a samplerate type
author | Chris Cannam |
---|---|
date | Wed, 04 Mar 2015 12:01:04 +0000 |
parents | cc27f35aa75c |
children | b8a788c9a6f1 |
comparison
equal
deleted
inserted
replaced
1039:b14064bd1f97 | 1040:a1cd5abcb38b |
---|---|
454 | 454 |
455 if (rTotal == 0) return 0.0; | 455 if (rTotal == 0) return 0.0; |
456 else return lTotal/rTotal; | 456 else return lTotal/rTotal; |
457 } | 457 } |
458 | 458 |
459 static RealTime | |
460 frame2RealTime_i(sv_frame_t frame, sv_frame_t iSampleRate) | |
461 { | |
462 if (frame < 0) return -frame2RealTime_i(-frame, iSampleRate); | |
463 | |
464 RealTime rt; | |
465 sv_frame_t sec = frame / iSampleRate; | |
466 rt.sec = int(sec); | |
467 frame -= sec * iSampleRate; | |
468 rt.nsec = (int)(((double(frame) * 1000000.0) / double(iSampleRate)) * 1000.0); | |
469 return rt; | |
470 } | |
471 | |
459 sv_frame_t | 472 sv_frame_t |
460 RealTime::realTime2Frame(const RealTime &time, int sampleRate) | 473 RealTime::realTime2Frame(const RealTime &time, sv_samplerate_t sampleRate) |
461 { | 474 { |
462 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); | 475 if (time < zeroTime) return -realTime2Frame(-time, sampleRate); |
463 double s = time.sec + double(time.nsec + 1) / 1000000000.0; | 476 double s = time.sec + double(time.nsec + 1) / 1000000000.0; |
464 return sv_frame_t(s * double(sampleRate)); | 477 return sv_frame_t(s * sampleRate); |
465 } | 478 } |
466 | 479 |
467 RealTime | 480 RealTime |
468 RealTime::frame2RealTime(sv_frame_t frame, int sampleRate) | 481 RealTime::frame2RealTime(sv_frame_t frame, sv_samplerate_t sampleRate) |
469 { | 482 { |
470 if (frame < 0) return -frame2RealTime(-frame, sampleRate); | 483 if (sampleRate == double(int(sampleRate))) { |
471 | 484 return frame2RealTime_i(frame, int(sampleRate)); |
472 RealTime rt; | 485 } |
473 rt.sec = int(frame / sv_frame_t(sampleRate)); | 486 |
474 frame -= rt.sec * sv_frame_t(sampleRate); | 487 double sec = double(frame) / sampleRate; |
475 rt.nsec = (int)(((double(frame) * 1000000.0) / long(sampleRate)) * 1000.0); | 488 return fromSeconds(sec); |
476 return rt; | |
477 } | 489 } |
478 | 490 |
479 const RealTime RealTime::zeroTime(0,0); | 491 const RealTime RealTime::zeroTime(0,0); |
480 | 492 |