Music XML
ci / checks (push) Successful in 42m24s

This commit is contained in:
khodowany
2026-09-10 22:01:18 -05:00
parent ea4e0bbba1
commit f84717990b
47 changed files with 16739 additions and 8391 deletions
+12
View File
@@ -0,0 +1,12 @@
#pragma once
#include <expected>
#include <string>
#include <string_view>
#include <modulus.hpp>
#include <vamp_zero/types.hpp>
namespace vamp_zero {
auto parse_notation_document(std::string_view json, std::string source_path) -> std::expected<score_document, modulus::error>;
auto written_quarters(score_written_duration const& written) -> double;
}
+10
View File
@@ -18,6 +18,10 @@ enum class score_accidental_mark {
FLAT,
NATURAL,
SHARP,
DOUBLE_FLAT,
DOUBLE_SHARP,
TRIPLE_FLAT,
TRIPLE_SHARP,
};
enum class score_layout_item_kind {
@@ -48,6 +52,8 @@ enum class score_layout_item_role {
TIE,
TUPLET,
TUPLET_BRACKET,
OCTAVE_SHIFT,
TREMOLO,
TITLE,
COMPOSER,
PART,
@@ -71,6 +77,7 @@ struct score_layout_item {
std::float32_t staff_spacing{};
std::int32_t codepoint{};
std::int32_t text_scale{};
std::float32_t text_size_multiplier{1.0F};
std::size_t system_index{std::numeric_limits<std::size_t>::max()};
std::size_t measure_index{std::numeric_limits<std::size_t>::max()};
std::size_t note_index{std::numeric_limits<std::size_t>::max()};
@@ -86,6 +93,8 @@ struct score_page_layout {
struct score_system_range {
std::size_t first_measure{};
std::size_t measure_count{};
std::size_t first_note{};
std::size_t note_count{std::numeric_limits<std::size_t>::max()};
};
constexpr auto score_measures_per_system = std::size_t{4};
@@ -95,6 +104,7 @@ auto notated_accidentals_for_measure(vamp_zero::score_measure const& measure, st
auto score_system_ranges(vamp_zero::score_document const& score) -> std::vector<vamp_zero::score_system_range>;
auto score_page_count(vamp_zero::score_document const& score) -> std::size_t;
auto layout_score_page(luma::rect bounds, vamp_zero::score_document const& score, std::size_t page_index) -> vamp_zero::score_page_layout;
auto draw_score_layout(luma::draw_context& context, vamp_zero::score_page_layout const& layout) -> void;
auto draw_score_page(luma::draw_context& context, luma::rect bounds, vamp_zero::score_document const& score, std::size_t page_index) -> void;
}
+86 -2
View File
@@ -2,6 +2,8 @@
#include <cstddef>
#include <cstdint>
#include <array>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
@@ -10,6 +12,41 @@
namespace vamp_zero {
struct score_time {
std::int64_t numerator{};
std::int64_t denominator{1};
auto quarters() const -> double { return static_cast<double>(numerator) / static_cast<double>(denominator); }
};
struct score_written_duration {
std::string type{};
std::int32_t dots{};
score_time ratio{1, 1};
std::string normal_type{};
std::int32_t normal_dots{};
};
struct score_beam {
std::int32_t level{1};
std::string type{};
};
struct score_attribute {
score_time onset{};
std::string clef{};
std::string time_signature{};
std::string key_signature{};
std::optional<std::array<std::int32_t, 7>> key_alterations{};
std::vector<score_time> beats{};
};
struct score_harmony {
std::string id{};
score_time onset{};
std::string symbol{};
std::string kind{};
};
enum class hardware_mode {
FAKE,
REAL,
@@ -19,14 +56,23 @@ struct score_pitch {
std::char_t letter{'c'};
std::int32_t octave{};
std::string accidental{};
std::string id{};
std::optional<std::int32_t> alteration{};
score_time duration{};
score_written_duration written{};
std::string tie_to{};
std::string tie_from{};
std::bool_t explicit_accidental{};
std::bool_t accidental_parentheses{};
std::bool_t accidental_bracket{};
};
struct score_note {
std::string id{};
std::string kind{};
std::bool_t hidden{};
std::int64_t duration_ticks{};
std::int64_t display_ticks{};
double duration_ticks{};
double display_ticks{};
std::string notehead{};
std::string chord_symbol{};
std::string lyric{};
@@ -34,12 +80,34 @@ struct score_note {
std::bool_t tie_from_previous{};
std::string tuplet_id{};
std::vector<vamp_zero::score_pitch> pitches{};
score_time onset{};
score_time duration{};
score_written_duration written{};
std::vector<score_beam> beams{};
std::vector<std::string> tuplet_ids{};
std::string stem{};
std::bool_t grace{};
std::bool_t grace_slash{};
std::bool_t cue{};
std::bool_t measure_rest{};
std::int32_t tremolo_marks{};
std::string tremolo_type{};
std::string tremolo_partner{};
std::string lyric_extend{};
std::string clef{};
std::int32_t display_octaves{};
std::optional<score_pitch> rest_position{};
};
struct score_tuplet {
std::string id{};
std::int32_t note_count{};
std::int32_t space_count{};
std::string start{};
std::string end{};
std::int32_t depth{};
std::string bracket{"auto"};
std::string show_number{"actual"};
};
struct score_measure {
@@ -49,6 +117,21 @@ struct score_measure {
std::string key_signature{};
std::vector<vamp_zero::score_note> notes{};
std::vector<vamp_zero::score_tuplet> tuplets{};
score_time duration{};
std::string clef{};
std::array<std::int32_t, 7> key_alterations{};
std::bool_t structured_key{};
std::vector<score_time> beats{};
std::vector<score_harmony> harmonies{};
std::vector<score_attribute> attributes{};
std::string right_barline{"regular"};
std::bool_t implicit{};
};
struct score_octave_shift {
score_time start{};
score_time end{};
std::int32_t octaves{};
};
struct score_document {
@@ -63,6 +146,7 @@ struct score_document {
std::string source_path{};
std::string source_json{};
std::vector<vamp_zero::score_measure> measures{};
std::vector<score_octave_shift> octave_shifts{};
};
struct library_part {