#pragma once #include #include class audio_frame; class midi_tick { public: midi_tick(int64_t in_ticks) : ticks(in_ticks) { } explicit midi_tick(const audio_frame& in_frame); [[nodiscard]] audio_frame to_audio_frame() const; [[nodiscard]] int64_t get_ticks() const { return ticks; } operator int64_t() const { return ticks; } private: int64_t ticks; }; class audio_frame { public: audio_frame(int64_t in_frames) : frames(in_frames) { } explicit audio_frame(const midi_tick& in_tick); [[nodiscard]] midi_tick to_midi_tick() const; [[nodiscard]] int64_t get_frames() const { return frames; } operator int64_t() const { return frames; } auto operator<=>(const audio_frame&) const = default; audio_frame operator+=(const audio_frame& in_frame) { frames += in_frame.frames; return *this; } audio_frame operator-=(const audio_frame& in_frame) { frames -= in_frame.frames; return *this; } private: int64_t frames; };