22struct Sample : au::UnitImpl<au::Dimension<SampleBaseDim>>
24 static constexpr const char label[] =
"sample";
26constexpr auto sample = au::SingularNameFor<Sample>{};
27constexpr auto samples = au::QuantityMaker<Sample>{};
30using sample_t = au::QuantityI64<Sample>;
31using sample_u32_t = au::QuantityU32<Sample>;
32using sample_u64_t = au::QuantityU64<Sample>;
33using precise_sample_t = au::QuantityD<Sample>;
36struct Tick : au::UnitImpl<au::Dimension<TickBaseDim>>
38 static constexpr const char label[] =
"tick";
40constexpr auto tick = au::SingularNameFor<Tick>{};
41constexpr auto ticks = au::QuantityMaker<Tick>{};
44using tick_t = au::QuantityI64<Tick>;
45using precise_tick_t = au::QuantityD<Tick>;
48constexpr tick_t PPQ = ticks (960);
53 static constexpr const char label[] =
"quarterNote";
55constexpr auto quarter_note = au::SingularNameFor<QuarterNote>{};
56constexpr auto quarter_notes = au::QuantityMaker<QuarterNote>{};
59using SampleRate =
decltype (Sample{} / au::Seconds{});
60constexpr auto sample_rate = samples / au::second;
61using sample_rate_t = au::QuantityI<SampleRate>;
62using precise_sample_rate_t = au::QuantityD<SampleRate>;
65constexpr auto seconds = au::seconds;
66using precise_second_t = au::QuantityD<au::Seconds>;
70template <
typename U,
typename R>
71struct fmt::formatter<::au::Quantity<U, R>>
72 : ::au::QuantityFormatter<U, R, ::fmt::formatter>