@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user