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