@stringsync/vexml
Version:
MusicXML to Vexflow
66 lines (65 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Fragment = void 0;
const part_1 = require("./part");
const util_1 = require("../util");
class Fragment {
config;
log;
document;
fragmentRender;
parts;
constructor(config, log, document, fragmentRender, parts) {
this.config = config;
this.log = log;
this.document = document;
this.fragmentRender = fragmentRender;
this.parts = parts;
}
static create(config, log, document, fragmentRender) {
const parts = fragmentRender.partRenders.map((partRender) => part_1.Part.create(config, log, document, partRender));
return new Fragment(config, log, document, fragmentRender, parts);
}
/** The name of the element, which can be used as a type discriminant. */
name = 'fragment';
/** Returns the bounding box of the element. */
rect() {
return this.fragmentRender.rect;
}
/** Returns the parts of the fragment. */
getParts() {
return this.parts;
}
/** Returns the system index for the fragment. */
getSystemIndex() {
return this.fragmentRender.key.systemIndex;
}
/** Returns the absolute measure index for the fragment. */
getAbsoluteMeasureIndex() {
return this.document.getAbsoluteMeasureIndex(this.fragmentRender.key);
}
/** Returns the start measure beat for the fragment. */
getStartMeasureBeat() {
return (this.parts
.map((part) => part.getStartMeasureBeat())
.sort((a, b) => a.toDecimal() - b.toDecimal())
.at(0) ?? util_1.Fraction.zero());
}
/** Returns the bpm of the fragment. */
getBpm() {
return this.document.getFragment(this.fragmentRender.key).signature.metronome.playbackBpm || 1; // disallow 0;
}
/** Returns the max number of parts in this score. */
getPartCount() {
return this.parts.length;
}
/** Returns whether the fragment is a non-musical gap. */
isNonMusicalGap() {
return this.document.getFragment(this.fragmentRender.key).kind === 'nonmusical';
}
/** Returns the non-musical duration of the gap. */
getNonMusicalDurationMs() {
return this.document.getNonMusicalFragment(this.fragmentRender.key).durationMs;
}
}
exports.Fragment = Fragment;