38 lines
1005 B
C++
38 lines
1005 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <expected>
|
|
#include <memory>
|
|
#include <mutex>
|
|
|
|
#include <modulus.hpp>
|
|
#include <sonus.hpp>
|
|
|
|
#include <vamp_zero/config.hpp>
|
|
#include <vamp_zero/types.hpp>
|
|
|
|
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<std::unique_ptr<vamp_zero::audio_controller>, modulus::error>;
|
|
|
|
}
|