25struct Sample : au::UnitImpl<au::Dimension<SampleBaseDim>>
27 static constexpr const char label[] =
"sample";
29constexpr auto sample = au::SingularNameFor<Sample>{};
30constexpr auto samples = au::QuantityMaker<Sample>{};
33using sample_t = au::QuantityI64<Sample>;
34using sample_u32_t = au::QuantityU32<Sample>;
35using sample_u64_t = au::QuantityU64<Sample>;
36using precise_sample_t = au::QuantityD<Sample>;
39struct Tick : au::UnitImpl<au::Dimension<TickBaseDim>>
41 static constexpr const char label[] =
"tick";
43constexpr auto tick = au::SingularNameFor<Tick>{};
44constexpr auto ticks = au::QuantityMaker<Tick>{};
47using tick_t = au::QuantityI64<Tick>;
48using precise_tick_t = au::QuantityD<Tick>;
53 static constexpr const char label[] =
"channel";
55constexpr auto channel = au::SingularNameFor<ChannelCount>{};
56constexpr auto channels = au::QuantityMaker<ChannelCount>{};
59using channel_count_t = au::Quantity<ChannelCount, uint8_t>;
62constexpr tick_t PPQ = ticks (960);
67 static constexpr const char label[] =
"quarterNote";
69constexpr auto quarter_note = au::SingularNameFor<QuarterNote>{};
70constexpr auto quarter_notes = au::QuantityMaker<QuarterNote>{};
73using SampleRate =
decltype (Sample{} / au::Seconds{});
74constexpr auto sample_rate = samples / au::second;
75using sample_rate_t = au::QuantityI<SampleRate>;
76using precise_sample_rate_t = au::QuantityD<SampleRate>;
79constexpr auto seconds = au::seconds;
80using precise_second_t = au::QuantityD<au::Seconds>;
84template <
typename U,
typename R>
85struct fmt::formatter<::au::Quantity<U, R>>
86 : ::au::QuantityFormatter<U, R, ::fmt::formatter>