You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2KB

  1. #if!defined CONVERSIONS_HPP
  2. #define CONVERSIONS_HPP
  3. #include <chrono>
  4. inline std::chrono::duration<float> nanosecondsToSeconds(std::chrono::nanoseconds const time)
  5. {
  6. return std::chrono::duration_cast<std::chrono::duration<float>>(time);
  7. }
  8. inline std::chrono::nanoseconds secondsToNanoseconds(std::chrono::duration<float> const time)
  9. {
  10. return std::chrono::duration_cast<std::chrono::nanoseconds>(time);
  11. }
  12. inline float nanosecondsToFrequency(std::chrono::nanoseconds const time)
  13. {
  14. auto const timeInSeconds = nanosecondsToSeconds(time);
  15. return 1.f / timeInSeconds.count();
  16. }
  17. inline unsigned int nanosecondToBpm(std::chrono::nanoseconds const time)
  18. {
  19. auto const sixty = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::seconds{60});
  20. return (sixty / time);
  21. }
  22. inline unsigned int frequencyToBpm(float const frequency)
  23. {
  24. auto const cycleDurationInSeconds = 1.f / frequency;
  25. return static_cast<unsigned int>(60.f / cycleDurationInSeconds);
  26. }
  27. inline float bpmToFrequency(unsigned int bpm)
  28. {
  29. return 60.f / static_cast<float>(bpm);
  30. }
  31. inline std::chrono::nanoseconds bpmToNanoseconds(unsigned int bpm)
  32. {
  33. auto const sixty = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::seconds{60});
  34. return sixty / bpm;
  35. }
  36. #endif