maia-util
Version:
Utility math and music functions supporting various applications by Music Artificial Intelligence Algorithms, Inc.
54 lines (52 loc) • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = resolve_expressions;
function resolve_expressions(expressions) {
// Tom Collins 28/2/2015
// In
// expressions Array mandatory
// Out Array
// When crescendos and diminuendos are expressed as lines (hairpins, wedges),
// they have a stopping point as well as a starting point. This function
// locates wedges stops corresponding to wedge starts, and unites the two
// pieces of information in one array object.
// Remove all stop wedges from the expressions array.
var wedge_stops = [];
var i = expressions.length - 1;
while (i >= 0) {
if (expressions[i].type.wedge && expressions[i].type.wedge == "stop") {
wedge_stops.push(expressions[i]);
expressions.splice(i, 1);
}
i--;
}
// Loop over the expressions array and associate each wedge with a member of
// wedge_stops.
var target_idx = void 0;
for (var j = 0; j < expressions.length; j++) {
if (expressions[j].type.wedge) {
// Find the target index in wedge_stops.
target_idx = -1;
var k = 0;
while (k < wedge_stops.length) {
if (wedge_stops[k].staffNo == expressions[j].staffNo && wedge_stops[k].placement == expressions[j].placement && wedge_stops[k].ontime >= expressions[j].ontime) {
// We found it!
target_idx = k;
k = wedge_stops.length - 1;
}
k++;
}
if (target_idx >= 0) {
// Add some properties to expressions[j].
expressions[j].barOff = wedge_stops[target_idx].barOn;
expressions[j].beatOff = wedge_stops[target_idx].beatOn;
expressions[j].offtime = wedge_stops[target_idx].ontime;
} else {
console.log('Could not find a stop for wedge: ', expressions[j]);
}
}
}
return expressions;
}