+28
-3
@@ -14,6 +14,10 @@
|
||||
#include <vamp_pico/screen.hpp>
|
||||
#include <vamp_zero/menu_view.hpp>
|
||||
#include <vamp_zero/page_control.hpp>
|
||||
#include <vamp_zero/notation.hpp>
|
||||
#include <vamp_zero/performance.hpp>
|
||||
#include <vamp_zero/score.hpp>
|
||||
#include <vamp_zero/color.hpp>
|
||||
|
||||
|
||||
namespace {
|
||||
@@ -133,12 +137,21 @@ auto preview(vamp_zero::app_state const &state, std::string const &name, vamp_pi
|
||||
auto context = image_context{};
|
||||
vamp_zero::draw_header(context, {0.0F, 0.0F, 1024.0F, 600.0F}, state);
|
||||
if (state.mode == vamp_zero::app_mode::PERFORMANCE_SCORE) {
|
||||
auto source = boost::json::parse(read_bytes(std::filesystem::path{VAMP_TEST_ASSETS_DIR} / "songs/autumn_leaves_electric.json"));
|
||||
auto path = std::filesystem::path{VAMP_TEST_ASSETS_DIR} / "songs" / std::string{source.at("presentation").at("pages").as_array().front().at("path").as_string()};
|
||||
auto source = vamp_zero::parse_notation_document(read_bytes(std::filesystem::path{VAMP_TEST_ASSETS_DIR} / "songs/autumn_leaves_electric.json"), "score.json");
|
||||
BOOST_REQUIRE(source);
|
||||
auto playback = vamp_zero::automatic(state.audio);
|
||||
auto const &pages = playback ? source->playback_pages : source->pages;
|
||||
auto const &page = pages.at(state.page_index);
|
||||
auto path = std::filesystem::path{VAMP_TEST_ASSETS_DIR} / "songs" / page.path;
|
||||
auto sheet = LoadImage(path.c_str());
|
||||
BOOST_REQUIRE(sheet.data);
|
||||
ImageDraw(&context.image, sheet, {0, 0, 976, 484}, {24, 98, 976, 484}, WHITE);
|
||||
UnloadImage(sheet);
|
||||
if (playback) {
|
||||
if (auto highlight = vamp_zero::measure_highlight(page, state.active_measure, {24, 98, 976, 484})) {
|
||||
context.stroke_rect(*highlight, 1.5F, vamp_zero::to_luma(vamp_style::accent));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
vamp_zero::draw_menu(context, {0.0F, 80.0F, 1024.0F, 520.0F}, state);
|
||||
}
|
||||
@@ -184,7 +197,7 @@ BOOST_AUTO_TEST_CASE(device_menu_rendering_uses_petaluma_and_fits_both_displays)
|
||||
auto catalog = std::make_shared<vamp_zero::catalog>();
|
||||
auto score = boost::json::parse(read_bytes(std::filesystem::path{VAMP_TEST_ASSETS_DIR} / "songs/autumn_leaves_electric.json"));
|
||||
auto title = std::string{score.at("presentation").at("title_image").as_string()};
|
||||
catalog->parts.push_back({.id = "electric", .title = "Autumn Leaves", .composer = "Joseph Kosma", .part = "Electric", .total_pages = score.at("presentation").at("pages").as_array().size(), .title_image = title, .song_id = "autumn_leaves"});
|
||||
catalog->parts.push_back({.id = "electric", .title = "Autumn Leaves", .composer = "Joseph Kosma", .part = "Electric", .total_pages = score.at("presentation").at("pages").as_array().size(), .title_image = title, .song_id = "autumn_leaves", .playback_pages = score.at("presentation").at("playback_pages").as_array().size()});
|
||||
catalog->groups.push_back({"Autumn Leaves", "Joseph Kosma", {0U}});
|
||||
catalog->audio_assets.push_back({.path = "backing/autumn_leaves_120.wav", .song_id = "autumn_leaves", .bpm = 120});
|
||||
state.catalog = catalog;
|
||||
@@ -206,9 +219,21 @@ BOOST_AUTO_TEST_CASE(device_menu_rendering_uses_petaluma_and_fits_both_displays)
|
||||
state.active_part_id = "electric";
|
||||
for (auto phase : {"Manual", "Preparing", "Count-in", "Playing", "Sustain"}) {
|
||||
state.audio.phase = phase;
|
||||
state.audio.backing_enabled = std::string_view{phase} != "Manual";
|
||||
state.audio.metronome_enabled = state.audio.backing_enabled;
|
||||
state.active_measure = std::string_view{phase} == "Playing" ? std::optional<std::size_t>{1} : std::nullopt;
|
||||
preview(state, phase);
|
||||
}
|
||||
state.audio.phase = "Playing";
|
||||
state.page_index = 1;
|
||||
state.active_measure = score.at("presentation").at("playback_pages").as_array()[1].at("first_measure").to_number<std::size_t>();
|
||||
preview(state, "transition");
|
||||
state.page_index = catalog->parts[0].playback_pages - 1;
|
||||
state.active_measure = score.at("music").at("staves").as_array()[0].at("measures").as_array().size();
|
||||
state.audio.phase = "Sustain";
|
||||
preview(state, "final_line");
|
||||
state.audio.phase = "Error";
|
||||
state.active_measure.reset();
|
||||
state.audio.playback_error = "Recording unavailable";
|
||||
preview(state, "audio_error");
|
||||
state.mode = vamp_zero::app_mode::PERFORMANCE_PART_MENU;
|
||||
|
||||
Reference in New Issue
Block a user