UNPKG

vexflow

Version:

A JavaScript library for rendering music notation and guitar tablature.

78 lines (77 loc) 3.54 kB
import { VexFlowTests } from './vexflow_test_helpers.js'; const GhostNoteTests = { Start() { QUnit.module('GhostNote'); const run = VexFlowTests.runTests; run('GhostNote Basic', basic); run('GhostNote Dotted', dotted); }, }; function createTest(addItems) { return (options) => { const factory = VexFlowTests.makeFactory(options, 550); const stave = factory.Stave(); const score = factory.EasyScore(); addItems(factory, score); const voices = factory.getVoices(); factory.Formatter().joinVoices(voices).formatToStave(voices, stave); factory.draw(); options.assert.ok(true, 'all pass'); }; } const basic = createTest((f, score) => { const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { time: '7/4', }); const notesTop = voiceTop.getTickables(); f.Beam({ notes: notesTop.slice(4, 8) }); f.Beam({ notes: notesTop.slice(8, 10) }); score.voice([ f.GhostNote({ duration: '2' }), f.StaveNote({ keys: ['f/4'], stemDirection: -1, duration: '4' }), f.GhostNote({ duration: '4' }), f.StaveNote({ keys: ['e/4'], stemDirection: -1, duration: '4' }), f.GhostNote({ duration: '8' }), f.StaveNote({ keys: ['d/4'], stemDirection: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), f.StaveNote({ keys: ['c/4'], stemDirection: -1, duration: '8' }), f.StaveNote({ keys: ['c/4'], stemDirection: -1, duration: '8' }), ], { time: '7/4' }); }); const dotted = createTest((f, score) => { const voice1 = score.voice([ f.GhostNote({ duration: '4d' }), f.StaveNote({ duration: '8', keys: ['f/5'], stemDirection: 1 }), f.StaveNote({ duration: '4', keys: ['d/5'], stemDirection: 1 }), f.StaveNote({ duration: '8', keys: ['c/5'], stemDirection: 1 }), f.StaveNote({ duration: '16', keys: ['c/5'], stemDirection: 1 }), f.StaveNote({ duration: '16', keys: ['d/5'], stemDirection: 1 }), f.GhostNote({ duration: '2dd' }), f.StaveNote({ duration: '8', keys: ['f/5'], stemDirection: 1 }), ], { time: '8/4' }); const voice2 = score.voice([ f.StaveNote({ duration: '4', keys: ['f/4'], stemDirection: -1 }), f.StaveNote({ duration: '8', keys: ['e/4'], stemDirection: -1 }), f.StaveNote({ duration: '8', keys: ['d/4'], stemDirection: -1 }), f.GhostNote({ duration: '4dd' }), f.StaveNote({ duration: '16', keys: ['c/4'], stemDirection: -1 }), f.StaveNote({ duration: '2', keys: ['c/4'], stemDirection: -1 }), f.StaveNote({ duration: '4', keys: ['d/4'], stemDirection: -1 }), f.StaveNote({ duration: '8', keys: ['f/4'], stemDirection: -1 }), f.StaveNote({ duration: '8', keys: ['e/4'], stemDirection: -1 }), ], { time: '8/4' }); const notes1 = voice1.getTickables(); const notes2 = voice2.getTickables(); const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); addAccidental(notes1[1], 'bb'); addAccidental(notes1[4], '#'); addAccidental(notes1[7], 'n'); addAccidental(notes2[0], '#'); addAccidental(notes2[4], 'b'); addAccidental(notes2[5], '#'); addAccidental(notes2[7], 'n'); f.Beam({ notes: notes1.slice(3, 6) }); f.Beam({ notes: notes2.slice(1, 3) }); f.Beam({ notes: notes2.slice(7, 9) }); }); VexFlowTests.register(GhostNoteTests); export { GhostNoteTests };