@sudobility/music_drawing 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas-renderer.d.ts +180 -0
- package/dist/canvas-renderer.d.ts.map +1 -0
- package/dist/canvas-renderer.js +831 -0
- package/dist/canvas-renderer.js.map +1 -0
- package/dist/convert.d.ts +122 -0
- package/dist/convert.d.ts.map +1 -0
- package/dist/convert.js +426 -0
- package/dist/convert.js.map +1 -0
- package/dist/display-timing.d.ts +68 -0
- package/dist/display-timing.d.ts.map +1 -0
- package/dist/display-timing.js +192 -0
- package/dist/display-timing.js.map +1 -0
- package/dist/icon-canvas.d.ts +12 -0
- package/dist/icon-canvas.d.ts.map +1 -0
- package/dist/icon-canvas.js +62 -0
- package/dist/icon-canvas.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +159 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +362 -0
- package/dist/layout.js.map +1 -0
- package/dist/measure-content.d.ts +114 -0
- package/dist/measure-content.d.ts.map +1 -0
- package/dist/measure-content.js +553 -0
- package/dist/measure-content.js.map +1 -0
- package/dist/note-color.d.ts +48 -0
- package/dist/note-color.d.ts.map +1 -0
- package/dist/note-color.js +81 -0
- package/dist/note-color.js.map +1 -0
- package/dist/pagination.d.ts +57 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +152 -0
- package/dist/pagination.js.map +1 -0
- package/dist/percussion.d.ts +47 -0
- package/dist/percussion.d.ts.map +1 -0
- package/dist/percussion.js +172 -0
- package/dist/percussion.js.map +1 -0
- package/dist/playhead.d.ts +37 -0
- package/dist/playhead.d.ts.map +1 -0
- package/dist/playhead.js +89 -0
- package/dist/playhead.js.map +1 -0
- package/dist/test/canvas-stub.d.ts +21 -0
- package/dist/test/canvas-stub.d.ts.map +1 -0
- package/dist/test/canvas-stub.js +51 -0
- package/dist/test/canvas-stub.js.map +1 -0
- package/dist/test/fixtures.d.ts +47 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +433 -0
- package/dist/test/fixtures.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-renderer.js","sourceRoot":"","sources":["../src/canvas-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain -> VexFlow conversion helpers (spec §7, §26): pitch/duration/key
|
|
3
|
+
* spelling, chord grouping, and building `StaveNote`s (with dots,
|
|
4
|
+
* articulations, rest handling, and per-key tie metadata) for one voice's
|
|
5
|
+
* worth of events. Accidental *glyphs* are deliberately NOT decided here —
|
|
6
|
+
* see the comment above the `Articulation`/`Dot` modifier block in
|
|
7
|
+
* `buildVoiceContent` — `renderer.ts` derives them per measure via
|
|
8
|
+
* VexFlow's own `Accidental.applyAccidentals`, which is key-signature- and
|
|
9
|
+
* context-aware.
|
|
10
|
+
*
|
|
11
|
+
* Pure-ish: builds VexFlow objects but never touches the DOM, a `Stave`'s
|
|
12
|
+
* position, or a rendering context. No store/React imports (spec §3, §37).
|
|
13
|
+
*/
|
|
14
|
+
import { StaveNote } from 'vexflow';
|
|
15
|
+
import type { StemmableNote } from 'vexflow';
|
|
16
|
+
import type { Hairpin as DomainHairpin, Ottava as DomainOttava, KeySignature, MusicalEvent, Pitch } from '@sudobility/music_types';
|
|
17
|
+
import type { DisplayGroup } from './display-timing.js';
|
|
18
|
+
/** `Pitch` -> VexFlow key string, e.g. `{step:'C',accidental:1,octave:4}` -> `"c#/4"`. */
|
|
19
|
+
export declare function pitchToVexKey(pitch: Pitch): string;
|
|
20
|
+
export type VexDuration = {
|
|
21
|
+
code: string;
|
|
22
|
+
dots: 0 | 1;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Maps a tick length to a VexFlow duration code + dot count. `decomposeDuration`
|
|
26
|
+
* (domain layer) already greedily breaks a span into the largest renderable
|
|
27
|
+
* chunks, but its documented fallback is to emit a non-standard remainder
|
|
28
|
+
* tick length verbatim when nothing fits exactly (e.g. a span shorter than a
|
|
29
|
+
* thirty-second note, or one that doesn't land on any named duration at this
|
|
30
|
+
* PPQ). For that fallback case we approximate to the *nearest* renderable
|
|
31
|
+
* duration by tick distance so rendering never throws; the visual duration
|
|
32
|
+
* won't be tick-exact in that rare case (documented limitation, spec §26
|
|
33
|
+
* treats layout as heuristic).
|
|
34
|
+
*/
|
|
35
|
+
export declare function ticksToVexDuration(ticks: number, ppq: number): VexDuration;
|
|
36
|
+
/** `KeySignature` -> VexFlow key spec string (e.g. `{fifths:-2,mode:'major'}` -> `"Bb"`). Clamped to [-7,7]. */
|
|
37
|
+
export declare function keySignatureToVexSpec(ks: KeySignature): string;
|
|
38
|
+
/** Groups events by identical `(startTick, durationTicks)` — VexFlow chord candidates within a single voice. */
|
|
39
|
+
export declare function groupSimultaneous(events: MusicalEvent[]): MusicalEvent[][];
|
|
40
|
+
/**
|
|
41
|
+
* Per-key tie state, parallel to a chord `StaveNote`'s `keys`/`getKeys()`
|
|
42
|
+
* array (index-for-index — both are built from the same `group` in
|
|
43
|
+
* `buildVoiceContent`). Ties must be matched between two adjacent notes by
|
|
44
|
+
* *pitch*, never by array index/adjacency alone: a chord where only one of
|
|
45
|
+
* several members ties into the next chord must produce exactly one
|
|
46
|
+
* `StaveTie`, on the matching key indices on each side — see
|
|
47
|
+
* `domain/score/ties.ts`'s `findForwardPartner`/`findBackwardPartner`,
|
|
48
|
+
* which documents the same requirement for the domain-level tie chain.
|
|
49
|
+
*/
|
|
50
|
+
export type KeyTie = {
|
|
51
|
+
pitch: Pitch;
|
|
52
|
+
tieStart: boolean;
|
|
53
|
+
tieStop: boolean;
|
|
54
|
+
};
|
|
55
|
+
/** One produced `StaveNote` (possibly a chord, possibly one segment of a tie-decomposed event) and the metadata needed to build id maps and cross-note ties. */
|
|
56
|
+
export type NoteMeta = {
|
|
57
|
+
/** The id set via `note.setAttribute('id', vexId)`; the drawn SVG group's id is `vf-${vexId}`. */
|
|
58
|
+
vexId: string;
|
|
59
|
+
/** Domain event ids this VexFlow note represents (>1 for a chord). */
|
|
60
|
+
eventIds: string[];
|
|
61
|
+
/** `true` if any key ties out of/into this note — a cheap pre-filter; the actual tie must still be resolved per-key via `keyTies` (see its doc). */
|
|
62
|
+
tieStart: boolean;
|
|
63
|
+
tieStop: boolean;
|
|
64
|
+
isRest: boolean;
|
|
65
|
+
/** Per-key tie state, parallel to the `StaveNote`'s keys. Empty for rests. */
|
|
66
|
+
keyTies: KeyTie[];
|
|
67
|
+
/**
|
|
68
|
+
* Whether a phrase mark starts or ends here.
|
|
69
|
+
*
|
|
70
|
+
* Not per-key, unlike ties: a slur is one curve over a run of notes, so a
|
|
71
|
+
* chord under one carries it as a whole rather than per notehead.
|
|
72
|
+
*/
|
|
73
|
+
slurStart: boolean;
|
|
74
|
+
slurStop: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* The ends of a hairpin, carried for the same reason and with the same rule
|
|
77
|
+
* as the slur above: one wedge over a run of notes, so a chord under one
|
|
78
|
+
* carries it whole rather than per notehead.
|
|
79
|
+
*
|
|
80
|
+
* The start keeps its direction rather than being a boolean, because that is
|
|
81
|
+
* what decides which way the wedge opens.
|
|
82
|
+
*/
|
|
83
|
+
hairpinStart: DomainHairpin | null;
|
|
84
|
+
hairpinStop: boolean;
|
|
85
|
+
/** The ends of an octave bracket, carried like the hairpin's. */
|
|
86
|
+
ottavaStart: DomainOttava | null;
|
|
87
|
+
ottavaStop: boolean;
|
|
88
|
+
/** The ends of a slide. */
|
|
89
|
+
glissandoStart: boolean;
|
|
90
|
+
glissandoStop: boolean;
|
|
91
|
+
};
|
|
92
|
+
export type VoiceContent = {
|
|
93
|
+
/**
|
|
94
|
+
* Everything the VexFlow voice holds, spacers included — this is what goes
|
|
95
|
+
* into `Voice.addTickables` and into beaming, and what the formatter counts.
|
|
96
|
+
*/
|
|
97
|
+
tickables: StemmableNote[];
|
|
98
|
+
/** The drawn notes only, parallel to `metas`; spacers are not notes. */
|
|
99
|
+
notes: StaveNote[];
|
|
100
|
+
metas: NoteMeta[];
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Builds VexFlow `StaveNote`s for one voice's worth of display groups, as
|
|
104
|
+
* decided by `displayGroups` — which is where a measure's timing is resolved
|
|
105
|
+
* into durations that can actually be drawn. Each group becomes one
|
|
106
|
+
* `StaveNote`, with several events in a group drawn as a chord.
|
|
107
|
+
*
|
|
108
|
+
* A group whose duration isn't representable as a single VexFlow duration is
|
|
109
|
+
* decomposed (`decomposeDuration`) into consecutive `StaveNote`s tied
|
|
110
|
+
* together, mirroring the domain's own `splitNoteAcrossMeasures` convention
|
|
111
|
+
* (first/middle/last tie flags).
|
|
112
|
+
*
|
|
113
|
+
* Returns `notes`/`metas` as parallel arrays (same length, same order).
|
|
114
|
+
*/
|
|
115
|
+
export declare function buildVoiceContent(groups: DisplayGroup[], ppq: number, glyphScale?: number,
|
|
116
|
+
/**
|
|
117
|
+
* Draw the events as drums rather than pitches: fixed staff positions and
|
|
118
|
+
* cross noteheads, per `percussion.ts`. A drum's "pitch" says which drum was
|
|
119
|
+
* struck, so drawn literally a kick lands six ledger lines below the staff.
|
|
120
|
+
*/
|
|
121
|
+
isPercussion?: boolean): VoiceContent;
|
|
122
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAUL,SAAS,EAEV,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAGV,OAAO,IAAI,aAAa,EAExB,MAAM,IAAI,YAAY,EAEtB,YAAY,EACZ,YAAY,EAEZ,KAAK,EACN,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAaxD,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAElD;AAsBD,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC;AAExD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAa1E;AAqCD,gHAAgH;AAChH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAM9D;AA8CD,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,EAAE,CAY1E;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3E,gKAAgK;AAChK,MAAM,MAAM,QAAQ,GAAG;IACrB,kGAAkG;IAClG,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oJAAoJ;IACpJ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,wEAAwE;IACxE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EAAE,EACtB,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM;AACnB;;;;GAIG;AACH,YAAY,UAAQ,GACnB,YAAY,CAiSd"}
|
package/dist/convert.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain -> VexFlow conversion helpers (spec §7, §26): pitch/duration/key
|
|
3
|
+
* spelling, chord grouping, and building `StaveNote`s (with dots,
|
|
4
|
+
* articulations, rest handling, and per-key tie metadata) for one voice's
|
|
5
|
+
* worth of events. Accidental *glyphs* are deliberately NOT decided here —
|
|
6
|
+
* see the comment above the `Articulation`/`Dot` modifier block in
|
|
7
|
+
* `buildVoiceContent` — `renderer.ts` derives them per measure via
|
|
8
|
+
* VexFlow's own `Accidental.applyAccidentals`, which is key-signature- and
|
|
9
|
+
* context-aware.
|
|
10
|
+
*
|
|
11
|
+
* Pure-ish: builds VexFlow objects but never touches the DOM, a `Stave`'s
|
|
12
|
+
* position, or a rendering context. No store/React imports (spec §3, §37).
|
|
13
|
+
*/
|
|
14
|
+
import { Annotation, AnnotationVerticalJustify, Articulation, Dot, GhostNote, GraceNote, GraceNoteGroup, FretHandFinger, Ornament, StaveNote, Stroke, } from 'vexflow';
|
|
15
|
+
import { isNoteEvent } from '@sudobility/music_types';
|
|
16
|
+
import { ticksFor } from '@sudobility/music_types';
|
|
17
|
+
import { decomposeDuration } from '@sudobility/music_types';
|
|
18
|
+
import { crossHeadStemOffsets, percussionVexKey } from './percussion.js';
|
|
19
|
+
import { pitchToMidi } from '@sudobility/music_types';
|
|
20
|
+
/** `Pitch.accidental` (-2..2) -> VexFlow accidental suffix/code (`''` for natural, no glyph drawn). */
|
|
21
|
+
const ACCIDENTAL_SUFFIX = {
|
|
22
|
+
[-2]: 'bb',
|
|
23
|
+
[-1]: 'b',
|
|
24
|
+
[0]: '',
|
|
25
|
+
[1]: '#',
|
|
26
|
+
[2]: '##',
|
|
27
|
+
};
|
|
28
|
+
/** `Pitch` -> VexFlow key string, e.g. `{step:'C',accidental:1,octave:4}` -> `"c#/4"`. */
|
|
29
|
+
export function pitchToVexKey(pitch) {
|
|
30
|
+
return `${pitch.step.toLowerCase()}${ACCIDENTAL_SUFFIX[pitch.accidental]}/${pitch.octave}`;
|
|
31
|
+
}
|
|
32
|
+
/** Non-triplet `DurationName`s mapped to VexFlow's duration code, largest first (matches `decomposeDuration`'s candidate order). */
|
|
33
|
+
const VEX_DURATION_CODES = [
|
|
34
|
+
{ name: 'whole', code: 'w', dots: 0 },
|
|
35
|
+
{ name: 'dotted-whole', code: 'w', dots: 1 },
|
|
36
|
+
{ name: 'half', code: 'h', dots: 0 },
|
|
37
|
+
{ name: 'dotted-half', code: 'h', dots: 1 },
|
|
38
|
+
{ name: 'quarter', code: 'q', dots: 0 },
|
|
39
|
+
{ name: 'dotted-quarter', code: 'q', dots: 1 },
|
|
40
|
+
{ name: 'eighth', code: '8', dots: 0 },
|
|
41
|
+
{ name: 'dotted-eighth', code: '8', dots: 1 },
|
|
42
|
+
{ name: 'sixteenth', code: '16', dots: 0 },
|
|
43
|
+
{ name: 'dotted-sixteenth', code: '16', dots: 1 },
|
|
44
|
+
{ name: 'thirtysecond', code: '32', dots: 0 },
|
|
45
|
+
{ name: 'dotted-thirtysecond', code: '32', dots: 1 },
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Maps a tick length to a VexFlow duration code + dot count. `decomposeDuration`
|
|
49
|
+
* (domain layer) already greedily breaks a span into the largest renderable
|
|
50
|
+
* chunks, but its documented fallback is to emit a non-standard remainder
|
|
51
|
+
* tick length verbatim when nothing fits exactly (e.g. a span shorter than a
|
|
52
|
+
* thirty-second note, or one that doesn't land on any named duration at this
|
|
53
|
+
* PPQ). For that fallback case we approximate to the *nearest* renderable
|
|
54
|
+
* duration by tick distance so rendering never throws; the visual duration
|
|
55
|
+
* won't be tick-exact in that rare case (documented limitation, spec §26
|
|
56
|
+
* treats layout as heuristic).
|
|
57
|
+
*/
|
|
58
|
+
export function ticksToVexDuration(ticks, ppq) {
|
|
59
|
+
let best = VEX_DURATION_CODES[0];
|
|
60
|
+
let bestDelta = Infinity;
|
|
61
|
+
for (const candidate of VEX_DURATION_CODES) {
|
|
62
|
+
const candidateTicks = ticksFor(candidate.name, ppq);
|
|
63
|
+
const delta = Math.abs(candidateTicks - ticks);
|
|
64
|
+
if (delta === 0)
|
|
65
|
+
return { code: candidate.code, dots: candidate.dots };
|
|
66
|
+
if (delta < bestDelta) {
|
|
67
|
+
bestDelta = delta;
|
|
68
|
+
best = candidate;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { code: best.code, dots: best.dots };
|
|
72
|
+
}
|
|
73
|
+
const MAJOR_KEYS_BY_FIFTHS = [
|
|
74
|
+
'Cb',
|
|
75
|
+
'Gb',
|
|
76
|
+
'Db',
|
|
77
|
+
'Ab',
|
|
78
|
+
'Eb',
|
|
79
|
+
'Bb',
|
|
80
|
+
'F',
|
|
81
|
+
'C',
|
|
82
|
+
'G',
|
|
83
|
+
'D',
|
|
84
|
+
'A',
|
|
85
|
+
'E',
|
|
86
|
+
'B',
|
|
87
|
+
'F#',
|
|
88
|
+
'C#',
|
|
89
|
+
];
|
|
90
|
+
const MINOR_KEYS_BY_FIFTHS = [
|
|
91
|
+
'Abm',
|
|
92
|
+
'Ebm',
|
|
93
|
+
'Bbm',
|
|
94
|
+
'Fm',
|
|
95
|
+
'Cm',
|
|
96
|
+
'Gm',
|
|
97
|
+
'Dm',
|
|
98
|
+
'Am',
|
|
99
|
+
'Em',
|
|
100
|
+
'Bm',
|
|
101
|
+
'F#m',
|
|
102
|
+
'C#m',
|
|
103
|
+
'G#m',
|
|
104
|
+
'D#m',
|
|
105
|
+
'A#m',
|
|
106
|
+
];
|
|
107
|
+
/** `KeySignature` -> VexFlow key spec string (e.g. `{fifths:-2,mode:'major'}` -> `"Bb"`). Clamped to [-7,7]. */
|
|
108
|
+
export function keySignatureToVexSpec(ks) {
|
|
109
|
+
const clamped = Math.max(-7, Math.min(7, ks.fifths));
|
|
110
|
+
const index = clamped + 7;
|
|
111
|
+
return ks.mode === 'minor'
|
|
112
|
+
? MINOR_KEYS_BY_FIFTHS[index]
|
|
113
|
+
: MAJOR_KEYS_BY_FIFTHS[index];
|
|
114
|
+
}
|
|
115
|
+
const ARTICULATION_CODE = {
|
|
116
|
+
staccato: 'a.',
|
|
117
|
+
accent: 'a>',
|
|
118
|
+
tenuto: 'a-',
|
|
119
|
+
marcato: 'a^',
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* The fermata glyph: upright, above the stave.
|
|
123
|
+
*
|
|
124
|
+
* Always above, which is what an engraver does in single-voice music — the
|
|
125
|
+
* inverted form (`a@u`) belongs to the lower part of a two-voice texture, not
|
|
126
|
+
* to any stem-down note. **Known simplification**: a lower voice therefore
|
|
127
|
+
* gets its pause above the stave too, where it should hang below.
|
|
128
|
+
*
|
|
129
|
+
* Deliberately not chosen from the note's stem direction, which is the obvious
|
|
130
|
+
* wrong answer: `StaveNote.getStemDirection()` reports `Stem.UP` for *every*
|
|
131
|
+
* pitch at construction — the real direction is resolved later, during
|
|
132
|
+
* formatting — so keying off it here silently inverts every fermata in the
|
|
133
|
+
* score. Measured: c/4, g/3, e/5 and a/5 all report UP.
|
|
134
|
+
*/
|
|
135
|
+
const FERMATA_ABOVE = 'a@a';
|
|
136
|
+
/**
|
|
137
|
+
* Domain ornament -> VexFlow `Ornament` code.
|
|
138
|
+
*
|
|
139
|
+
* **Two of these look transposed and are not.** VexFlow's `'mordent'` draws
|
|
140
|
+
* the `ornamentShortTrill` glyph — the one *without* the vertical stroke,
|
|
141
|
+
* which musicians call an inverted (upper) mordent — while its
|
|
142
|
+
* `'mordent_inverted'` draws `ornamentMordent`, the stroked one that is
|
|
143
|
+
* simply "a mordent". So the two words are used the other way round from the
|
|
144
|
+
* way a player uses them, and mapping them by name draws both backwards.
|
|
145
|
+
* Verified against the constructed glyph codes rather than the docs.
|
|
146
|
+
*
|
|
147
|
+
* `'tr'`, not `'trill'`: the latter is not a code VexFlow knows and throws
|
|
148
|
+
* inside the constructor.
|
|
149
|
+
*/
|
|
150
|
+
const ORNAMENT_CODE = {
|
|
151
|
+
trill: 'tr',
|
|
152
|
+
mordent: 'mordent_inverted',
|
|
153
|
+
'inverted-mordent': 'mordent',
|
|
154
|
+
turn: 'turn',
|
|
155
|
+
};
|
|
156
|
+
/** Groups events by identical `(startTick, durationTicks)` — VexFlow chord candidates within a single voice. */
|
|
157
|
+
export function groupSimultaneous(events) {
|
|
158
|
+
const groups = [];
|
|
159
|
+
let currentKey = null;
|
|
160
|
+
for (const event of events) {
|
|
161
|
+
const key = `${event.startTick}:${event.durationTicks}`;
|
|
162
|
+
if (key !== currentKey) {
|
|
163
|
+
groups.push([]);
|
|
164
|
+
currentKey = key;
|
|
165
|
+
}
|
|
166
|
+
groups[groups.length - 1].push(event);
|
|
167
|
+
}
|
|
168
|
+
return groups;
|
|
169
|
+
}
|
|
170
|
+
const REST_KEY = 'b/4';
|
|
171
|
+
/**
|
|
172
|
+
* Builds VexFlow `StaveNote`s for one voice's worth of display groups, as
|
|
173
|
+
* decided by `displayGroups` — which is where a measure's timing is resolved
|
|
174
|
+
* into durations that can actually be drawn. Each group becomes one
|
|
175
|
+
* `StaveNote`, with several events in a group drawn as a chord.
|
|
176
|
+
*
|
|
177
|
+
* A group whose duration isn't representable as a single VexFlow duration is
|
|
178
|
+
* decomposed (`decomposeDuration`) into consecutive `StaveNote`s tied
|
|
179
|
+
* together, mirroring the domain's own `splitNoteAcrossMeasures` convention
|
|
180
|
+
* (first/middle/last tie flags).
|
|
181
|
+
*
|
|
182
|
+
* Returns `notes`/`metas` as parallel arrays (same length, same order).
|
|
183
|
+
*/
|
|
184
|
+
export function buildVoiceContent(groups, ppq, glyphScale,
|
|
185
|
+
/**
|
|
186
|
+
* Draw the events as drums rather than pitches: fixed staff positions and
|
|
187
|
+
* cross noteheads, per `percussion.ts`. A drum's "pitch" says which drum was
|
|
188
|
+
* struck, so drawn literally a kick lands six ledger lines below the staff.
|
|
189
|
+
*/
|
|
190
|
+
isPercussion = false) {
|
|
191
|
+
const tickables = [];
|
|
192
|
+
const notes = [];
|
|
193
|
+
const metas = [];
|
|
194
|
+
for (const { events: group, durationTicks } of groups) {
|
|
195
|
+
// A spacer: time the voice must account for so it still sums to the bar,
|
|
196
|
+
// drawing nothing. Two voices on one drum staff need these wherever the
|
|
197
|
+
// other voice is the one playing.
|
|
198
|
+
if (group.length === 0) {
|
|
199
|
+
for (const segmentTicks of decomposeDuration(durationTicks, ppq)) {
|
|
200
|
+
const { code, dots } = ticksToVexDuration(segmentTicks, ppq);
|
|
201
|
+
tickables.push(new GhostNote({ duration: code, dots }));
|
|
202
|
+
}
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const first = group[0];
|
|
206
|
+
const isRest = !isNoteEvent(first);
|
|
207
|
+
// The group's display duration, not the event's recorded one: a recorded
|
|
208
|
+
// duration is rarely a note value, and rounding each one independently is
|
|
209
|
+
// what put voices of the same bar on different timelines. See
|
|
210
|
+
// `display-timing.ts`.
|
|
211
|
+
const segments = decomposeDuration(durationTicks, ppq);
|
|
212
|
+
segments.forEach((segmentTicks, segmentIndex) => {
|
|
213
|
+
const isFirstSegment = segmentIndex === 0;
|
|
214
|
+
const isLastSegment = segmentIndex === segments.length - 1;
|
|
215
|
+
const { code, dots } = ticksToVexDuration(segmentTicks, ppq);
|
|
216
|
+
const keys = isRest
|
|
217
|
+
? [REST_KEY]
|
|
218
|
+
: group.map(e => isPercussion
|
|
219
|
+
? percussionVexKey(pitchToMidi(e.pitch))
|
|
220
|
+
: pitchToVexKey(e.pitch));
|
|
221
|
+
const staveNote = new StaveNote({
|
|
222
|
+
keys,
|
|
223
|
+
duration: code,
|
|
224
|
+
dots,
|
|
225
|
+
type: isRest ? 'r' : undefined,
|
|
226
|
+
// Omitted rather than passed as undefined: VexFlow reads the key's
|
|
227
|
+
// presence, not its value.
|
|
228
|
+
...(glyphScale === undefined ? {} : { glyph_font_scale: glyphScale }),
|
|
229
|
+
});
|
|
230
|
+
// A cross notehead is hollow where a stem meets it, so the stem has to
|
|
231
|
+
// reach further in to join up. See `crossHeadStemOffsets`.
|
|
232
|
+
const stemOffsets = crossHeadStemOffsets(keys);
|
|
233
|
+
if (stemOffsets)
|
|
234
|
+
staveNote.getStem()?.setOptions(stemOffsets);
|
|
235
|
+
for (let i = 0; i < dots; i += 1) {
|
|
236
|
+
Dot.buildAndAttach([staveNote], { all: true });
|
|
237
|
+
}
|
|
238
|
+
// Accidental glyphs are NOT added here: `keys` already embeds each
|
|
239
|
+
// note's absolute spelling (e.g. "f#/4"), and `renderer.ts` calls
|
|
240
|
+
// VexFlow's `Accidental.applyAccidentals(voices, keySpec)` once per
|
|
241
|
+
// measure, which decides — in light of the measure's key signature
|
|
242
|
+
// and any earlier accidental on the same pitch/octave in the measure
|
|
243
|
+
// — whether a sharp/flat/natural glyph is actually needed. Adding a
|
|
244
|
+
// modifier unconditionally here would draw a redundant accidental on
|
|
245
|
+
// every in-key altered note (e.g. every F# in G major).
|
|
246
|
+
if (!isRest) {
|
|
247
|
+
group.forEach((event, keyIndex) => {
|
|
248
|
+
const noteEvent = event;
|
|
249
|
+
if (noteEvent.articulation) {
|
|
250
|
+
staveNote.addModifier(new Articulation(ARTICULATION_CODE[noteEvent.articulation]), keyIndex);
|
|
251
|
+
}
|
|
252
|
+
/*
|
|
253
|
+
The pause, above the stave — see `FERMATA_ABOVE`.
|
|
254
|
+
|
|
255
|
+
Added after the articulation deliberately: VexFlow stacks
|
|
256
|
+
modifiers outward in the order they arrive, so a staccato dot sits
|
|
257
|
+
against the notehead and the fermata arches over it, rather than
|
|
258
|
+
the dot floating outside the arc.
|
|
259
|
+
*/
|
|
260
|
+
if (noteEvent.fermata) {
|
|
261
|
+
staveNote.addModifier(new Articulation(FERMATA_ABOVE), keyIndex);
|
|
262
|
+
}
|
|
263
|
+
/*
|
|
264
|
+
The ornament sign. A modifier like the others, and only ever one —
|
|
265
|
+
the model holds a single sign, because a trill that is also a turn
|
|
266
|
+
is not a marking anybody writes.
|
|
267
|
+
*/
|
|
268
|
+
if (noteEvent.ornament) {
|
|
269
|
+
staveNote.addModifier(new Ornament(ORNAMENT_CODE[noteEvent.ornament]), keyIndex);
|
|
270
|
+
}
|
|
271
|
+
/*
|
|
272
|
+
A rolled chord. Added once, on the first key, because the stroke is
|
|
273
|
+
drawn beside the whole chord rather than beside a notehead — adding
|
|
274
|
+
it per member would stack one wavy line per note.
|
|
275
|
+
|
|
276
|
+
Meaningless on a single note and skipped there: there is only one
|
|
277
|
+
notehead to roll through.
|
|
278
|
+
*/
|
|
279
|
+
if (noteEvent.arpeggiate && keyIndex === 0 && group.length > 1) {
|
|
280
|
+
staveNote.addStroke(0, new Stroke(Stroke.Type.ROLL_UP));
|
|
281
|
+
}
|
|
282
|
+
/*
|
|
283
|
+
The finger to play with, beside its own notehead — per key, unlike
|
|
284
|
+
the marks above, because in a chord each note has its own finger.
|
|
285
|
+
*/
|
|
286
|
+
if (noteEvent.fingering) {
|
|
287
|
+
staveNote.addModifier(new FretHandFinger(noteEvent.fingering), keyIndex);
|
|
288
|
+
}
|
|
289
|
+
/*
|
|
290
|
+
The dynamic marking, under the stave where it is read.
|
|
291
|
+
`Annotation` rather than VexFlow's `TextDynamics`, which is a
|
|
292
|
+
tickable and would need a voice of its own aligned to this one —
|
|
293
|
+
a whole parallel layout for a piece of text that belongs to a
|
|
294
|
+
note. Only on the first key of a chord: a dynamic marks the
|
|
295
|
+
moment, not each notehead in it.
|
|
296
|
+
*/
|
|
297
|
+
/*
|
|
298
|
+
The chord symbol, above the stave where a player reads it — the
|
|
299
|
+
opposite side from the lyric and the dynamic, which is what keeps
|
|
300
|
+
the three legible at once on a lead sheet.
|
|
301
|
+
*/
|
|
302
|
+
if (noteEvent.chordSymbol && keyIndex === 0) {
|
|
303
|
+
const symbol = new Annotation(noteEvent.chordSymbol);
|
|
304
|
+
symbol.setVerticalJustification(AnnotationVerticalJustify.TOP);
|
|
305
|
+
symbol.setFont('serif', 12, 'bold');
|
|
306
|
+
staveNote.addModifier(symbol, keyIndex);
|
|
307
|
+
}
|
|
308
|
+
/*
|
|
309
|
+
Ornaments, drawn small and ahead of the note they decorate.
|
|
310
|
+
|
|
311
|
+
A `GraceNoteGroup` is a modifier on the principal, which is the
|
|
312
|
+
same relationship the model stores — the notes are not tickables in
|
|
313
|
+
the voice and take none of the bar's time, so nothing that sums a
|
|
314
|
+
measure has to know they exist.
|
|
315
|
+
|
|
316
|
+
First key only: an ornament leads into the moment, not into each
|
|
317
|
+
notehead of a chord.
|
|
318
|
+
*/
|
|
319
|
+
if (noteEvent.graceNotes?.length && keyIndex === 0) {
|
|
320
|
+
const graceNotes = noteEvent.graceNotes.map(grace => {
|
|
321
|
+
const { code, dots } = ticksToVexDuration(grace.durationTicks, ppq);
|
|
322
|
+
return new GraceNote({
|
|
323
|
+
keys: [pitchToVexKey(grace.pitch)],
|
|
324
|
+
duration: code,
|
|
325
|
+
dots,
|
|
326
|
+
slash: grace.slashed ?? false,
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
const group = new GraceNoteGroup(graceNotes, true);
|
|
330
|
+
// Beamed when there is more than one, the way a run of ornaments
|
|
331
|
+
// is engraved.
|
|
332
|
+
if (graceNotes.length > 1)
|
|
333
|
+
group.beamNotes();
|
|
334
|
+
staveNote.addModifier(group, keyIndex);
|
|
335
|
+
}
|
|
336
|
+
/*
|
|
337
|
+
The sung syllable, under the stave.
|
|
338
|
+
|
|
339
|
+
Added before the dynamic so VexFlow's modifier context stacks it
|
|
340
|
+
nearest the notes, which is where a singer reads it — a dynamic
|
|
341
|
+
belongs below the words, not between them and the staff. A
|
|
342
|
+
hyphenated syllable prints its own trailing hyphen, because the
|
|
343
|
+
model records that the word continues and nothing else in the draw
|
|
344
|
+
path knows it.
|
|
345
|
+
*/
|
|
346
|
+
if (noteEvent.lyric && keyIndex === 0) {
|
|
347
|
+
const continues = noteEvent.lyric.syllabic === 'begin' ||
|
|
348
|
+
noteEvent.lyric.syllabic === 'middle';
|
|
349
|
+
const text = new Annotation(continues ? `${noteEvent.lyric.text}-` : noteEvent.lyric.text);
|
|
350
|
+
text.setVerticalJustification(AnnotationVerticalJustify.BOTTOM);
|
|
351
|
+
text.setFont('serif', 11, 'normal');
|
|
352
|
+
staveNote.addModifier(text, keyIndex);
|
|
353
|
+
}
|
|
354
|
+
if (noteEvent.dynamic && keyIndex === 0) {
|
|
355
|
+
const mark = new Annotation(noteEvent.dynamic);
|
|
356
|
+
mark.setVerticalJustification(AnnotationVerticalJustify.BOTTOM);
|
|
357
|
+
// Bold italic serif is how a dynamic is engraved, and is what
|
|
358
|
+
// distinguishes it from a lyric or a chord symbol at a glance.
|
|
359
|
+
mark.setFont('serif', 12, 'bold', 'italic');
|
|
360
|
+
staveNote.addModifier(mark, keyIndex);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
// Segment vexIds must be unique per drawn StaveNote: reuse the group's
|
|
365
|
+
// primary event id for the first segment (the common, non-decomposed
|
|
366
|
+
// case) so `#vf-<eventId>` resolves directly; later segments (only
|
|
367
|
+
// reached for the non-standard-duration fallback) get a suffix.
|
|
368
|
+
const vexId = isFirstSegment
|
|
369
|
+
? first.id
|
|
370
|
+
: `${first.id}::seg${segmentIndex}`;
|
|
371
|
+
staveNote.setAttribute('id', vexId);
|
|
372
|
+
// Every segment of a decomposed (non-standard-duration) note repeats
|
|
373
|
+
// the same chord keys, so per-key ties there are unconditional
|
|
374
|
+
// (`!isLastSegment` / `!isFirstSegment`) — only the *last* segment's
|
|
375
|
+
// outgoing tie and the *first* segment's incoming tie depend on the
|
|
376
|
+
// underlying domain event's own tieStart/tieStop.
|
|
377
|
+
const keyTies = isRest
|
|
378
|
+
? []
|
|
379
|
+
: group.map(event => {
|
|
380
|
+
const noteEvent = event;
|
|
381
|
+
return {
|
|
382
|
+
pitch: noteEvent.pitch,
|
|
383
|
+
tieStart: !isLastSegment || Boolean(noteEvent.tieStart),
|
|
384
|
+
tieStop: !isFirstSegment || Boolean(noteEvent.tieStop),
|
|
385
|
+
};
|
|
386
|
+
});
|
|
387
|
+
const tieStart = keyTies.some(k => k.tieStart);
|
|
388
|
+
const tieStop = keyTies.some(k => k.tieStop);
|
|
389
|
+
tickables.push(staveNote);
|
|
390
|
+
notes.push(staveNote);
|
|
391
|
+
metas.push({
|
|
392
|
+
vexId,
|
|
393
|
+
eventIds: group.map(e => e.id),
|
|
394
|
+
tieStart,
|
|
395
|
+
tieStop,
|
|
396
|
+
isRest,
|
|
397
|
+
keyTies,
|
|
398
|
+
// Only the segment a decomposed note actually begins or ends on can
|
|
399
|
+
// carry the mark, or a note split across a barline would sprout a
|
|
400
|
+
// curve at every join.
|
|
401
|
+
slurStart: isFirstSegment &&
|
|
402
|
+
group.some(e => isNoteEvent(e) && Boolean(e.slurStart)),
|
|
403
|
+
slurStop: isLastSegment &&
|
|
404
|
+
group.some(e => isNoteEvent(e) && Boolean(e.slurStop)),
|
|
405
|
+
// Same first/last-segment rule: a note decomposed across a barline
|
|
406
|
+
// must open its wedge once, not at every tied join.
|
|
407
|
+
hairpinStart: isFirstSegment
|
|
408
|
+
? (group.find(e => isNoteEvent(e) && e.hairpinStart)?.hairpinStart ?? null)
|
|
409
|
+
: null,
|
|
410
|
+
hairpinStop: isLastSegment &&
|
|
411
|
+
group.some(e => isNoteEvent(e) && Boolean(e.hairpinStop)),
|
|
412
|
+
ottavaStart: isFirstSegment
|
|
413
|
+
? (group.find(e => isNoteEvent(e) && e.ottavaStart)?.ottavaStart ?? null)
|
|
414
|
+
: null,
|
|
415
|
+
ottavaStop: isLastSegment &&
|
|
416
|
+
group.some(e => isNoteEvent(e) && Boolean(e.ottavaStop)),
|
|
417
|
+
glissandoStart: isFirstSegment &&
|
|
418
|
+
group.some(e => isNoteEvent(e) && Boolean(e.glissandoStart)),
|
|
419
|
+
glissandoStop: isLastSegment &&
|
|
420
|
+
group.some(e => isNoteEvent(e) && Boolean(e.glissandoStop)),
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
return { tickables, notes, metas };
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
|