UNPKG

@stringsync/vexml

Version:

MusicXML to Vexflow

51 lines (50 loc) 1.72 kB
"use strict"; 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;