@sudobility/music_types 0.11.29 → 0.11.31
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/domain/commands/edit-commands.d.ts +3 -3
- package/dist/domain/commands/edit-commands.d.ts.map +1 -1
- package/dist/domain/commands/edit-commands.js +25 -25
- package/dist/domain/commands/edit-commands.js.map +1 -1
- package/dist/domain/commands/history.d.ts +32 -0
- package/dist/domain/commands/history.d.ts.map +1 -0
- package/dist/domain/commands/history.js +63 -0
- package/dist/domain/commands/history.js.map +1 -0
- package/dist/domain/commands/note-commands.d.ts +147 -3
- package/dist/domain/commands/note-commands.d.ts.map +1 -1
- package/dist/domain/commands/note-commands.js +438 -46
- package/dist/domain/commands/note-commands.js.map +1 -1
- package/dist/domain/commands/reflow.d.ts +1 -1
- package/dist/domain/commands/reflow.js +17 -17
- package/dist/domain/commands/reflow.js.map +1 -1
- package/dist/domain/commands/region-commands.d.ts +4 -4
- package/dist/domain/commands/region-commands.d.ts.map +1 -1
- package/dist/domain/commands/region-commands.js +7 -7
- package/dist/domain/commands/region-commands.js.map +1 -1
- package/dist/domain/commands/relocate-commands.d.ts +3 -3
- package/dist/domain/commands/relocate-commands.js +15 -15
- package/dist/domain/commands/relocate-commands.js.map +1 -1
- package/dist/domain/commands/ripple-commands.d.ts +2 -2
- package/dist/domain/commands/ripple-commands.js +13 -13
- package/dist/domain/commands/ripple-commands.js.map +1 -1
- package/dist/domain/commands/snapshot.d.ts +3 -3
- package/dist/domain/commands/snapshot.js +5 -5
- package/dist/domain/commands/snapshot.js.map +1 -1
- package/dist/domain/commands/structure-commands.d.ts +86 -5
- package/dist/domain/commands/structure-commands.d.ts.map +1 -1
- package/dist/domain/commands/structure-commands.js +272 -36
- package/dist/domain/commands/structure-commands.js.map +1 -1
- package/dist/domain/commands/track-commands.d.ts +2 -2
- package/dist/domain/commands/track-commands.js +7 -7
- package/dist/domain/commands/track-commands.js.map +1 -1
- package/dist/domain/commands/types.d.ts +2 -2
- package/dist/domain/generation/replacement-region.d.ts +32 -0
- package/dist/domain/generation/replacement-region.d.ts.map +1 -0
- package/dist/domain/generation/replacement-region.js +79 -0
- package/dist/domain/generation/replacement-region.js.map +1 -0
- package/dist/domain/instruments/gm-icon.d.ts +12 -0
- package/dist/domain/instruments/gm-icon.d.ts.map +1 -0
- package/dist/domain/instruments/gm-icon.js +327 -0
- package/dist/domain/instruments/gm-icon.js.map +1 -0
- package/dist/domain/instruments/gm-kit.js +9 -9
- package/dist/domain/instruments/gm-kit.js.map +1 -1
- package/dist/domain/instruments/gm-percussion.js +48 -48
- package/dist/domain/instruments/gm-percussion.js.map +1 -1
- package/dist/domain/instruments/gm-polyphony.js +6 -6
- package/dist/domain/instruments/gm-range.js +6 -6
- package/dist/domain/instruments/gm-transposition.js +1 -1
- package/dist/domain/instruments/gm.d.ts +1 -1
- package/dist/domain/instruments/gm.js +161 -161
- package/dist/domain/instruments/gm.js.map +1 -1
- package/dist/domain/instruments/icon-art.d.ts +75 -0
- package/dist/domain/instruments/icon-art.d.ts.map +1 -0
- package/dist/domain/instruments/icon-art.js +93 -0
- package/dist/domain/instruments/icon-art.js.map +1 -0
- package/dist/domain/instruments/instrument-fit.d.ts +31 -0
- package/dist/domain/instruments/instrument-fit.d.ts.map +1 -0
- package/dist/domain/instruments/instrument-fit.js +117 -0
- package/dist/domain/instruments/instrument-fit.js.map +1 -0
- package/dist/domain/instruments/instrument-options.d.ts +62 -0
- package/dist/domain/instruments/instrument-options.d.ts.map +1 -0
- package/dist/domain/instruments/instrument-options.js +69 -0
- package/dist/domain/instruments/instrument-options.js.map +1 -0
- package/dist/domain/instruments/track-instrument.d.ts +80 -0
- package/dist/domain/instruments/track-instrument.d.ts.map +1 -0
- package/dist/domain/instruments/track-instrument.js +102 -0
- package/dist/domain/instruments/track-instrument.js.map +1 -0
- package/dist/domain/notation/chord-symbol.d.ts +26 -0
- package/dist/domain/notation/chord-symbol.d.ts.map +1 -0
- package/dist/domain/notation/chord-symbol.js +32 -0
- package/dist/domain/notation/chord-symbol.js.map +1 -0
- package/dist/domain/notation/lyric-syllables.d.ts +15 -0
- package/dist/domain/notation/lyric-syllables.d.ts.map +1 -0
- package/dist/domain/notation/lyric-syllables.js +15 -0
- package/dist/domain/notation/lyric-syllables.js.map +1 -0
- package/dist/domain/notation/music-vocabulary.d.ts +59 -0
- package/dist/domain/notation/music-vocabulary.d.ts.map +1 -0
- package/dist/domain/notation/music-vocabulary.js +164 -0
- package/dist/domain/notation/music-vocabulary.js.map +1 -0
- package/dist/domain/pitch/pitch.d.ts +1 -1
- package/dist/domain/pitch/pitch.js +29 -29
- package/dist/domain/pitch/transpose.d.ts +1 -1
- package/dist/domain/pitch/transpose.js +2 -2
- package/dist/domain/quantization/quantize.d.ts +2 -2
- package/dist/domain/quantization/quantize.js +9 -9
- package/dist/domain/quantization/quantize.js.map +1 -1
- package/dist/domain/score/articulation.d.ts +56 -0
- package/dist/domain/score/articulation.d.ts.map +1 -0
- package/dist/domain/score/articulation.js +56 -0
- package/dist/domain/score/articulation.js.map +1 -0
- package/dist/domain/score/bar-numbers.d.ts +38 -0
- package/dist/domain/score/bar-numbers.d.ts.map +1 -0
- package/dist/domain/score/bar-numbers.js +49 -0
- package/dist/domain/score/bar-numbers.js.map +1 -0
- package/dist/domain/score/collapse-rests.d.ts +23 -0
- package/dist/domain/score/collapse-rests.d.ts.map +1 -0
- package/dist/domain/score/collapse-rests.js +78 -0
- package/dist/domain/score/collapse-rests.js.map +1 -0
- package/dist/domain/score/cue-notes.d.ts +24 -0
- package/dist/domain/score/cue-notes.d.ts.map +1 -0
- package/dist/domain/score/cue-notes.js +105 -0
- package/dist/domain/score/cue-notes.js.map +1 -0
- package/dist/domain/score/dynamics.d.ts +62 -0
- package/dist/domain/score/dynamics.d.ts.map +1 -0
- package/dist/domain/score/dynamics.js +142 -0
- package/dist/domain/score/dynamics.js.map +1 -0
- package/dist/domain/score/effective-clef.d.ts +42 -0
- package/dist/domain/score/effective-clef.d.ts.map +1 -0
- package/dist/domain/score/effective-clef.js +39 -0
- package/dist/domain/score/effective-clef.js.map +1 -0
- package/dist/domain/score/extract-part.d.ts +10 -0
- package/dist/domain/score/extract-part.d.ts.map +1 -0
- package/dist/domain/score/extract-part.js +44 -0
- package/dist/domain/score/extract-part.js.map +1 -0
- package/dist/domain/score/factory.d.ts +1 -1
- package/dist/domain/score/factory.js +12 -12
- package/dist/domain/score/factory.js.map +1 -1
- package/dist/domain/score/fermata-tempo.d.ts +40 -0
- package/dist/domain/score/fermata-tempo.d.ts.map +1 -0
- package/dist/domain/score/fermata-tempo.js +95 -0
- package/dist/domain/score/fermata-tempo.js.map +1 -0
- package/dist/domain/score/flatten.d.ts +32 -0
- package/dist/domain/score/flatten.d.ts.map +1 -0
- package/dist/domain/score/flatten.js +132 -0
- package/dist/domain/score/flatten.js.map +1 -0
- package/dist/domain/score/fragment.d.ts +3 -3
- package/dist/domain/score/fragment.js +8 -8
- package/dist/domain/score/fragment.js.map +1 -1
- package/dist/domain/score/ids.d.ts +1 -1
- package/dist/domain/score/ids.js +6 -6
- package/dist/domain/score/ottava.d.ts +41 -0
- package/dist/domain/score/ottava.d.ts.map +1 -0
- package/dist/domain/score/ottava.js +98 -0
- package/dist/domain/score/ottava.js.map +1 -0
- package/dist/domain/score/performance-timeline.d.ts +42 -0
- package/dist/domain/score/performance-timeline.d.ts.map +1 -0
- package/dist/domain/score/performance-timeline.js +78 -0
- package/dist/domain/score/performance-timeline.js.map +1 -0
- package/dist/domain/score/queries.d.ts +2 -2
- package/dist/domain/score/queries.js +7 -7
- package/dist/domain/score/queries.js.map +1 -1
- package/dist/domain/score/rehearsal-marks.d.ts +30 -0
- package/dist/domain/score/rehearsal-marks.d.ts.map +1 -0
- package/dist/domain/score/rehearsal-marks.js +126 -0
- package/dist/domain/score/rehearsal-marks.js.map +1 -0
- package/dist/domain/score/repeat-order.d.ts +21 -0
- package/dist/domain/score/repeat-order.d.ts.map +1 -0
- package/dist/domain/score/repeat-order.js +123 -0
- package/dist/domain/score/repeat-order.js.map +1 -0
- package/dist/domain/score/snapshot-tree.d.ts +23 -0
- package/dist/domain/score/snapshot-tree.d.ts.map +1 -0
- package/dist/domain/score/snapshot-tree.js +45 -0
- package/dist/domain/score/snapshot-tree.js.map +1 -0
- package/dist/domain/score/ties.d.ts +1 -1
- package/dist/domain/score/ties.js +7 -7
- package/dist/domain/score/ties.js.map +1 -1
- package/dist/domain/score/written-pitch.d.ts +33 -0
- package/dist/domain/score/written-pitch.d.ts.map +1 -0
- package/dist/domain/score/written-pitch.js +110 -0
- package/dist/domain/score/written-pitch.js.map +1 -0
- package/dist/domain/selection/range-select.d.ts +13 -0
- package/dist/domain/selection/range-select.d.ts.map +1 -0
- package/dist/domain/selection/range-select.js +40 -0
- package/dist/domain/selection/range-select.js.map +1 -0
- package/dist/domain/selection/selection-editing.d.ts +30 -0
- package/dist/domain/selection/selection-editing.d.ts.map +1 -0
- package/dist/domain/selection/selection-editing.js +31 -0
- package/dist/domain/selection/selection-editing.js.map +1 -0
- package/dist/domain/selection/selection.d.ts +2 -2
- package/dist/domain/selection/selection.js +7 -7
- package/dist/domain/selection/selection.js.map +1 -1
- package/dist/domain/selection/types.d.ts +2 -2
- package/dist/domain/time/duration-modifiers.d.ts +40 -0
- package/dist/domain/time/duration-modifiers.d.ts.map +1 -0
- package/dist/domain/time/duration-modifiers.js +50 -0
- package/dist/domain/time/duration-modifiers.js.map +1 -0
- package/dist/domain/time/duration-selection.d.ts +23 -0
- package/dist/domain/time/duration-selection.d.ts.map +1 -0
- package/dist/domain/time/duration-selection.js +50 -0
- package/dist/domain/time/duration-selection.js.map +1 -0
- package/dist/domain/time/durations.js +6 -6
- package/dist/domain/time/durations.js.map +1 -1
- package/dist/domain/time/fraction.d.ts +1 -1
- package/dist/domain/time/fraction.js +1 -1
- package/dist/domain/time/tap-to-note.d.ts +21 -0
- package/dist/domain/time/tap-to-note.d.ts.map +1 -0
- package/dist/domain/time/tap-to-note.js +43 -0
- package/dist/domain/time/tap-to-note.js.map +1 -0
- package/dist/domain/time/tempo-map.d.ts +1 -1
- package/dist/domain/time/ticks.d.ts +1 -1
- package/dist/domain/time/ticks.d.ts.map +1 -1
- package/dist/domain/time/ticks.js +14 -14
- package/dist/domain/time/ticks.js.map +1 -1
- package/dist/domain/time/tuplets.d.ts +42 -0
- package/dist/domain/time/tuplets.d.ts.map +1 -0
- package/dist/domain/time/tuplets.js +53 -0
- package/dist/domain/time/tuplets.js.map +1 -0
- package/dist/domain/validation/issues.d.ts +1 -1
- package/dist/domain/validation/issues.js +20 -20
- package/dist/domain/validation/validator.d.ts +2 -2
- package/dist/domain/validation/validator.d.ts.map +1 -1
- package/dist/domain/validation/validator.js +31 -31
- package/dist/domain/validation/validator.js.map +1 -1
- package/dist/domain/voicing/allocate.d.ts +2 -2
- package/dist/domain/voicing/allocate.js +6 -6
- package/dist/domain/voicing/allocate.js.map +1 -1
- package/dist/index.d.ts +756 -56
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +164 -75
- package/dist/index.js.map +1 -1
- package/dist/platform/audio.d.ts.map +1 -1
- package/dist/platform/file.d.ts.map +1 -1
- package/dist/platform/index.d.ts +7 -7
- package/dist/platform/index.js +7 -7
- package/dist/platform/midi-input.d.ts +2 -2
- package/dist/platform/midi.d.ts.map +1 -1
- package/dist/platform/mod.d.ts +2 -2
- package/dist/platform/playback.d.ts +7 -7
- package/dist/platform/xml.js +1 -1
- package/dist/services/regeneration/controller.d.ts +6 -6
- package/dist/services/regeneration/controller.js +12 -12
- package/dist/services/regeneration/controller.js.map +1 -1
- package/dist/test/fixtures.d.ts +1 -1
- package/dist/test/fixtures.js +103 -103
- package/dist/test/fixtures.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-commands.js","sourceRoot":"","sources":["../../../src/domain/commands/track-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAa;IAC5D,OAAO,gBAAgB,CAAC,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"track-commands.js","sourceRoot":"","sources":["../../../src/domain/commands/track-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAa;IAC5D,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE7B,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClD,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC;gBAC3B,OAAO;oBACL,EAAE,EAAE,OAAO;oBACX,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBACnC,GAAG,KAAK;wBACR,EAAE,EAAE,QAAQ,EAAE;wBACd,OAAO;wBACP,OAAO,EAAE,EAAE;qBACZ,CAAC,CAAC;iBACJ,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,qEAAqE;YACrE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE;gBAC9C,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;SACxC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* and `undo` each take a `Score` and return a new `Score`, never mutating
|
|
4
4
|
* their input, holding a store reference, or performing I/O.
|
|
5
5
|
*/
|
|
6
|
-
import type { Score } from
|
|
6
|
+
import type { Score } from "../../index.js";
|
|
7
7
|
/**
|
|
8
8
|
* Whether a command changes the music or only how it is mixed.
|
|
9
9
|
*
|
|
@@ -14,7 +14,7 @@ import type { Score } from '../../index.js';
|
|
|
14
14
|
* only score change that can reach it is a mix change, which is what lets it
|
|
15
15
|
* push levels to the engine instead of reloading and resuming.
|
|
16
16
|
*/
|
|
17
|
-
export type CommandKind =
|
|
17
|
+
export type CommandKind = "content" | "mix";
|
|
18
18
|
export type ScoreCommand = {
|
|
19
19
|
id: string;
|
|
20
20
|
label: string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a Replace action will overwrite.
|
|
3
|
+
*
|
|
4
|
+
* Three scopes, one shape. The important one is `notes`: its range is the
|
|
5
|
+
* selected notes' exact tick span and is deliberately NOT snapped out to
|
|
6
|
+
* measure boundaries, which is what every other regeneration path does
|
|
7
|
+
* (`selectionToRange`, and through it `prepareRegenerationRequest`, always
|
|
8
|
+
* align). A caller that snaps this has changed the feature into Replace
|
|
9
|
+
* Measures.
|
|
10
|
+
*
|
|
11
|
+
* A non-contiguous selection is reported as its bounding span, so notes the
|
|
12
|
+
* user did not select can fall inside it. `unselectedNoteCount` exists so the
|
|
13
|
+
* UI can say so before anything is replaced, rather than leaving it to be
|
|
14
|
+
* discovered afterwards.
|
|
15
|
+
*/
|
|
16
|
+
import type { Score, ScoreRange, ScoreSelection } from "../../index.js";
|
|
17
|
+
export type ReplaceScope = "notes" | "measures" | "track";
|
|
18
|
+
export type ReplacementRegion = {
|
|
19
|
+
range: ScoreRange;
|
|
20
|
+
/** Whether `range` falls on measure boundaries. False only for `notes`. */
|
|
21
|
+
measureAligned: boolean;
|
|
22
|
+
/** How many notes fall inside `range` on `range.trackIds`. */
|
|
23
|
+
noteCount: number;
|
|
24
|
+
/** How many of those the user did not select — what the modal warns about. */
|
|
25
|
+
unselectedNoteCount: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The region a Replace action would overwrite, or `null` when the scope has
|
|
29
|
+
* nothing to work on — which is what disables its button.
|
|
30
|
+
*/
|
|
31
|
+
export declare function replacementRegion(score: Score, selection: ScoreSelection, activeTrackId: string | null, scope: ReplaceScope): ReplacementRegion | null;
|
|
32
|
+
//# sourceMappingURL=replacement-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replacement-region.d.ts","sourceRoot":"","sources":["../../../src/domain/generation/replacement-region.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIxE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAoCF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,KAAK,EAAE,YAAY,GAClB,iBAAiB,GAAG,IAAI,CAkE1B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isNoteEvent } from "../../index.js";
|
|
2
|
+
import { findEvent, findMeasure, findTrack } from "../score/queries.js";
|
|
3
|
+
/** Ids of every note overlapping `range` on its tracks. Overlap, not containment: a note straddling the boundary is replaced too. */
|
|
4
|
+
function noteIdsInRange(score, range) {
|
|
5
|
+
const ids = [];
|
|
6
|
+
for (const trackId of range.trackIds) {
|
|
7
|
+
const track = findTrack(score, trackId);
|
|
8
|
+
if (!track)
|
|
9
|
+
continue;
|
|
10
|
+
for (const measure of track.measures)
|
|
11
|
+
for (const voice of measure.voices)
|
|
12
|
+
for (const event of voice.events)
|
|
13
|
+
if (isNoteEvent(event) &&
|
|
14
|
+
event.startTick < range.endTick &&
|
|
15
|
+
event.startTick + event.durationTicks > range.startTick)
|
|
16
|
+
ids.push(event.id);
|
|
17
|
+
}
|
|
18
|
+
return ids;
|
|
19
|
+
}
|
|
20
|
+
function withCounts(score, range, measureAligned, selectedIds) {
|
|
21
|
+
const inRange = noteIdsInRange(score, range);
|
|
22
|
+
return {
|
|
23
|
+
range,
|
|
24
|
+
measureAligned,
|
|
25
|
+
noteCount: inRange.length,
|
|
26
|
+
unselectedNoteCount: inRange.filter((id) => !selectedIds.has(id)).length,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The region a Replace action would overwrite, or `null` when the scope has
|
|
31
|
+
* nothing to work on — which is what disables its button.
|
|
32
|
+
*/
|
|
33
|
+
export function replacementRegion(score, selection, activeTrackId, scope) {
|
|
34
|
+
if (scope === "track") {
|
|
35
|
+
const track = activeTrackId ? findTrack(score, activeTrackId) : null;
|
|
36
|
+
if (!track)
|
|
37
|
+
return null;
|
|
38
|
+
// Indexed rather than `.at(-1)`: this package targets ES2020 so it stays
|
|
39
|
+
// usable by the backend as well as the browser, and `.at` is ES2022.
|
|
40
|
+
const last = track.measures[track.measures.length - 1];
|
|
41
|
+
if (!last)
|
|
42
|
+
return null;
|
|
43
|
+
return withCounts(score, {
|
|
44
|
+
startTick: 0,
|
|
45
|
+
endTick: last.startTick + last.durationTicks,
|
|
46
|
+
trackIds: [track.id],
|
|
47
|
+
}, true, new Set());
|
|
48
|
+
}
|
|
49
|
+
if (scope === "measures") {
|
|
50
|
+
const measures = selection.measureIds
|
|
51
|
+
.map((id) => findMeasure(score, id))
|
|
52
|
+
.filter((m) => m !== null);
|
|
53
|
+
if (measures.length === 0)
|
|
54
|
+
return null;
|
|
55
|
+
// The selected ids already encode the track set: a gutter click selects the
|
|
56
|
+
// active track's measure, cmd-shift-click every track's.
|
|
57
|
+
const trackIds = [
|
|
58
|
+
...new Set(selection.measureIds
|
|
59
|
+
.map((id) => score.tracks.find((t) => t.measures.some((m) => m.id === id))?.id)
|
|
60
|
+
.filter((id) => id !== undefined)),
|
|
61
|
+
];
|
|
62
|
+
return withCounts(score, {
|
|
63
|
+
startTick: Math.min(...measures.map((m) => m.startTick)),
|
|
64
|
+
endTick: Math.max(...measures.map((m) => m.startTick + m.durationTicks)),
|
|
65
|
+
trackIds,
|
|
66
|
+
}, true, new Set());
|
|
67
|
+
}
|
|
68
|
+
const notes = selection.eventIds
|
|
69
|
+
.map((id) => findEvent(score, id))
|
|
70
|
+
.filter((e) => e !== null && isNoteEvent(e));
|
|
71
|
+
if (notes.length === 0)
|
|
72
|
+
return null;
|
|
73
|
+
return withCounts(score, {
|
|
74
|
+
startTick: Math.min(...notes.map((n) => n.startTick)),
|
|
75
|
+
endTick: Math.max(...notes.map((n) => n.startTick + n.durationTicks)),
|
|
76
|
+
trackIds: [...new Set(notes.map((n) => n.trackId))],
|
|
77
|
+
}, false, new Set(notes.map((n) => n.id)));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=replacement-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replacement-region.js","sourceRoot":"","sources":["../../../src/domain/generation/replacement-region.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InstrumentIconArt } from "./icon-art.js";
|
|
2
|
+
/**
|
|
3
|
+
* The art for a drum kit.
|
|
4
|
+
*
|
|
5
|
+
* Not reachable through `gmInstrumentIcon`: a kit is addressed by a program
|
|
6
|
+
* number that means something else entirely in the melodic table — Brush is 40,
|
|
7
|
+
* where the instrument art is a violin.
|
|
8
|
+
*/
|
|
9
|
+
export declare function gmKitIcon(): InstrumentIconArt;
|
|
10
|
+
/** The hand-picked art for `program`, else its family's. */
|
|
11
|
+
export declare function gmInstrumentIcon(program: number): InstrumentIconArt;
|
|
12
|
+
//# sourceMappingURL=gm-icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gm-icon.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-icon.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAiTvD;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI,iBAAiB,CAE7C;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAOnE"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Line art per General MIDI program: hand-picked for the instruments people
|
|
3
|
+
* actually reach for, family fallback for the rest, so all 128 resolve.
|
|
4
|
+
*
|
|
5
|
+
* Single-colour strokes on a 24x24 grid (`icon-art.ts`), drawn with no fill.
|
|
6
|
+
* This replaced an emoji table, which had three problems a label-sized glyph
|
|
7
|
+
* beside coloured staves could not carry: emoji render differently on every
|
|
8
|
+
* platform, do not render at all where no emoji font is installed (a bare
|
|
9
|
+
* headless browser, some Linux images), and cannot be recoloured — so the
|
|
10
|
+
* gutter's icon stayed multicoloured while its text tracked the active-track
|
|
11
|
+
* colour. Strokes take the caller's colour, so the icon now dims with the
|
|
12
|
+
* track name beside it.
|
|
13
|
+
*
|
|
14
|
+
* The set is smaller than the mapping: several programs share art on purpose,
|
|
15
|
+
* exactly as the emoji table had four programs on one piano glyph. Bass borrows
|
|
16
|
+
* the guitar body — at this size a bass silhouette differs only in proportion,
|
|
17
|
+
* and a distinct-but-unreadable icon is worse than an honest shared one.
|
|
18
|
+
*
|
|
19
|
+
* It lives beside the catalogue rather than in the app because the canvas
|
|
20
|
+
* renderer draws it into the track gutter too, and one table beats passing a
|
|
21
|
+
* per-track art map in as a render option.
|
|
22
|
+
*/
|
|
23
|
+
import { gmFamilyOf, gmInstrument } from "./gm.js";
|
|
24
|
+
/** A keyboard: three white keys, three black keys sitting on top of them. */
|
|
25
|
+
const PIANO = {
|
|
26
|
+
name: "piano",
|
|
27
|
+
shapes: [
|
|
28
|
+
{ kind: "path", d: "M3 8 L21 8 L21 16 L3 16 Z" },
|
|
29
|
+
{ kind: "path", d: "M9 8 L9 16" },
|
|
30
|
+
{ kind: "path", d: "M15 8 L15 16" },
|
|
31
|
+
{ kind: "path", d: "M6 8 L6 12.6" },
|
|
32
|
+
{ kind: "path", d: "M12 8 L12 12.6" },
|
|
33
|
+
{ kind: "path", d: "M18 8 L18 12.6" },
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A bell — glockenspiel, celesta, tubular bells, music box. Vibraphone and
|
|
38
|
+
* marimba are struck bars rather than bells, but every bar-and-mallet drawing
|
|
39
|
+
* of them read as a text-align icon, and a struck metal bar is near enough.
|
|
40
|
+
*/
|
|
41
|
+
const BELL = {
|
|
42
|
+
name: "bell",
|
|
43
|
+
shapes: [
|
|
44
|
+
{
|
|
45
|
+
kind: "path",
|
|
46
|
+
d: "M12 4 C8.6 4 7.2 7 7.2 11 C7.2 13.8 6.2 15.4 5.4 16.6 L18.6 16.6 C17.8 15.4 16.8 13.8 16.8 11 C16.8 7 15.4 4 12 4 Z",
|
|
47
|
+
},
|
|
48
|
+
{ kind: "path", d: "M12 4 L12 2.2" },
|
|
49
|
+
{ kind: "circle", cx: 12, cy: 19, r: 1.4 },
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
/** Pipes of differing length on a common foot. */
|
|
53
|
+
const ORGAN = {
|
|
54
|
+
name: "organ",
|
|
55
|
+
shapes: [
|
|
56
|
+
{ kind: "path", d: "M3 19 L21 19" },
|
|
57
|
+
{ kind: "path", d: "M6 19 L6 6" },
|
|
58
|
+
{ kind: "path", d: "M10 19 L10 9.5" },
|
|
59
|
+
{ kind: "path", d: "M14 19 L14 4.5" },
|
|
60
|
+
{ kind: "path", d: "M18 19 L18 8" },
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
/** Two end panels with the bellows zigzagging between them. */
|
|
64
|
+
const ACCORDION = {
|
|
65
|
+
name: "accordion",
|
|
66
|
+
shapes: [
|
|
67
|
+
{ kind: "path", d: "M3 5 L6.5 5 L6.5 19 L3 19 Z" },
|
|
68
|
+
{ kind: "path", d: "M17.5 5 L21 5 L21 19 L17.5 19 Z" },
|
|
69
|
+
{ kind: "path", d: "M6.5 8 L17.5 8 L17.5 16 L6.5 16 Z" },
|
|
70
|
+
{ kind: "path", d: "M9.25 8 L9.25 16" },
|
|
71
|
+
{ kind: "path", d: "M12 8 L12 16" },
|
|
72
|
+
{ kind: "path", d: "M14.75 8 L14.75 16" },
|
|
73
|
+
{ kind: "circle", cx: 4.75, cy: 8, r: 0.9 },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
/** A comb: wide, short, split down the middle. */
|
|
77
|
+
const HARMONICA = {
|
|
78
|
+
name: "harmonica",
|
|
79
|
+
shapes: [
|
|
80
|
+
{ kind: "path", d: "M3 9.5 L21 9.5 L21 14.5 L3 14.5 Z" },
|
|
81
|
+
{ kind: "path", d: "M3 12 L21 12" },
|
|
82
|
+
{ kind: "path", d: "M7.5 9.5 L7.5 14.5" },
|
|
83
|
+
{ kind: "path", d: "M12 9.5 L12 14.5" },
|
|
84
|
+
{ kind: "path", d: "M16.5 9.5 L16.5 14.5" },
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
/** A waisted body with a round sound hole and a straight neck. Bass borrows it. */
|
|
88
|
+
const GUITAR = {
|
|
89
|
+
name: "guitar",
|
|
90
|
+
shapes: [
|
|
91
|
+
{
|
|
92
|
+
kind: "path",
|
|
93
|
+
d: "M12 10 C9.8 10 8.4 11.2 8.4 12.8 C8.4 14.2 9.6 14.6 9.6 15.8 C9.6 17 7.4 17.4 7.4 18.8 C7.4 20.4 9.6 21.5 12 21.5 C14.4 21.5 16.6 20.4 16.6 18.8 C16.6 17.4 14.4 17 14.4 15.8 C14.4 14.6 15.6 14.2 15.6 12.8 C15.6 11.2 14.2 10 12 10 Z",
|
|
94
|
+
},
|
|
95
|
+
{ kind: "path", d: "M12 10 L12 3.2" },
|
|
96
|
+
{ kind: "path", d: "M10.3 3.2 L13.7 3.2" },
|
|
97
|
+
{ kind: "circle", cx: 12, cy: 17.4, r: 1.4 },
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
/** A narrower waisted body with f-holes and a scroll. */
|
|
101
|
+
const VIOLIN = {
|
|
102
|
+
name: "violin",
|
|
103
|
+
shapes: [
|
|
104
|
+
{
|
|
105
|
+
kind: "path",
|
|
106
|
+
d: "M12 11 C10.3 11 9.2 12 9.2 13.3 C9.2 14.4 10.3 14.8 10.3 15.8 C10.3 16.9 8.8 17.3 8.8 18.6 C8.8 20 10.2 21 12 21 C13.8 21 15.2 20 15.2 18.6 C15.2 17.3 13.7 16.9 13.7 15.8 C13.7 14.8 14.8 14.4 14.8 13.3 C14.8 12 13.7 11 12 11 Z",
|
|
107
|
+
},
|
|
108
|
+
{ kind: "path", d: "M12 11 L12 5.4" },
|
|
109
|
+
{ kind: "path", d: "M10.5 17.2 L10.5 19.2" },
|
|
110
|
+
{ kind: "path", d: "M13.5 17.2 L13.5 19.2" },
|
|
111
|
+
{ kind: "circle", cx: 12, cy: 4.3, r: 1.2 },
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
/** A staff with a note on it — the written part, for the ensemble families. */
|
|
115
|
+
const ENSEMBLE = {
|
|
116
|
+
name: "ensemble",
|
|
117
|
+
shapes: [
|
|
118
|
+
{ kind: "path", d: "M3 7 L21 7" },
|
|
119
|
+
{ kind: "path", d: "M3 10 L21 10" },
|
|
120
|
+
{ kind: "path", d: "M3 13 L21 13" },
|
|
121
|
+
{ kind: "path", d: "M3 16 L21 16" },
|
|
122
|
+
{ kind: "path", d: "M10.6 15.5 L10.6 6" },
|
|
123
|
+
{ kind: "path", d: "M10.6 6 C13 6.6 14.4 8 14.6 10" },
|
|
124
|
+
{ kind: "circle", cx: 8.5, cy: 15.5, r: 2.1 },
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
/** A microphone on a stand — the voice families. */
|
|
128
|
+
const VOICE = {
|
|
129
|
+
name: "voice",
|
|
130
|
+
shapes: [
|
|
131
|
+
{
|
|
132
|
+
kind: "path",
|
|
133
|
+
d: "M12 3 C10.3 3 9 4.3 9 6 L9 11 C9 12.7 10.3 14 12 14 C13.7 14 15 12.7 15 11 L15 6 C15 4.3 13.7 3 12 3 Z",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
kind: "path",
|
|
137
|
+
d: "M6.5 10.5 C6.5 15 9 17.5 12 17.5 C15 17.5 17.5 15 17.5 10.5",
|
|
138
|
+
},
|
|
139
|
+
{ kind: "path", d: "M12 17.5 L12 21" },
|
|
140
|
+
{ kind: "path", d: "M8.5 21 L15.5 21" },
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
/** Mouthpiece, valves and a flared bell. */
|
|
144
|
+
const BRASS = {
|
|
145
|
+
name: "brass",
|
|
146
|
+
shapes: [
|
|
147
|
+
{ kind: "path", d: "M5.2 12 L14 12" },
|
|
148
|
+
{ kind: "path", d: "M14 12 L20 6.5" },
|
|
149
|
+
{ kind: "path", d: "M14 12 L20 17.5" },
|
|
150
|
+
{ kind: "path", d: "M20 6.5 C21.6 9 21.6 15 20 17.5" },
|
|
151
|
+
{ kind: "path", d: "M8 12 L8 8.5" },
|
|
152
|
+
{ kind: "path", d: "M10.4 12 L10.4 8.5" },
|
|
153
|
+
{ kind: "path", d: "M12.8 12 L12.8 8.5" },
|
|
154
|
+
{ kind: "circle", cx: 3.9, cy: 12, r: 1.3 },
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
/** The hooked body and upturned bell of a saxophone, with two keys. */
|
|
158
|
+
const SAX = {
|
|
159
|
+
name: "sax",
|
|
160
|
+
shapes: [
|
|
161
|
+
{ kind: "path", d: "M15.5 3.5 L15.5 12.5 C15.5 17 11.9 20.5 7.7 20.5" },
|
|
162
|
+
{ kind: "path", d: "M7.7 20.5 C4.9 20.5 3.5 18.1 4.2 15.6" },
|
|
163
|
+
{ kind: "path", d: "M7.7 20.5 C7.2 18.7 7.2 17.4 7.6 16.2" },
|
|
164
|
+
{ kind: "path", d: "M4.2 15.6 L7.6 16.2" },
|
|
165
|
+
{ kind: "path", d: "M15.5 3.5 L13.4 2.3" },
|
|
166
|
+
{ kind: "circle", cx: 17.1, cy: 7, r: 0.85 },
|
|
167
|
+
{ kind: "circle", cx: 17.1, cy: 10, r: 0.85 },
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
/** A straight tube with finger holes — flute, recorder, clarinet, piccolo. */
|
|
171
|
+
const PIPE = {
|
|
172
|
+
name: "pipe",
|
|
173
|
+
shapes: [
|
|
174
|
+
{ kind: "path", d: "M3.5 17.5 L17.5 3.5" },
|
|
175
|
+
{ kind: "path", d: "M6.5 20.5 L20.5 6.5" },
|
|
176
|
+
{ kind: "path", d: "M3.5 17.5 L6.5 20.5" },
|
|
177
|
+
{ kind: "path", d: "M17.5 3.5 L20.5 6.5" },
|
|
178
|
+
{ kind: "circle", cx: 9.2, cy: 14.8, r: 0.8 },
|
|
179
|
+
{ kind: "circle", cx: 12, cy: 12, r: 0.8 },
|
|
180
|
+
{ kind: "circle", cx: 14.8, cy: 9.2, r: 0.8 },
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
/** A panel of sliders — the synth-lead family. */
|
|
184
|
+
const SYNTH = {
|
|
185
|
+
name: "synth",
|
|
186
|
+
shapes: [
|
|
187
|
+
{ kind: "path", d: "M3 6 L21 6 L21 18 L3 18 Z" },
|
|
188
|
+
{ kind: "path", d: "M6.5 10 L17.5 10" },
|
|
189
|
+
{ kind: "path", d: "M6.5 14 L17.5 14" },
|
|
190
|
+
{ kind: "circle", cx: 9.5, cy: 10, r: 1.5 },
|
|
191
|
+
{ kind: "circle", cx: 14.5, cy: 14, r: 1.5 },
|
|
192
|
+
],
|
|
193
|
+
};
|
|
194
|
+
/** A slow wave — the synth pads. */
|
|
195
|
+
const PAD = {
|
|
196
|
+
name: "pad",
|
|
197
|
+
shapes: [
|
|
198
|
+
{
|
|
199
|
+
kind: "path",
|
|
200
|
+
d: "M2.5 12 C4.5 5 6.5 5 8.5 12 C10.5 19 12.5 19 14.5 12 C16.2 6 18.6 6 21.5 10",
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
};
|
|
204
|
+
/** A star and a spark — the synth effects, which are gestures rather than instruments. */
|
|
205
|
+
const SPARKLE = {
|
|
206
|
+
name: "sparkle",
|
|
207
|
+
shapes: [
|
|
208
|
+
{
|
|
209
|
+
kind: "path",
|
|
210
|
+
d: "M12 3 C12 8 14 10 19 12 C14 14 12 16 12 21 C12 16 10 14 5 12 C10 10 12 8 12 3 Z",
|
|
211
|
+
},
|
|
212
|
+
{ kind: "path", d: "M19.5 3.5 L19.5 7.5" },
|
|
213
|
+
{ kind: "path", d: "M17.5 5.5 L21.5 5.5" },
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
/** A round-bodied, long-necked instrument — sitar, banjo, shamisen. */
|
|
217
|
+
const ETHNIC = {
|
|
218
|
+
name: "ethnic",
|
|
219
|
+
shapes: [
|
|
220
|
+
{ kind: "path", d: "M12 12 L19.5 4.5" },
|
|
221
|
+
{ kind: "path", d: "M18.3 3.3 L20.7 5.7" },
|
|
222
|
+
{ kind: "circle", cx: 8.6, cy: 15.4, r: 4.8 },
|
|
223
|
+
{ kind: "circle", cx: 8.6, cy: 15.4, r: 1.5 },
|
|
224
|
+
],
|
|
225
|
+
};
|
|
226
|
+
/** A shell with an elliptical head. */
|
|
227
|
+
const DRUM = {
|
|
228
|
+
name: "drum",
|
|
229
|
+
shapes: [
|
|
230
|
+
{
|
|
231
|
+
kind: "path",
|
|
232
|
+
d: "M20 8 C20 9.66 16.42 11 12 11 C7.58 11 4 9.66 4 8 C4 6.34 7.58 5 12 5 C16.42 5 20 6.34 20 8 Z",
|
|
233
|
+
},
|
|
234
|
+
{ kind: "path", d: "M4 8 L4 16" },
|
|
235
|
+
{ kind: "path", d: "M20 8 L20 16" },
|
|
236
|
+
{ kind: "path", d: "M4 10.5 L8 15.5 L12 10.5 L16 15.5 L20 10.5" },
|
|
237
|
+
{
|
|
238
|
+
kind: "path",
|
|
239
|
+
d: "M4 16 C4 17.66 7.58 19 12 19 C16.42 19 20 17.66 20 16",
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
};
|
|
243
|
+
/** A speaker cabinet — the sound-effects family, which is playback, not performance. */
|
|
244
|
+
const SPEAKER = {
|
|
245
|
+
name: "speaker",
|
|
246
|
+
shapes: [
|
|
247
|
+
{ kind: "path", d: "M5 3 L19 3 L19 21 L5 21 Z" },
|
|
248
|
+
{ kind: "circle", cx: 12, cy: 14.5, r: 3.6 },
|
|
249
|
+
{ kind: "circle", cx: 12, cy: 7, r: 1.6 },
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
/** Hand-picked art for the instruments people actually reach for. */
|
|
253
|
+
const PROGRAM_ICON = {
|
|
254
|
+
0: PIANO, // Acoustic Grand Piano
|
|
255
|
+
1: PIANO, // Bright Acoustic Piano
|
|
256
|
+
4: PIANO, // Electric Piano 1
|
|
257
|
+
6: PIANO, // Harpsichord
|
|
258
|
+
11: BELL, // Vibraphone
|
|
259
|
+
16: ORGAN, // Drawbar Organ
|
|
260
|
+
19: ORGAN, // Church Organ
|
|
261
|
+
21: ACCORDION, // Accordion
|
|
262
|
+
22: HARMONICA, // Harmonica
|
|
263
|
+
24: GUITAR, // Acoustic Guitar (nylon)
|
|
264
|
+
25: GUITAR, // Acoustic Guitar (steel)
|
|
265
|
+
27: GUITAR, // Electric Guitar (clean)
|
|
266
|
+
30: GUITAR, // Distortion Guitar
|
|
267
|
+
32: GUITAR, // Acoustic Bass
|
|
268
|
+
33: GUITAR, // Electric Bass (finger)
|
|
269
|
+
40: VIOLIN, // Violin
|
|
270
|
+
42: VIOLIN, // Cello
|
|
271
|
+
48: VIOLIN, // String Ensemble 1
|
|
272
|
+
52: VOICE, // Choir Aahs
|
|
273
|
+
56: BRASS, // Trumpet
|
|
274
|
+
57: BRASS, // Trombone
|
|
275
|
+
58: BRASS, // Tuba
|
|
276
|
+
64: SAX, // Soprano Sax
|
|
277
|
+
65: SAX, // Alto Sax
|
|
278
|
+
66: SAX, // Tenor Sax
|
|
279
|
+
71: PIPE, // Clarinet — straight-bodied, so the tube reads truer than the sax hook
|
|
280
|
+
72: PIPE, // Piccolo
|
|
281
|
+
73: PIPE, // Flute
|
|
282
|
+
74: PIPE, // Recorder
|
|
283
|
+
104: ETHNIC, // Sitar
|
|
284
|
+
105: ETHNIC, // Banjo
|
|
285
|
+
114: DRUM, // Steel Drums
|
|
286
|
+
116: DRUM, // Taiko Drum
|
|
287
|
+
};
|
|
288
|
+
/** Every family has one, so all 128 programs resolve to something. */
|
|
289
|
+
const FAMILY_ICON = {
|
|
290
|
+
piano: PIANO,
|
|
291
|
+
"chromatic-percussion": BELL,
|
|
292
|
+
organ: ORGAN,
|
|
293
|
+
guitar: GUITAR,
|
|
294
|
+
bass: GUITAR,
|
|
295
|
+
strings: VIOLIN,
|
|
296
|
+
ensemble: ENSEMBLE,
|
|
297
|
+
brass: BRASS,
|
|
298
|
+
reed: SAX,
|
|
299
|
+
pipe: PIPE,
|
|
300
|
+
"synth-lead": SYNTH,
|
|
301
|
+
"synth-pad": PAD,
|
|
302
|
+
"synth-effects": SPARKLE,
|
|
303
|
+
ethnic: ETHNIC,
|
|
304
|
+
percussive: DRUM,
|
|
305
|
+
"sound-effects": SPEAKER,
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* The art for a drum kit.
|
|
309
|
+
*
|
|
310
|
+
* Not reachable through `gmInstrumentIcon`: a kit is addressed by a program
|
|
311
|
+
* number that means something else entirely in the melodic table — Brush is 40,
|
|
312
|
+
* where the instrument art is a violin.
|
|
313
|
+
*/
|
|
314
|
+
export function gmKitIcon() {
|
|
315
|
+
return DRUM;
|
|
316
|
+
}
|
|
317
|
+
/** The hand-picked art for `program`, else its family's. */
|
|
318
|
+
export function gmInstrumentIcon(program) {
|
|
319
|
+
const picked = PROGRAM_ICON[program];
|
|
320
|
+
if (picked)
|
|
321
|
+
return picked;
|
|
322
|
+
// An out-of-range program has no family; fall back rather than draw blank.
|
|
323
|
+
return gmInstrument(program)
|
|
324
|
+
? FAMILY_ICON[gmFamilyOf(program)]
|
|
325
|
+
: FAMILY_ICON.piano;
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=gm-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gm-icon.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-icon.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,18 +23,18 @@
|
|
|
23
23
|
* arithmetically the way instrument families can.
|
|
24
24
|
*/
|
|
25
25
|
export const GM_KITS = [
|
|
26
|
-
{ program: 0, name:
|
|
27
|
-
{ program: 8, name:
|
|
28
|
-
{ program: 16, name:
|
|
29
|
-
{ program: 24, name:
|
|
30
|
-
{ program: 25, name:
|
|
31
|
-
{ program: 32, name:
|
|
32
|
-
{ program: 40, name:
|
|
33
|
-
{ program: 48, name:
|
|
26
|
+
{ program: 0, name: "Standard Kit" },
|
|
27
|
+
{ program: 8, name: "Room Kit" },
|
|
28
|
+
{ program: 16, name: "Power Kit" },
|
|
29
|
+
{ program: 24, name: "Electronic Kit" },
|
|
30
|
+
{ program: 25, name: "TR-808 Kit" },
|
|
31
|
+
{ program: 32, name: "Jazz Kit" },
|
|
32
|
+
{ program: 40, name: "Brush Kit" },
|
|
33
|
+
{ program: 48, name: "Orchestra Kit" },
|
|
34
34
|
];
|
|
35
35
|
/** The kit at exactly `program`, or `null` where no kit is defined there. */
|
|
36
36
|
export function gmKit(program) {
|
|
37
|
-
return GM_KITS.find(kit => kit.program === program) ?? null;
|
|
37
|
+
return GM_KITS.find((kit) => kit.program === program) ?? null;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* The kit whose region contains `program` — always an answer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gm-kit.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;IACpC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IAChC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAClC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACvC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;IACnC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IACjC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAClC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;CACvC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"gm-kit.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;IACpC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;IAChC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAClC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACvC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;IACnC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IACjC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAClC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;CACvC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO;YAAE,KAAK,GAAG,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|