#pragma once #include #include #include #include #include #include #include #include namespace vamp_zero { class audio_controller { public: audio_controller(vamp_zero::audio_config config, sonus::engine engine); audio_controller(vamp_zero::audio_controller const&) = delete; auto operator=(vamp_zero::audio_controller const&) -> vamp_zero::audio_controller& = delete; ~audio_controller(); auto sync(vamp_zero::app_state const& state) -> void; private: auto make_metronome_config(vamp_zero::app_state const& state) const -> sonus::metronome_config; vamp_zero::audio_config config_{}; sonus::engine engine_; mutable std::mutex mutex_{}; std::bool_t metronome_running_{false}; std::uint32_t last_metronome_bpm_{}; }; auto create_audio_controller(vamp_zero::audio_config const& config) -> std::expected, modulus::error>; }