7#include <au/units/minutes.hh>
10namespace zrythm::units
26struct Sample : au::UnitImpl<au::Dimension<SampleBaseDim>>
28 static constexpr const char label[] =
"sample";
30constexpr auto sample = au::SingularNameFor<Sample>{};
31constexpr auto samples = au::QuantityMaker<Sample>{};
34using sample_t = au::QuantityI64<Sample>;
35using sample_u32_t = au::QuantityU32<Sample>;
36using sample_u64_t = au::QuantityU64<Sample>;
37using precise_sample_t = au::QuantityD<Sample>;
40struct Tick : au::UnitImpl<au::Dimension<TickBaseDim>>
42 static constexpr const char label[] =
"tick";
44constexpr auto tick = au::SingularNameFor<Tick>{};
45constexpr auto ticks = au::QuantityMaker<Tick>{};
48using tick_t = au::QuantityI64<Tick>;
49using precise_tick_t = au::QuantityD<Tick>;
54 static constexpr const char label[] =
"channel";
56constexpr auto channel = au::SingularNameFor<ChannelCount>{};
57constexpr auto channels = au::QuantityMaker<ChannelCount>{};
60using channel_count_t = au::Quantity<ChannelCount, uint8_t>;
63constexpr tick_t PPQ = ticks (960);
66struct QuarterNote : decltype (Tick{} * au::mag<PPQ.in (units::ticks)> ())
68 static constexpr const char label[] =
"quarterNote";
70constexpr auto quarter_note = au::SingularNameFor<QuarterNote>{};
71constexpr auto quarter_notes = au::QuantityMaker<QuarterNote>{};
81struct BPM : decltype (QuarterNote{} / au::Minutes{})
83 static constexpr const char label[] =
"bpm";
85constexpr auto bpm = au::QuantityMaker<BPM>{};
86using bpm_t = au::QuantityD<BPM>;
89using SampleRate =
decltype (Sample{} / au::Seconds{});
90constexpr auto sample_rate = samples / au::second;
91using sample_rate_t = au::QuantityI<SampleRate>;
92using precise_sample_rate_t = au::QuantityD<SampleRate>;
95constexpr auto seconds = au::seconds;
96using precise_second_t = au::QuantityD<au::Seconds>;
100template <
typename U,
typename R>
101struct fmt::formatter<::au::Quantity<U, R>>
102 : ::au::QuantityFormatter<U, R, ::fmt::formatter>