@stringsync/vexml
Version:
MusicXML to Vexflow
51 lines (50 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TabPosition = void 0;
class TabPosition {
config;
log;
fret;
string;
harmonic;
constructor(config, log, fret, string, harmonic) {
this.config = config;
this.log = log;
this.fret = fret;
this.string = string;
this.harmonic = harmonic;
}
static create(config, log, musicXML) {
const notehead = musicXML.note.getNotehead();
const dead = notehead === 'cross' || notehead === 'x';
return musicXML.note
.getNotations()
.flatMap((n) => n.getTechnicals())
.flatMap((t) => {
const frets = t
.getFrets()
.map((f) => f.getNumber())
.map(String);
const strings = t.getTabStrings().map((s) => s.getNumber());
const harmonics = t.getHarmonics().map((h) => h.getType());
const count = Math.min(frets.length, strings.length);
const tabPositions = new Array(count);
for (let index = 0; index < count; index++) {
const fret = dead ? 'X' : frets[index] ?? '0';
const string = strings[index] ?? 1;
const harmonic = harmonics[index] === 'natural' || harmonics[index] === 'artificial';
tabPositions[index] = new TabPosition(config, log, fret, string, harmonic);
}
return tabPositions;
});
}
parse() {
return {
type: 'tabposition',
fret: this.fret,
string: this.string,
harmonic: this.harmonic,
};
}
}
exports.TabPosition = TabPosition;