@sudobility/music_types 0.13.17 → 0.13.19
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/CLAUDE.md +7 -3
- package/dist/domain/commands/clipboard-commands.d.ts +41 -0
- package/dist/domain/commands/clipboard-commands.d.ts.map +1 -0
- package/dist/domain/commands/clipboard-commands.js +246 -0
- package/dist/domain/commands/clipboard-commands.js.map +1 -0
- package/dist/domain/generation/replacement-region.d.ts.map +1 -1
- package/dist/domain/generation/replacement-region.js +3 -0
- package/dist/domain/generation/replacement-region.js.map +1 -1
- package/dist/domain/generation/style-presets.d.ts +34 -0
- package/dist/domain/generation/style-presets.d.ts.map +1 -0
- package/dist/domain/generation/style-presets.js +274 -0
- package/dist/domain/generation/style-presets.js.map +1 -0
- package/dist/domain/instruments/arrangement-order.d.ts +13 -0
- package/dist/domain/instruments/arrangement-order.d.ts.map +1 -1
- package/dist/domain/instruments/arrangement-order.js +51 -6
- package/dist/domain/instruments/arrangement-order.js.map +1 -1
- package/dist/domain/notation/music-vocabulary.d.ts +36 -0
- package/dist/domain/notation/music-vocabulary.d.ts.map +1 -1
- package/dist/domain/notation/music-vocabulary.js +41 -0
- package/dist/domain/notation/music-vocabulary.js.map +1 -1
- package/dist/domain/notation/notation-icon-art.d.ts +10 -10
- package/dist/domain/notation/notation-icon-art.d.ts.map +1 -1
- package/dist/domain/notation/notation-icon-art.js +850 -817
- package/dist/domain/notation/notation-icon-art.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/generation.d.ts +42 -1
- package/dist/model/generation.d.ts.map +1 -1
- package/dist/model/generation.js +34 -1
- package/dist/model/generation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { measuresForSeconds, SONG_SECONDS, } from "../notation/music-vocabulary.js";
|
|
2
|
+
/**
|
|
3
|
+
* The keyword values the generation prompt parser branches on.
|
|
4
|
+
*
|
|
5
|
+
* These are shared product data: the app offers them, and the backend needs to
|
|
6
|
+
* know that every offered prompt phrase has genre mechanics.
|
|
7
|
+
*/
|
|
8
|
+
const GENERATE_SCORE_STYLE_KEYS = [
|
|
9
|
+
"waltz",
|
|
10
|
+
"jazz",
|
|
11
|
+
"pop",
|
|
12
|
+
"cinematic",
|
|
13
|
+
"ambient",
|
|
14
|
+
"battle",
|
|
15
|
+
"rock",
|
|
16
|
+
"punk",
|
|
17
|
+
"heavyMetal",
|
|
18
|
+
"blues",
|
|
19
|
+
"country",
|
|
20
|
+
"bluegrass",
|
|
21
|
+
"funk",
|
|
22
|
+
"soul",
|
|
23
|
+
"ragtime",
|
|
24
|
+
"swing",
|
|
25
|
+
"bossaNova",
|
|
26
|
+
"samba",
|
|
27
|
+
"salsa",
|
|
28
|
+
"tango",
|
|
29
|
+
"reggae",
|
|
30
|
+
"hipHop",
|
|
31
|
+
"trap",
|
|
32
|
+
"lofi",
|
|
33
|
+
"house",
|
|
34
|
+
"techno",
|
|
35
|
+
"trance",
|
|
36
|
+
"edm",
|
|
37
|
+
"electroSwing",
|
|
38
|
+
"disco",
|
|
39
|
+
"classical",
|
|
40
|
+
"baroque",
|
|
41
|
+
"march",
|
|
42
|
+
];
|
|
43
|
+
export const GENERATE_SCORE_STYLE_OPTIONS = GENERATE_SCORE_STYLE_KEYS;
|
|
44
|
+
const KIT = "kit:0";
|
|
45
|
+
const STYLE_PRESET_SOURCE = {
|
|
46
|
+
waltz: {
|
|
47
|
+
prompt: 'waltz — a lilting three-four with the weight on beat one and a light "oom-pah-pah" accompaniment',
|
|
48
|
+
instruments: ["0", "48", "43"],
|
|
49
|
+
tempo: 160,
|
|
50
|
+
timeSignature: "3/4",
|
|
51
|
+
},
|
|
52
|
+
jazz: {
|
|
53
|
+
prompt: "jazz — swung eighth notes, walking bass, extended chords, and a melody that phrases across the barline rather than sitting on the beat",
|
|
54
|
+
instruments: ["66", "0", "32", KIT],
|
|
55
|
+
tempo: 132,
|
|
56
|
+
timeSignature: "4/4",
|
|
57
|
+
},
|
|
58
|
+
pop: {
|
|
59
|
+
prompt: "pop — a clear singable hook, four-bar phrases, a backbeat on two and four, and space between the phrases",
|
|
60
|
+
instruments: ["0", "27", "33", KIT],
|
|
61
|
+
tempo: 120,
|
|
62
|
+
timeSignature: "4/4",
|
|
63
|
+
},
|
|
64
|
+
cinematic: {
|
|
65
|
+
prompt: "cinematic orchestral — long sustained lines that build, a rising dynamic arc, and rhythm that serves the swell rather than a groove",
|
|
66
|
+
instruments: ["48", "40", "42", "60", "47"],
|
|
67
|
+
tempo: 90,
|
|
68
|
+
timeSignature: "4/4",
|
|
69
|
+
mode: "minor",
|
|
70
|
+
},
|
|
71
|
+
ambient: {
|
|
72
|
+
prompt: "ambient — slow evolving pads, very long note values, no strong pulse, and silence used as a voice",
|
|
73
|
+
instruments: ["89", "0", "48"],
|
|
74
|
+
tempo: 70,
|
|
75
|
+
timeSignature: "4/4",
|
|
76
|
+
},
|
|
77
|
+
battle: {
|
|
78
|
+
prompt: "driving battle music — insistent ostinato, hard accents, brass stabs against a relentless low pulse",
|
|
79
|
+
instruments: ["61", "48", "47", KIT],
|
|
80
|
+
tempo: 150,
|
|
81
|
+
timeSignature: "4/4",
|
|
82
|
+
mode: "minor",
|
|
83
|
+
},
|
|
84
|
+
rock: {
|
|
85
|
+
prompt: "rock — a hard backbeat on two and four, power-chord riffing, and a bass locked to the kick",
|
|
86
|
+
instruments: ["29", "27", "33", KIT],
|
|
87
|
+
tempo: 128,
|
|
88
|
+
timeSignature: "4/4",
|
|
89
|
+
},
|
|
90
|
+
punk: {
|
|
91
|
+
prompt: "punk — fast straight eighths on downstrokes, three chords, no ornament, and a snare driving every backbeat. The guitar figure repeats unchanged through a section; the energy comes from the tempo and the drive, never from varying the part.",
|
|
92
|
+
instruments: ["30", "29", "34", KIT],
|
|
93
|
+
tempo: 180,
|
|
94
|
+
timeSignature: "4/4",
|
|
95
|
+
},
|
|
96
|
+
heavyMetal: {
|
|
97
|
+
prompt: "heavy metal — built on ONE palm-muted galloping low riff, repeated bar after bar through a section rather than rewritten each bar; minor and modal, double-kick drive underneath, and long held high notes over the top. The riff is the song: keep it the same and let the drums and the held lead supply the variation. ONE riff means one FIGURE, not one note - the riff moves between several pitches (root, flat-7, flat-6 and back is the classic shape), and a bar of the same pitch struck eight times is a pedal, not a riff.",
|
|
98
|
+
instruments: ["30", "29", "34", KIT],
|
|
99
|
+
tempo: 152,
|
|
100
|
+
timeSignature: "4/4",
|
|
101
|
+
mode: "minor",
|
|
102
|
+
},
|
|
103
|
+
blues: {
|
|
104
|
+
formBars: 12,
|
|
105
|
+
prompt: "twelve-bar blues — shuffle feel, blue notes and bends, call-and-response between a voice-like melody and answering fills, dominant seventh chords",
|
|
106
|
+
instruments: ["27", "22", "33", KIT],
|
|
107
|
+
tempo: 88,
|
|
108
|
+
timeSignature: "4/4",
|
|
109
|
+
},
|
|
110
|
+
country: {
|
|
111
|
+
prompt: 'country — a two-beat "boom-chick" bass and guitar, bright major harmony, fiddle and steel fills answering the melody',
|
|
112
|
+
instruments: ["25", "110", "27", "32", KIT],
|
|
113
|
+
tempo: 118,
|
|
114
|
+
timeSignature: "4/4",
|
|
115
|
+
},
|
|
116
|
+
bluegrass: {
|
|
117
|
+
prompt: "bluegrass — fast acoustic picking, banjo rolls in constant eighths under a syncopated fiddle melody, driving upright bass on one and three",
|
|
118
|
+
instruments: ["105", "110", "25", "32"],
|
|
119
|
+
tempo: 160,
|
|
120
|
+
timeSignature: "4/4",
|
|
121
|
+
},
|
|
122
|
+
funk: {
|
|
123
|
+
prompt: "funk — heavily syncopated sixteenth-note groove, everything locked to a hard downbeat on the one, staccato stabs and plenty of rests",
|
|
124
|
+
instruments: ["36", "28", "61", "4", KIT],
|
|
125
|
+
tempo: 104,
|
|
126
|
+
timeSignature: "4/4",
|
|
127
|
+
},
|
|
128
|
+
soul: {
|
|
129
|
+
prompt: "soul — a laid-back backbeat sitting slightly behind the beat, gospel-tinged chords, horn stabs answering a vocal-style melody",
|
|
130
|
+
instruments: ["16", "4", "33", "61", KIT],
|
|
131
|
+
tempo: 96,
|
|
132
|
+
timeSignature: "4/4",
|
|
133
|
+
},
|
|
134
|
+
ragtime: {
|
|
135
|
+
formBars: 16,
|
|
136
|
+
prompt: "ragtime — a syncopated right-hand melody against a steady striding left-hand bass in two, cheerful and precise",
|
|
137
|
+
instruments: ["0"],
|
|
138
|
+
tempo: 96,
|
|
139
|
+
timeSignature: "2/4",
|
|
140
|
+
},
|
|
141
|
+
swing: {
|
|
142
|
+
prompt: "big-band swing — swung eighth notes, brass and reed sections trading riffs, walking bass, ride-cymbal pulse with accents on two and four",
|
|
143
|
+
instruments: ["56", "66", "57", "0", "32", KIT],
|
|
144
|
+
tempo: 168,
|
|
145
|
+
timeSignature: "4/4",
|
|
146
|
+
},
|
|
147
|
+
bossaNova: {
|
|
148
|
+
prompt: "bossa nova — a gentle syncopated guitar pattern, soft brushed drums, a lyrical melody sitting behind the beat, rich seventh and ninth chords",
|
|
149
|
+
instruments: ["24", "0", "32", KIT],
|
|
150
|
+
tempo: 132,
|
|
151
|
+
timeSignature: "4/4",
|
|
152
|
+
},
|
|
153
|
+
samba: {
|
|
154
|
+
prompt: "samba — fast two-beat percussion-driven groove, heavy syncopation on the offbeats, surdo pulse landing on beat two",
|
|
155
|
+
instruments: ["24", "61", "32", KIT],
|
|
156
|
+
tempo: 100,
|
|
157
|
+
timeSignature: "2/4",
|
|
158
|
+
},
|
|
159
|
+
salsa: {
|
|
160
|
+
prompt: "salsa — clave-driven, a montuno piano ostinato, syncopated brass hits, busy percussion, bass playing the tumbao rather than the downbeat",
|
|
161
|
+
instruments: ["0", "56", "57", "32", KIT],
|
|
162
|
+
tempo: 190,
|
|
163
|
+
timeSignature: "4/4",
|
|
164
|
+
},
|
|
165
|
+
tango: {
|
|
166
|
+
prompt: "tango — sharp dotted rhythms and dramatic accents, minor key, sudden stops and rubato pulls against a strict pulse",
|
|
167
|
+
instruments: ["23", "40", "0", "43"],
|
|
168
|
+
tempo: 120,
|
|
169
|
+
timeSignature: "4/4",
|
|
170
|
+
mode: "minor",
|
|
171
|
+
},
|
|
172
|
+
reggae: {
|
|
173
|
+
prompt: "reggae — one-drop: the kick lands on beat three, not one; guitar and organ chop the offbeat eighths; bass plays a heavy melodic line, low and sparse",
|
|
174
|
+
instruments: ["28", "18", "33", KIT],
|
|
175
|
+
tempo: 78,
|
|
176
|
+
timeSignature: "4/4",
|
|
177
|
+
},
|
|
178
|
+
hipHop: {
|
|
179
|
+
prompt: "hip-hop — a hard boom-bap drum pattern with swung sixteenths, a deep sustained sub bass, sparse looping keys, and space left for a vocal",
|
|
180
|
+
instruments: ["39", "4", "48", KIT],
|
|
181
|
+
tempo: 90,
|
|
182
|
+
timeSignature: "4/4",
|
|
183
|
+
mode: "minor",
|
|
184
|
+
},
|
|
185
|
+
trap: {
|
|
186
|
+
prompt: "trap — half-time: the snare lands on beat three alone, an 808 sub bass slides between long tuned notes, and hi-hats roll in fast subdivisions over large gaps",
|
|
187
|
+
instruments: ["38", "11", "89", KIT],
|
|
188
|
+
tempo: 140,
|
|
189
|
+
timeSignature: "4/4",
|
|
190
|
+
mode: "minor",
|
|
191
|
+
},
|
|
192
|
+
lofi: {
|
|
193
|
+
prompt: "lo-fi hip-hop — slow swung drums slightly off the grid, warm jazzy minor seventh chords, a sparse melody, unhurried and repetitive",
|
|
194
|
+
instruments: ["4", "33", "89", KIT],
|
|
195
|
+
tempo: 74,
|
|
196
|
+
timeSignature: "4/4",
|
|
197
|
+
mode: "minor",
|
|
198
|
+
},
|
|
199
|
+
house: {
|
|
200
|
+
prompt: "house — four-on-the-floor kick, offbeat open hats, a repetitive synth riff, and a bassline locked to the eighths between the kicks",
|
|
201
|
+
instruments: ["81", "38", "89", KIT],
|
|
202
|
+
tempo: 126,
|
|
203
|
+
timeSignature: "4/4",
|
|
204
|
+
},
|
|
205
|
+
techno: {
|
|
206
|
+
prompt: "techno — machine-like and loop-based: four-on-the-floor kick, sixteenth-note hats, one short synth-bass cell repeated, and timbre rather than chord changes carrying the track",
|
|
207
|
+
instruments: ["38", "81", "89", KIT],
|
|
208
|
+
tempo: 132,
|
|
209
|
+
timeSignature: "4/4",
|
|
210
|
+
mode: "minor",
|
|
211
|
+
},
|
|
212
|
+
trance: {
|
|
213
|
+
prompt: "trance — four-on-the-floor with an offbeat synth bass after every kick, supersaw arpeggios, and long builds and releases in sixteen-bar blocks",
|
|
214
|
+
instruments: ["81", "38", "89", KIT],
|
|
215
|
+
tempo: 138,
|
|
216
|
+
timeSignature: "4/4",
|
|
217
|
+
mode: "minor",
|
|
218
|
+
},
|
|
219
|
+
edm: {
|
|
220
|
+
prompt: "edm — electronic dance built on a clear build, drop and breakdown in eight-bar blocks, four-on-the-floor underneath and a big repeated lead hook through the drop",
|
|
221
|
+
instruments: ["81", "38", "89", KIT],
|
|
222
|
+
tempo: 128,
|
|
223
|
+
timeSignature: "4/4",
|
|
224
|
+
mode: "minor",
|
|
225
|
+
},
|
|
226
|
+
electroSwing: {
|
|
227
|
+
prompt: "electro swing — vintage swing horns over a modern four-on-the-floor electronic beat, minor and bluesy in a gypsy-jazz vein; hard-swung eighths, syncopated and playful, with clarinet and trumpet riffs answering each other",
|
|
228
|
+
instruments: ["56", "71", "38", KIT],
|
|
229
|
+
tempo: 122,
|
|
230
|
+
timeSignature: "4/4",
|
|
231
|
+
mode: "minor",
|
|
232
|
+
},
|
|
233
|
+
disco: {
|
|
234
|
+
prompt: "disco — four-on-the-floor kick, offbeat hi-hats, an octave-jumping bassline, and string and guitar figures on the sixteenths",
|
|
235
|
+
instruments: ["48", "28", "33", KIT],
|
|
236
|
+
tempo: 120,
|
|
237
|
+
timeSignature: "4/4",
|
|
238
|
+
},
|
|
239
|
+
classical: {
|
|
240
|
+
prompt: "classical — balanced four-bar phrases answering each other, an Alberti or broken-chord accompaniment under a clear diatonic melody, and a cadence every four or eight bars",
|
|
241
|
+
instruments: ["0", "40", "42"],
|
|
242
|
+
tempo: 108,
|
|
243
|
+
timeSignature: "4/4",
|
|
244
|
+
},
|
|
245
|
+
baroque: {
|
|
246
|
+
prompt: "baroque — a steady walking bass, contrapuntal interweaving voices, sequences and ornamented melodic lines, terraced dynamics",
|
|
247
|
+
instruments: ["6", "40", "42"],
|
|
248
|
+
tempo: 100,
|
|
249
|
+
timeSignature: "4/4",
|
|
250
|
+
},
|
|
251
|
+
march: {
|
|
252
|
+
prompt: "march — a firm two-beat pulse, dotted fanfare rhythms, a brass melody over a low oom-pah, crisp snare figures",
|
|
253
|
+
instruments: ["56", "57", "58", KIT],
|
|
254
|
+
tempo: 116,
|
|
255
|
+
timeSignature: "2/4",
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* The styles, each with the bars its own tempo and meter need for a song.
|
|
260
|
+
*/
|
|
261
|
+
export const GENERATE_SCORE_STYLE_PRESETS = Object.fromEntries(Object.entries(STYLE_PRESET_SOURCE).map(([style, preset]) => [
|
|
262
|
+
style,
|
|
263
|
+
{
|
|
264
|
+
...preset,
|
|
265
|
+
measures: measuresForSeconds(preset.seconds ?? SONG_SECONDS.typical, preset.tempo, beatsPerBarOf(preset.timeSignature), preset.formBars),
|
|
266
|
+
},
|
|
267
|
+
]));
|
|
268
|
+
/** Beats in a bar, from a picker value like "6/8". */
|
|
269
|
+
function beatsPerBarOf(timeSignature) {
|
|
270
|
+
const [numerator] = timeSignature.split("/");
|
|
271
|
+
const beats = Number(numerator);
|
|
272
|
+
return Number.isFinite(beats) && beats > 0 ? beats : 4;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=style-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-presets.js","sourceRoot":"","sources":["../../../src/domain/generation/style-presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,19 @@ export type RankableTrack = {
|
|
|
5
5
|
midiProgram: number;
|
|
6
6
|
clef?: string | undefined;
|
|
7
7
|
};
|
|
8
|
+
/** Whether this program is a sung part rather than an instrument. */
|
|
9
|
+
export declare function isVocalProgram(midiProgram: number): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* A voice carries the tune, and the ambiguity is resolved in its favour.
|
|
12
|
+
*
|
|
13
|
+
* Choir Aahs held under a chorus is genuinely harmony, and nothing in a program
|
|
14
|
+
* number can tell that from a sung melody -- so this is a judgement about which
|
|
15
|
+
* mistake costs more. Read as harmony, a vocal part is written as filler around
|
|
16
|
+
* a tune chosen without it, and -- worse -- `mustBreathe` covers `lead` alone,
|
|
17
|
+
* so the one part that physically CANNOT run sixteen unbroken bars was the one
|
|
18
|
+
* part never asked to rest. Read as lead, a choir pad collects a finding asking
|
|
19
|
+
* it to breathe, which costs one retry and is not even wrong.
|
|
20
|
+
*/
|
|
8
21
|
export declare function roleOf(track: RankableTrack): ArrangementRole;
|
|
9
22
|
/** The role order this style is arranged in. */
|
|
10
23
|
export declare function roleOrderForStyle(style: string | undefined): readonly ArrangementRole[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrangement-order.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/arrangement-order.ts"],"names":[],"mappings":"AA2BA,oFAAoF;AACpF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"arrangement-order.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/arrangement-order.ts"],"names":[],"mappings":"AA2BA,oFAAoF;AACpF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpE,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAiCF,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAO5D;AAqDD,gDAAgD;AAChD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,SAAS,eAAe,EAAE,CAO5B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CAwBV"}
|
|
@@ -35,9 +35,43 @@ const HARMONY_FAMILIES = new Set([
|
|
|
35
35
|
"ensemble",
|
|
36
36
|
"organ",
|
|
37
37
|
]);
|
|
38
|
+
/**
|
|
39
|
+
* The three General MIDI programs that are a human voice.
|
|
40
|
+
*
|
|
41
|
+
* GM files them under `ensemble`, beside String Ensemble and Orchestra Hit --
|
|
42
|
+
* which is a fair description of Choir Aahs used as a wash, and the wrong one
|
|
43
|
+
* for the part carrying the song. Named here rather than moved to another
|
|
44
|
+
* family because the family is GM's and is right about everything else in it.
|
|
45
|
+
*
|
|
46
|
+
* `Pad 4 (choir)` (91) is deliberately absent: it says pad in its name and is
|
|
47
|
+
* one. `Lead 6 (voice)` (85) is absent too, already reaching `lead` through
|
|
48
|
+
* `synth-lead`.
|
|
49
|
+
*/
|
|
50
|
+
const VOICE_PROGRAMS = new Set([
|
|
51
|
+
52, // Choir Aahs
|
|
52
|
+
53, // Voice Oohs
|
|
53
|
+
54, // Synth Voice
|
|
54
|
+
]);
|
|
55
|
+
/** Whether this program is a sung part rather than an instrument. */
|
|
56
|
+
export function isVocalProgram(midiProgram) {
|
|
57
|
+
return VOICE_PROGRAMS.has(midiProgram);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A voice carries the tune, and the ambiguity is resolved in its favour.
|
|
61
|
+
*
|
|
62
|
+
* Choir Aahs held under a chorus is genuinely harmony, and nothing in a program
|
|
63
|
+
* number can tell that from a sung melody -- so this is a judgement about which
|
|
64
|
+
* mistake costs more. Read as harmony, a vocal part is written as filler around
|
|
65
|
+
* a tune chosen without it, and -- worse -- `mustBreathe` covers `lead` alone,
|
|
66
|
+
* so the one part that physically CANNOT run sixteen unbroken bars was the one
|
|
67
|
+
* part never asked to rest. Read as lead, a choir pad collects a finding asking
|
|
68
|
+
* it to breathe, which costs one retry and is not even wrong.
|
|
69
|
+
*/
|
|
38
70
|
export function roleOf(track) {
|
|
39
71
|
if (track.clef === "percussion")
|
|
40
72
|
return "drums";
|
|
73
|
+
if (isVocalProgram(track.midiProgram))
|
|
74
|
+
return "lead";
|
|
41
75
|
const family = gmFamilyOf(track.midiProgram);
|
|
42
76
|
if (family === "bass")
|
|
43
77
|
return "bass";
|
|
@@ -67,9 +101,9 @@ const DEFAULT_ORDER = [
|
|
|
67
101
|
*
|
|
68
102
|
* In reggae the bassline *is* the tune — the "riddim" is named and reused
|
|
69
103
|
* across songs while melodies come and go — and the same is true of funk, hip
|
|
70
|
-
* hop, house and disco, where the groove is the
|
|
71
|
-
* decorates it. Writing a melody first in those styles
|
|
72
|
-
* following a tune instead of stating the hook.
|
|
104
|
+
* hop, trap, house, techno, trance, EDM and disco, where the groove is the
|
|
105
|
+
* material and the melody decorates it. Writing a melody first in those styles
|
|
106
|
+
* produces a bass that is following a tune instead of stating the hook.
|
|
73
107
|
*/
|
|
74
108
|
const GROOVE_FIRST = [
|
|
75
109
|
"bass",
|
|
@@ -77,7 +111,7 @@ const GROOVE_FIRST = [
|
|
|
77
111
|
"harmony",
|
|
78
112
|
"lead",
|
|
79
113
|
];
|
|
80
|
-
const GROOVE_LED = /\b(reggae|ska|dub|funk|disco|house|hip hop|hip-hop|lofi|lo-fi|soul|samba|salsa|bossa|tango|afrobeat)\b/i;
|
|
114
|
+
const GROOVE_LED = /\b(reggae|ska|dub|funk|disco|house|techno|trance|edm|electronic dance|hip hop|hip-hop|trap|lofi|lo-fi|soul|samba|salsa|bossa|tango|afrobeat)\b/i;
|
|
81
115
|
/**
|
|
82
116
|
* Genres built on a riff, where the riff is a lead part and goes first anyway —
|
|
83
117
|
* but the kit is promoted above the harmony, because in these styles the drums
|
|
@@ -118,9 +152,20 @@ export function rankTracksForGeneration(tracks, style) {
|
|
|
118
152
|
// answers -1, and -1 in front of "lead" would silently promote it.
|
|
119
153
|
return index === -1 ? order.length : index;
|
|
120
154
|
};
|
|
155
|
+
/*
|
|
156
|
+
Among leads, the singer goes first.
|
|
157
|
+
|
|
158
|
+
Two parts can both be leads — a vocal and a guitar — and then role alone
|
|
159
|
+
leaves the order to however the roster happened to be typed. In a song the
|
|
160
|
+
answer is not arbitrary: the words and the tune ARE the song, and the parts
|
|
161
|
+
behind them are written to fit. Ranked by index instead, a guitar listed
|
|
162
|
+
first got composed with no melody to sit under, and the singer then had to
|
|
163
|
+
bend around it.
|
|
164
|
+
*/
|
|
165
|
+
const voiceFirst = (track) => isVocalProgram(track.midiProgram) && track.clef !== "percussion" ? 0 : 1;
|
|
121
166
|
return tracks
|
|
122
|
-
.map((track, index) => ({ index, rank: rankOf(track) }))
|
|
123
|
-
.sort((a, b) => a.rank - b.rank || a.index - b.index)
|
|
167
|
+
.map((track, index) => ({ index, rank: rankOf(track), voice: voiceFirst(track) }))
|
|
168
|
+
.sort((a, b) => a.rank - b.rank || a.voice - b.voice || a.index - b.index)
|
|
124
169
|
.map((entry) => entry.index);
|
|
125
170
|
}
|
|
126
171
|
//# sourceMappingURL=arrangement-order.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrangement-order.js","sourceRoot":"","sources":["../../../src/domain/instruments/arrangement-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAYrC;;;;;;GAMG;AACH,MAAM,gBAAgB,GAA0B,IAAI,GAAG,CAAW;IAChE,WAAW;IACX,UAAU;IACV,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,UAAU,MAAM,CAAC,KAAoB;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,aAAa,GAA+B;IAChD,MAAM;IACN,MAAM;IACN,SAAS;IACT,OAAO;CACR,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,YAAY,GAA+B;IAC/C,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,GACd,
|
|
1
|
+
{"version":3,"file":"arrangement-order.js","sourceRoot":"","sources":["../../../src/domain/instruments/arrangement-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,4 +102,40 @@ export declare function pitchAtStavePosition(clef: Clef, positionsBelowTopLine:
|
|
|
102
102
|
* moment to stop transcribing.
|
|
103
103
|
*/
|
|
104
104
|
export declare function panReadout(value: number): string;
|
|
105
|
+
/**
|
|
106
|
+
* How long a song should be, in seconds.
|
|
107
|
+
*
|
|
108
|
+
* A generated piece was 16 bars — about thirty seconds at an ordinary tempo,
|
|
109
|
+
* and a fragment rather than a song. These are the lengths a listener expects
|
|
110
|
+
* of one: under three minutes reads as a demo, over five outstays a verse-chorus
|
|
111
|
+
* form unless something else is happening.
|
|
112
|
+
*
|
|
113
|
+
* Stated in SECONDS rather than bars because a bar is not a unit of time: 16
|
|
114
|
+
* bars is 31 seconds of metal at 152bpm and 46 seconds of ballad at 84, so a
|
|
115
|
+
* bar count fixed across styles produces a different piece of music every time
|
|
116
|
+
* the tempo changes. The bar count is derived — see `measuresForSeconds`.
|
|
117
|
+
*/
|
|
118
|
+
export declare const SONG_SECONDS: {
|
|
119
|
+
readonly min: 180;
|
|
120
|
+
readonly typical: 210;
|
|
121
|
+
readonly max: 300;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Bars needed to fill `seconds` at this tempo and meter.
|
|
125
|
+
*
|
|
126
|
+
* The inverse of the arithmetic that made a 32-bar "song" last 1:31 — 32 bars
|
|
127
|
+
* of 4 beats at 84bpm. Rounded to a whole number of FOUR-bar groups, because
|
|
128
|
+
* musical form is built in fours and a 63-bar song has a bar of nowhere in it;
|
|
129
|
+
* and never less than one group, so a very slow piece still gets a phrase.
|
|
130
|
+
*/
|
|
131
|
+
export declare function measuresForSeconds(seconds: number, bpm: number, beatsPerBar: number,
|
|
132
|
+
/**
|
|
133
|
+
* The genre's form, in bars, that the length must be a whole number of.
|
|
134
|
+
*
|
|
135
|
+
* Four by default, because musical form is built in fours and a 63-bar song
|
|
136
|
+
* has a bar of nowhere in it. Some genres ARE a length: a blues is twelve
|
|
137
|
+
* bars and a rag sixteen, so a blues rounded to fours comes out at 76 — six
|
|
138
|
+
* choruses and a third of one, which is not a blues.
|
|
139
|
+
*/
|
|
140
|
+
groupBars?: number): number;
|
|
105
141
|
//# sourceMappingURL=music-vocabulary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"music-vocabulary.d.ts","sourceRoot":"","sources":["../../../src/domain/notation/music-vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,KAAK,EAEN,MAAM,gBAAgB,CAAC;AAOxB,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAA6B,YAAY,EAAE,CAAC;AAuBvE,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAExD;AAyCD,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAI1D;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CASD;AAID;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA2BzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAef;AAuBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,qBAAqB,EAAE,MAAM,GAC5B,KAAK,CAEP;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD"}
|
|
1
|
+
{"version":3,"file":"music-vocabulary.d.ts","sourceRoot":"","sources":["../../../src/domain/notation/music-vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,KAAK,EAEN,MAAM,gBAAgB,CAAC;AAOxB,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAA6B,YAAY,EAAE,CAAC;AAuBvE,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAExD;AAyCD,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAI1D;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CASD;AAID;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA2BzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAef;AAuBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,qBAAqB,EAAE,MAAM,GAC5B,KAAK,CAEP;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM;AACnB;;;;;;;GAOG;AACH,SAAS,SAAI,GACZ,MAAM,CAKR"}
|
|
@@ -218,4 +218,45 @@ export function panReadout(value) {
|
|
|
218
218
|
return "C";
|
|
219
219
|
return `${value < 0 ? "L" : "R"}${amount}`;
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* How long a song should be, in seconds.
|
|
223
|
+
*
|
|
224
|
+
* A generated piece was 16 bars — about thirty seconds at an ordinary tempo,
|
|
225
|
+
* and a fragment rather than a song. These are the lengths a listener expects
|
|
226
|
+
* of one: under three minutes reads as a demo, over five outstays a verse-chorus
|
|
227
|
+
* form unless something else is happening.
|
|
228
|
+
*
|
|
229
|
+
* Stated in SECONDS rather than bars because a bar is not a unit of time: 16
|
|
230
|
+
* bars is 31 seconds of metal at 152bpm and 46 seconds of ballad at 84, so a
|
|
231
|
+
* bar count fixed across styles produces a different piece of music every time
|
|
232
|
+
* the tempo changes. The bar count is derived — see `measuresForSeconds`.
|
|
233
|
+
*/
|
|
234
|
+
export const SONG_SECONDS = {
|
|
235
|
+
min: 180,
|
|
236
|
+
typical: 210,
|
|
237
|
+
max: 300,
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Bars needed to fill `seconds` at this tempo and meter.
|
|
241
|
+
*
|
|
242
|
+
* The inverse of the arithmetic that made a 32-bar "song" last 1:31 — 32 bars
|
|
243
|
+
* of 4 beats at 84bpm. Rounded to a whole number of FOUR-bar groups, because
|
|
244
|
+
* musical form is built in fours and a 63-bar song has a bar of nowhere in it;
|
|
245
|
+
* and never less than one group, so a very slow piece still gets a phrase.
|
|
246
|
+
*/
|
|
247
|
+
export function measuresForSeconds(seconds, bpm, beatsPerBar,
|
|
248
|
+
/**
|
|
249
|
+
* The genre's form, in bars, that the length must be a whole number of.
|
|
250
|
+
*
|
|
251
|
+
* Four by default, because musical form is built in fours and a 63-bar song
|
|
252
|
+
* has a bar of nowhere in it. Some genres ARE a length: a blues is twelve
|
|
253
|
+
* bars and a rag sixteen, so a blues rounded to fours comes out at 76 — six
|
|
254
|
+
* choruses and a third of one, which is not a blues.
|
|
255
|
+
*/
|
|
256
|
+
groupBars = 4) {
|
|
257
|
+
const group = Math.max(1, Math.floor(groupBars));
|
|
258
|
+
const beats = (seconds * bpm) / 60;
|
|
259
|
+
const bars = beats / Math.max(1, beatsPerBar);
|
|
260
|
+
return Math.max(group, Math.round(bars / group) * group);
|
|
261
|
+
}
|
|
221
262
|
//# sourceMappingURL=music-vocabulary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"music-vocabulary.js","sourceRoot":"","sources":["../../../src/domain/notation/music-vocabulary.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"music-vocabulary.js","sourceRoot":"","sources":["../../../src/domain/notation/music-vocabulary.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
/** Every glyph is authored in a 24×24 box. */
|
|
20
20
|
export declare const NOTATION_ICON_VIEWBOX = 24;
|
|
21
21
|
/** A stroke cap/join, spelled as SVG spells it. */
|
|
22
|
-
export type NotationLineCap =
|
|
23
|
-
export type NotationLineJoin =
|
|
22
|
+
export type NotationLineCap = 'butt' | 'round' | 'square';
|
|
23
|
+
export type NotationLineJoin = 'miter' | 'round' | 'bevel';
|
|
24
24
|
type Paint = {
|
|
25
25
|
readonly fill?: string;
|
|
26
26
|
readonly stroke?: string;
|
|
@@ -32,29 +32,29 @@ type Paint = {
|
|
|
32
32
|
readonly transform?: string;
|
|
33
33
|
};
|
|
34
34
|
export type NotationIconShape = (Paint & {
|
|
35
|
-
readonly kind:
|
|
35
|
+
readonly kind: 'path';
|
|
36
36
|
readonly d: string;
|
|
37
|
-
readonly fillRule?:
|
|
37
|
+
readonly fillRule?: 'evenodd' | 'nonzero';
|
|
38
38
|
}) | (Paint & {
|
|
39
|
-
readonly kind:
|
|
39
|
+
readonly kind: 'rect';
|
|
40
40
|
readonly x: number;
|
|
41
41
|
readonly y: number;
|
|
42
42
|
readonly width: number;
|
|
43
43
|
readonly height: number;
|
|
44
44
|
readonly rx?: number;
|
|
45
45
|
}) | (Paint & {
|
|
46
|
-
readonly kind:
|
|
46
|
+
readonly kind: 'ellipse';
|
|
47
47
|
readonly cx: number;
|
|
48
48
|
readonly cy: number;
|
|
49
49
|
readonly rx: number;
|
|
50
50
|
readonly ry: number;
|
|
51
51
|
}) | (Paint & {
|
|
52
|
-
readonly kind:
|
|
52
|
+
readonly kind: 'circle';
|
|
53
53
|
readonly cx: number;
|
|
54
54
|
readonly cy: number;
|
|
55
55
|
readonly r: number;
|
|
56
56
|
}) | (Paint & {
|
|
57
|
-
readonly kind:
|
|
57
|
+
readonly kind: 'text';
|
|
58
58
|
readonly x: number;
|
|
59
59
|
readonly y: number;
|
|
60
60
|
readonly content: string;
|
|
@@ -62,7 +62,7 @@ export type NotationIconShape = (Paint & {
|
|
|
62
62
|
readonly fontStyle?: string;
|
|
63
63
|
readonly textAnchor?: string;
|
|
64
64
|
}) | (Paint & {
|
|
65
|
-
readonly kind:
|
|
65
|
+
readonly kind: 'group';
|
|
66
66
|
readonly shapes: readonly NotationIconShape[];
|
|
67
67
|
});
|
|
68
68
|
/**
|
|
@@ -71,7 +71,7 @@ export type NotationIconShape = (Paint & {
|
|
|
71
71
|
* A union has no runtime form, so anything that must *validate* a name would
|
|
72
72
|
* otherwise write the list out again.
|
|
73
73
|
*/
|
|
74
|
-
export declare const NOTATION_ICON_NAMES: readonly ["AddMeasureIcon", "ArpeggioIcon", "ArticulationIcon", "BeamBreakIcon", "BeamNoneIcon", "ChordIcon", "ContinuousLayoutIcon", "CrescendoIcon", "DeleteMeasureIcon", "DiminuendoIcon", "DottedIcon", "DoubleFlatIcon", "DoubleSharpIcon", "EighthNoteIcon", "FermataIcon", "FlatIcon", "GoToStartIcon", "HalfNoteIcon", "InsertModeIcon", "InsertNoteIcon", "InsertRestIcon", "MetronomeIcon", "NaturalIcon", "NextMeasureIcon", "OrnamentIcon", "PageLayoutIcon", "PreviousMeasureIcon", "QuantizeIcon", "QuarterNoteIcon", "ReplaceModeIcon", "SelectAllIcon", "SharpIcon", "SixteenthNoteIcon", "SlurIcon", "SoloIcon", "SunMoonIcon", "ThirtySecondNoteIcon", "TieIcon", "TripletIcon", "WholeNoteIcon"];
|
|
74
|
+
export declare const NOTATION_ICON_NAMES: readonly ["AddMeasureIcon", "ArpeggioIcon", "ArticulationIcon", "BeamBreakIcon", "BeamNoneIcon", "ChordIcon", "ContinuousLayoutIcon", "CrescendoIcon", "DeleteMeasureIcon", "DiminuendoIcon", "DottedIcon", "DoubleFlatIcon", "DoubleSharpIcon", "EighthNoteIcon", "FermataIcon", "FlatIcon", "GoToStartIcon", "HalfNoteIcon", "InsertModeIcon", "InsertNoteIcon", "InsertRestIcon", "MetronomeIcon", "NaturalIcon", "NextMeasureIcon", "OrnamentIcon", "PageLayoutIcon", "PianoKeysIcon", "PreviousMeasureIcon", "QuantizeIcon", "QuarterNoteIcon", "ReplaceModeIcon", "SelectAllIcon", "SharpIcon", "SixteenthNoteIcon", "SlurIcon", "SoloIcon", "SunMoonIcon", "ThirtySecondNoteIcon", "TieIcon", "TripletIcon", "WholeNoteIcon"];
|
|
75
75
|
export type NotationIconName = (typeof NOTATION_ICON_NAMES)[number];
|
|
76
76
|
/**
|
|
77
77
|
* A record, never a parallel array: adding a name above fails to compile until
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notation-icon-art.d.ts","sourceRoot":"","sources":["../../../src/domain/notation/notation-icon-art.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3D,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,CAAC,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"notation-icon-art.d.ts","sourceRoot":"","sources":["../../../src/domain/notation/notation-icon-art.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3D,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CAAC,GAClG,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClJ,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1H,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACnG,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5L,CAAC,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,ssBA0CtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,CA++BxE,CAAC"}
|