Files
khodowany 82349cf897
ci / checks (push) Failing after 23m37s
Playback
2026-10-05 23:41:11 -05:00

50 lines
1.7 KiB
C++

#pragma once
#include <cstdint>
#include <expected>
#include <memory>
#include <mutex>
#include <future>
#include <optional>
#include <filesystem>
#include <boost/asio/thread_pool.hpp>
#include <modulus.hpp>
#include <sonus.hpp>
#include <vamp_zero/config.hpp>
#include <vamp_zero/types.hpp>
#include <vamp_zero/score_loader.hpp>
#include <vamp_zero/performance.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;
auto tick(vamp_zero::app_state const &state, vamp_zero::score_load_state const &loaded, std::filesystem::path const &assets) -> std::optional<std::expected<void, modulus::error>>;
auto position(vamp_zero::score_document const &score, std::uint32_t bpm) const -> std::optional<vamp_zero::performance_position>;
private:
vamp_zero::audio_config config_{};
sonus::engine engine_;
mutable std::mutex mutex_{};
boost::asio::thread_pool worker_{1};
std::future<std::expected<sonus::prepared_transport, modulus::error>> preparation_{};
std::uint64_t preparing_session_{};
std::shared_ptr<vamp_zero::catalog const> preparing_catalog_{};
std::optional<std::uint64_t> attempted_session_{};
std::shared_ptr<vamp_zero::catalog const> catalog_{};
sonus::transport_session playback_{};
std::bool_t reported_{true};
};
auto create_audio_controller(vamp_zero::audio_config const &config) -> std::expected<std::unique_ptr<vamp_zero::audio_controller>, modulus::error>;
}