@@ -4,12 +4,18 @@
|
||||
#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>
|
||||
|
||||
|
||||
namespace vamp_zero {
|
||||
@@ -21,6 +27,7 @@ public:
|
||||
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>>;
|
||||
private:
|
||||
auto make_metronome_config(vamp_zero::app_state const &state) const -> sonus::metronome_config;
|
||||
vamp_zero::audio_config config_{};
|
||||
@@ -28,6 +35,13 @@ private:
|
||||
mutable std::mutex mutex_{};
|
||||
std::bool_t metronome_running_{false};
|
||||
std::uint32_t last_metronome_bpm_{};
|
||||
boost::asio::thread_pool worker_{1};
|
||||
std::future<std::expected<sonus::prepared_sequence, modulus::error>> preparation_{};
|
||||
std::uint64_t preparing_session_{};
|
||||
std::optional<std::uint64_t> attempted_session_{};
|
||||
std::shared_ptr<vamp_zero::catalogue const> catalog_{};
|
||||
sonus::playback_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>;
|
||||
|
||||
@@ -48,7 +48,7 @@ struct control_config {
|
||||
|
||||
struct audio_config {
|
||||
std::bool_t enabled{true};
|
||||
std::bool_t track_enabled{false};
|
||||
std::bool_t playback_enabled{false};
|
||||
std::bool_t metronome_enabled{false};
|
||||
std::uint32_t metronome_bpm{120};
|
||||
std::uint32_t metronome_min_bpm{40};
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <expected>
|
||||
#include <filesystem>
|
||||
|
||||
#include <modulus.hpp>
|
||||
#include <sonus.hpp>
|
||||
|
||||
#include <vamp_zero/types.hpp>
|
||||
|
||||
|
||||
namespace vamp_zero {
|
||||
|
||||
auto prepare_playback(vamp_zero::score_document const &score, std::filesystem::path const &assets, std::uint32_t bpm) -> std::expected<sonus::sample_sequence, modulus::error>;
|
||||
auto validate_playback_assets(vamp_zero::score_document const &score, std::filesystem::path const &assets) -> std::expected<void, modulus::error>;
|
||||
|
||||
}
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <vamp_zero/config.hpp>
|
||||
#include <vamp_zero/types.hpp>
|
||||
|
||||
|
||||
namespace vamp_zero {
|
||||
|
||||
class control_state {
|
||||
@@ -25,6 +24,7 @@ public:
|
||||
auto heartbeat() -> vamp_zero::app_state;
|
||||
auto refresh_connection() -> std::optional<vamp_zero::app_state>;
|
||||
auto set_observer(std::function<void(vamp_zero::app_state)> observer) -> void;
|
||||
auto finish_playback(std::uint64_t session, std::string error = {}, std::shared_ptr<vamp_zero::catalogue const> catalog = {}) -> void;
|
||||
private:
|
||||
auto pico_connected_locked() const -> std::bool_t;
|
||||
auto snapshot_locked() const -> vamp_zero::app_state;
|
||||
|
||||
@@ -128,7 +128,8 @@ enum class app_mode {
|
||||
};
|
||||
|
||||
struct audio_state {
|
||||
std::bool_t track_enabled{false};
|
||||
std::string playback_error{};
|
||||
std::bool_t playback_enabled{false};
|
||||
std::bool_t metronome_enabled{false};
|
||||
std::uint32_t metronome_bpm{120};
|
||||
std::uint32_t metronome_min_bpm{40};
|
||||
@@ -151,6 +152,7 @@ struct app_state {
|
||||
std::string active_part_id{};
|
||||
std::string active_practice_id{};
|
||||
std::size_t page_index{};
|
||||
std::uint64_t score_session{};
|
||||
std::uint64_t next_count{};
|
||||
std::uint64_t previous_count{};
|
||||
std::uint64_t select_count{};
|
||||
|
||||
@@ -38,6 +38,7 @@ public:
|
||||
auto stop() -> void;
|
||||
auto publish(vamp_zero::ui_state state) -> std::expected<void, modulus::error>;
|
||||
auto snapshot() const -> vamp_zero::ui_state;
|
||||
auto selected_score_loader() const -> std::shared_ptr<vamp_zero::score_loader>;
|
||||
private:
|
||||
std::shared_ptr<luma::application> application_;
|
||||
std::shared_ptr<vamp_zero::ui_runtime> runtime_;
|
||||
|
||||
Reference in New Issue
Block a user