@@ -0,0 +1,37 @@
|
||||
#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>;
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
#include <expected>
|
||||
#include <string>
|
||||
|
||||
@@ -44,11 +45,25 @@ struct control_config {
|
||||
std::string zero_cidr{"192.168.42.1/24"};
|
||||
};
|
||||
|
||||
struct audio_config {
|
||||
std::bool_t enabled{true};
|
||||
std::bool_t track_enabled{false};
|
||||
std::bool_t metronome_enabled{false};
|
||||
std::uint32_t metronome_bpm{120};
|
||||
std::uint32_t metronome_min_bpm{40};
|
||||
std::uint32_t metronome_max_bpm{240};
|
||||
std::uint32_t metronome_step{5};
|
||||
std::uint32_t beats_per_bar{4};
|
||||
std::float32_t master_volume{0.70F};
|
||||
std::float32_t metronome_volume{0.45F};
|
||||
};
|
||||
|
||||
struct config {
|
||||
modulus::config modulus{};
|
||||
vamp_zero::runtime_config runtime{};
|
||||
vamp_zero::database_config database{};
|
||||
vamp_zero::control_config control{};
|
||||
vamp_zero::audio_config audio{};
|
||||
luma::application_config display{.title = "Product Vamp"};
|
||||
};
|
||||
|
||||
|
||||
@@ -142,10 +142,21 @@ enum class app_mode {
|
||||
PRACTICE_SCORE,
|
||||
};
|
||||
|
||||
struct audio_state {
|
||||
std::bool_t track_enabled{false};
|
||||
std::bool_t metronome_enabled{false};
|
||||
std::uint32_t metronome_bpm{120};
|
||||
std::uint32_t metronome_min_bpm{40};
|
||||
std::uint32_t metronome_max_bpm{240};
|
||||
std::uint32_t metronome_step{5};
|
||||
std::bool_t tempo_editing{false};
|
||||
};
|
||||
|
||||
struct app_state {
|
||||
vamp_zero::library_state performance{};
|
||||
vamp_zero::practice_library practice{};
|
||||
vamp_zero::app_mode mode{vamp_zero::app_mode::MAIN_MENU};
|
||||
vamp_zero::audio_state audio{};
|
||||
std::size_t selected_main_menu_index{};
|
||||
std::size_t selected_song_index{};
|
||||
std::size_t selected_part_index{};
|
||||
|
||||
Reference in New Issue
Block a user