var notes = 'E4/q, G4/q, E4/8, G4/8, G4/8/r, E4/8, E4/q, G4/q, G4/8, A4/8, G4/8/r, G4/8, F4/8, E4/8';
const beatDuration = 4;
const renderWidth = 500;
const divName = 'boo';
const VF = Vex.Flow;
var div = document.getElementById(divName);
var renderer = new VF.Renderer(div, VF.Renderer.Backends.SVG);
var factory = new Vex.Flow.Factory({renderer: {elementId: divName}});
renderer.resize(renderWidth + 20, 200);
var context = renderer.getContext();
context.setFont("Arial", 10, "").setBackgroundFillStyle("#eed");
var staff = new VF.Stave(20, 0, renderWidth);
staff.addClef('treble');
staff.setContext(context).draw();
var score = factory.EasyScore();
var parsedNotes = score.notes(notes);
const durationMap = {
'q': '4',
'h': '2',
'w': '1'
}
const durationFractionMap = {
'1': 1,
'2': 1/2,
'4': 1/4,
'8': 1/8,
'16': 1/16,
'32' : 1/32,
'64' : 1/64
}
var beatAccumulator = 0;
for(const staveNote of parsedNotes)
{
var durationStr = staveNote.duration;
if(durationMap.hasOwnProperty(durationStr))
{
durationStr = durationMap[durationStr];
}
beatAccumulator += durationFractionMap[durationStr];
}
var totalBeats = beatAccumulator / (1 / beatDuration);
var voice = new VF.Voice({num_beats: totalBeats, beat_value: beatDuration});
voice.addTickables(parsedNotes);
var formatter = new VF.Formatter().joinVoices([voice]).format([voice], renderWidth)
voice.draw(context, staff);