Rendering
ci / checks (push) Successful in 38m59s

This commit is contained in:
khodowany
2026-09-05 13:31:18 -05:00
parent 4f9a269f85
commit 6da21a2deb
12 changed files with 716 additions and 52 deletions
+21 -2
View File
@@ -359,8 +359,9 @@ auto vamp_zero::parse_score_document(std::string_view json, std::string source_p
auto title = required_string(**metadata, "title");
auto composer = optional_string_value(**metadata, "composer", {});
auto key = optional_string_value(**metadata, "key_signature", {});
if (!title || !composer || !key) {
return std::unexpected(!title ? title.error() : (!composer ? composer.error() : key.error()));
auto time = optional_string_value(**metadata, "time_signature", {});
if (!title || !composer || !key || !time) {
return std::unexpected(!title ? title.error() : (!composer ? composer.error() : (!key ? key.error() : time.error())));
}
auto staves = require_array(**root, "staves");
@@ -381,6 +382,10 @@ auto vamp_zero::parse_score_document(std::string_view json, std::string source_p
if (!part) {
return std::unexpected(part.error());
}
auto clef = optional_string_value(staff, "clef", "treble");
if (!clef) {
return std::unexpected(clef.error());
}
auto measures = require_array(staff, "measures");
if (!measures) {
@@ -391,6 +396,8 @@ auto vamp_zero::parse_score_document(std::string_view json, std::string source_p
.title = std::move(*title),
.composer = std::move(*composer),
.key_signature = std::move(*key),
.time_signature = std::move(*time),
.clef = clef->empty() ? std::string{"treble"} : std::move(*clef),
.part = human_label(*part),
.arrangement_part_type = std::move(*part),
.source_path = std::move(source_path),
@@ -401,8 +408,20 @@ auto vamp_zero::parse_score_document(std::string_view json, std::string source_p
if (!measure) {
return std::unexpected(measure.error());
}
if (document.key_signature.empty() && !measure->key_signature.empty()) {
document.key_signature = measure->key_signature;
}
if (document.time_signature.empty() && !measure->time_signature.empty()) {
document.time_signature = measure->time_signature;
}
document.measures.push_back(std::move(*measure));
}
if (document.key_signature.empty()) {
document.key_signature = "C";
}
if (document.time_signature.empty()) {
document.time_signature = "4/4";
}
return document;
}