Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
rational_time.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <compare>
4#include <cstdint>
5#include <numeric>
6
7namespace pulp::timebase {
8
10 std::int64_t value = 0;
11 constexpr auto operator<=>(const SamplePosition&) const = default;
12};
13
15 std::uint64_t numerator = 48'000;
16 std::uint64_t denominator = 1;
17
18 constexpr bool valid() const noexcept {
19 return numerator != 0 && denominator != 0;
20 }
21
22 constexpr RationalRate normalized() const noexcept {
23 if (!valid())
24 return {0, 1};
25 const auto divisor = std::gcd(numerator, denominator);
26 return {numerator / divisor, denominator / divisor};
27 }
28
29 constexpr long double as_long_double() const noexcept {
30 return valid() ? static_cast<long double>(numerator) / static_cast<long double>(denominator)
31 : 0.0L;
32 }
33
34 constexpr auto operator<=>(const RationalRate&) const = default;
35};
36
37} // namespace pulp::timebase
Definition beat_division.hpp:11
Definition rational_time.hpp:14
constexpr long double as_long_double() const noexcept
Definition rational_time.hpp:29
constexpr bool valid() const noexcept
Definition rational_time.hpp:18
std::uint64_t numerator
Definition rational_time.hpp:15
constexpr auto operator<=>(const RationalRate &) const =default
std::uint64_t denominator
Definition rational_time.hpp:16
constexpr RationalRate normalized() const noexcept
Definition rational_time.hpp:22
Definition rational_time.hpp:9
constexpr auto operator<=>(const SamplePosition &) const =default
std::int64_t value
Definition rational_time.hpp:10