@sudobility/music_types 0.13.19 → 0.13.20
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 +4 -0
- package/dist/domain/generation/option-order.d.ts +20 -0
- package/dist/domain/generation/option-order.d.ts.map +1 -0
- package/dist/domain/generation/option-order.js +24 -0
- package/dist/domain/generation/option-order.js.map +1 -0
- package/dist/domain/instruments/arrangement-order.d.ts +17 -0
- package/dist/domain/instruments/arrangement-order.d.ts.map +1 -1
- package/dist/domain/instruments/arrangement-order.js +19 -3
- package/dist/domain/instruments/arrangement-order.js.map +1 -1
- package/dist/domain/instruments/instrument-options.d.ts +42 -1
- package/dist/domain/instruments/instrument-options.d.ts.map +1 -1
- package/dist/domain/instruments/instrument-options.js +54 -2
- package/dist/domain/instruments/instrument-options.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CLAUDE.md
CHANGED
|
@@ -116,6 +116,10 @@ Everything exports from a single sectioned `src/index.ts`:
|
|
|
116
116
|
|
|
117
117
|
- **A guard test enforces that this package runs on React Native** (`src/platform-free.test.ts`): no web-only global and no `import.meta`. This matters more here than anywhere else — these are the platform *interfaces* every other repo implements, so one DOM type in a signature spreads to all of them. That is why `FileExporter.save` takes `Uint8Array | string` rather than a `Blob`, and the codecs take `ArrayBuffer`. `tsconfig.json` still sets `lib: [..., "DOM"]` (for `AbortSignal`) and `eslint.config.js` still spreads `globals.browser`, so nothing else would object.
|
|
118
118
|
|
|
119
|
+
- **A singer is a picker group, not a hunt through Ensemble.** General MIDI files the three voice programs (52 Choir Aahs, 53 Voice Oohs, 54 Synth Voice) under *ensemble*, between String Ensemble and Orchestra Hit — so in practice no generated score ever had one in it, while the backend carries several hundred lines of lyric and vocal-support rules for a part nobody could ask for. `VOICE_OPTIONS` lifts them into a group of their own at the top of the generation pickers, **derived from `VOICE_PROGRAMS`** in `arrangement-order.ts` rather than restating three numbers: a picker offering a voice the arranger does not recognise as one is exactly the drift that costs a vocal-led arrangement. They leave `FAMILY_GROUPS` in the same move, because a program in two groups of one menu is a selection the control cannot show unambiguously — but `INSTRUMENT_OPTIONS` keeps all 128, since that one is the catalogue and not a menu. `isVocalInstrumentValue` answers on the picker *value*, so `kit:52` is a drum kit rather than a choir.
|
|
120
|
+
- **The singer is written first, ahead of the genre order.** In `rankTracksForGeneration`, `voiceFirst` used to be a tiebreak among equally ranked parts, so it only did anything where `lead` already came first. `GROOVE_FIRST` writes the lead **last** — in reggae the bassline is the material and the melody decorates it, which is true of an instrumental and inverts the moment somebody is singing over it — so in eleven genres every backing part was composed before the voice existed, `vocalSupportRule` in music_api had no singer to point at, and the vocal was bent to fit a finished arrangement instead of the other way round. It is now the primary sort key, and `roleOrderForStyle` is untouched, so a roster with no voice is arranged exactly as it was. A percussion track is never promoted, whatever its program addresses: on the drum channel, program 53 is a kit.
|
|
121
|
+
- **A closed vocabulary is offered in the order it is read, not the order it was declared.** `sortOptionsByLabel` sorts on the **translated** label under the active language. Both halves matter: the value is `electroSwing` while the reader sees "Electro Swing", so sorting the keys puts entries wherever their camel-case identifier happens to fall; and collating Chinese labels by the English they were translated from produces an order with no visible logic at all. The 33 styles and 6 moods go through it in both apps — an ordering rule written twice is one that eventually disagrees with itself.
|
|
122
|
+
|
|
119
123
|
## Related Projects
|
|
120
124
|
|
|
121
125
|
- `music_api` — backend (Hono/Drizzle/OpenAI proxy), consumes schemas for validation
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The order a closed vocabulary is *offered* in, which is not the order it is
|
|
3
|
+
* declared in.
|
|
4
|
+
*
|
|
5
|
+
* A vocabulary is declared in whatever order it grew — the styles run waltz,
|
|
6
|
+
* jazz, pop, cinematic, ambient, battle — and that is the right order for the
|
|
7
|
+
* source and no order for a reader hunting through thirty-three of them.
|
|
8
|
+
*
|
|
9
|
+
* Sorted on the **label**, not the value: the value is `electroSwing` and the
|
|
10
|
+
* reader sees "Electro Swing", so sorting the keys puts entries wherever their
|
|
11
|
+
* camel-case identifier happens to fall. And sorted with `localeCompare` under
|
|
12
|
+
* the language actually on screen, because the label a Chinese reader is
|
|
13
|
+
* scanning is Chinese — collating those by the English they were translated
|
|
14
|
+
* from produces an order with no visible logic at all.
|
|
15
|
+
*
|
|
16
|
+
* Here rather than in either app because both apps draw these pickers, and an
|
|
17
|
+
* ordering rule written twice is one that eventually disagrees with itself.
|
|
18
|
+
*/
|
|
19
|
+
export declare function sortOptionsByLabel<T extends string>(values: readonly T[], labelOf: (value: T) => string, locale?: string): T[];
|
|
20
|
+
//# sourceMappingURL=option-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-order.d.ts","sourceRoot":"","sources":["../../../src/domain/generation/option-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EACjD,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,CAAC,EAAE,CAML"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The order a closed vocabulary is *offered* in, which is not the order it is
|
|
3
|
+
* declared in.
|
|
4
|
+
*
|
|
5
|
+
* A vocabulary is declared in whatever order it grew — the styles run waltz,
|
|
6
|
+
* jazz, pop, cinematic, ambient, battle — and that is the right order for the
|
|
7
|
+
* source and no order for a reader hunting through thirty-three of them.
|
|
8
|
+
*
|
|
9
|
+
* Sorted on the **label**, not the value: the value is `electroSwing` and the
|
|
10
|
+
* reader sees "Electro Swing", so sorting the keys puts entries wherever their
|
|
11
|
+
* camel-case identifier happens to fall. And sorted with `localeCompare` under
|
|
12
|
+
* the language actually on screen, because the label a Chinese reader is
|
|
13
|
+
* scanning is Chinese — collating those by the English they were translated
|
|
14
|
+
* from produces an order with no visible logic at all.
|
|
15
|
+
*
|
|
16
|
+
* Here rather than in either app because both apps draw these pickers, and an
|
|
17
|
+
* ordering rule written twice is one that eventually disagrees with itself.
|
|
18
|
+
*/
|
|
19
|
+
export function sortOptionsByLabel(values, labelOf, locale) {
|
|
20
|
+
// A copy: the vocabularies are module-level constants shared by every caller,
|
|
21
|
+
// and `sort` is in place.
|
|
22
|
+
return [...values].sort((a, b) => labelOf(a).localeCompare(labelOf(b), locale));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=option-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-order.js","sourceRoot":"","sources":["../../../src/domain/generation/option-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,OAA6B,EAC7B,MAAe;IAEf,8EAA8E;IAC9E,0BAA0B;IAC1B,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/B,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -5,6 +5,23 @@ export type RankableTrack = {
|
|
|
5
5
|
midiProgram: number;
|
|
6
6
|
clef?: string | undefined;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* The three General MIDI programs that are a human voice.
|
|
10
|
+
*
|
|
11
|
+
* GM files them under `ensemble`, beside String Ensemble and Orchestra Hit --
|
|
12
|
+
* which is a fair description of Choir Aahs used as a wash, and the wrong one
|
|
13
|
+
* for the part carrying the song. Named here rather than moved to another
|
|
14
|
+
* family because the family is GM's and is right about everything else in it.
|
|
15
|
+
*
|
|
16
|
+
* Exported because the instrument picker offers these three as a group of
|
|
17
|
+
* their own, and a picker that restated the numbers would be a second list to
|
|
18
|
+
* keep in step with this one.
|
|
19
|
+
*
|
|
20
|
+
* `Pad 4 (choir)` (91) is deliberately absent: it says pad in its name and is
|
|
21
|
+
* one. `Lead 6 (voice)` (85) is absent too, already reaching `lead` through
|
|
22
|
+
* `synth-lead`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const VOICE_PROGRAMS: ReadonlySet<number>;
|
|
8
25
|
/** Whether this program is a sung part rather than an instrument. */
|
|
9
26
|
export declare function isVocalProgram(midiProgram: number): boolean;
|
|
10
27
|
/**
|
|
@@ -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;AAeF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAI7C,CAAC;AAEH,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,CAoCV"}
|
|
@@ -43,11 +43,15 @@ const HARMONY_FAMILIES = new Set([
|
|
|
43
43
|
* for the part carrying the song. Named here rather than moved to another
|
|
44
44
|
* family because the family is GM's and is right about everything else in it.
|
|
45
45
|
*
|
|
46
|
+
* Exported because the instrument picker offers these three as a group of
|
|
47
|
+
* their own, and a picker that restated the numbers would be a second list to
|
|
48
|
+
* keep in step with this one.
|
|
49
|
+
*
|
|
46
50
|
* `Pad 4 (choir)` (91) is deliberately absent: it says pad in its name and is
|
|
47
51
|
* one. `Lead 6 (voice)` (85) is absent too, already reaching `lead` through
|
|
48
52
|
* `synth-lead`.
|
|
49
53
|
*/
|
|
50
|
-
const VOICE_PROGRAMS = new Set([
|
|
54
|
+
export const VOICE_PROGRAMS = new Set([
|
|
51
55
|
52, // Choir Aahs
|
|
52
56
|
53, // Voice Oohs
|
|
53
57
|
54, // Synth Voice
|
|
@@ -153,7 +157,7 @@ export function rankTracksForGeneration(tracks, style) {
|
|
|
153
157
|
return index === -1 ? order.length : index;
|
|
154
158
|
};
|
|
155
159
|
/*
|
|
156
|
-
|
|
160
|
+
The singer goes first, ahead of the role order rather than inside it.
|
|
157
161
|
|
|
158
162
|
Two parts can both be leads — a vocal and a guitar — and then role alone
|
|
159
163
|
leaves the order to however the roster happened to be typed. In a song the
|
|
@@ -161,11 +165,23 @@ export function rankTracksForGeneration(tracks, style) {
|
|
|
161
165
|
behind them are written to fit. Ranked by index instead, a guitar listed
|
|
162
166
|
first got composed with no melody to sit under, and the singer then had to
|
|
163
167
|
bend around it.
|
|
168
|
+
|
|
169
|
+
This outranks the genre order, and that is the correction rather than an
|
|
170
|
+
oversight. `GROOVE_FIRST` writes the lead LAST — in reggae the bassline is
|
|
171
|
+
the material and the melody decorates it, which is true of an instrumental
|
|
172
|
+
and inverts the moment somebody is singing over it. In those eleven genres
|
|
173
|
+
every backing part was composed before the voice existed, so the rule that
|
|
174
|
+
tells a part to accompany the singer (`vocalSupportRule` in music_api) had
|
|
175
|
+
no singer to point at and never fired: the arrangement was finished and the
|
|
176
|
+
vocal was bent to fit it, which is exactly backwards.
|
|
177
|
+
|
|
178
|
+
A percussion track is never promoted, whatever its program addresses: on
|
|
179
|
+
the drum channel program 53 is a kit, not a voice.
|
|
164
180
|
*/
|
|
165
181
|
const voiceFirst = (track) => isVocalProgram(track.midiProgram) && track.clef !== "percussion" ? 0 : 1;
|
|
166
182
|
return tracks
|
|
167
183
|
.map((track, index) => ({ index, rank: rankOf(track), voice: voiceFirst(track) }))
|
|
168
|
-
.sort((a, b) => a.
|
|
184
|
+
.sort((a, b) => a.voice - b.voice || a.rank - b.rank || a.index - b.index)
|
|
169
185
|
.map((entry) => entry.index);
|
|
170
186
|
}
|
|
171
187
|
//# 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
|
|
1
|
+
{"version":3,"file":"arrangement-order.js","sourceRoot":"","sources":["../../../src/domain/instruments/arrangement-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,15 @@ export type InstrumentOption = {
|
|
|
33
33
|
};
|
|
34
34
|
/** The default selection: Piano, which is also the melody-carrying lead. */
|
|
35
35
|
export declare const DEFAULT_INSTRUMENT_VALUE = "0";
|
|
36
|
+
/**
|
|
37
|
+
* The voice a song is carried by, when one is added for the reader.
|
|
38
|
+
*
|
|
39
|
+
* `Voice Oohs` rather than `Choir Aahs`: a lead vocal is one person, and the
|
|
40
|
+
* choir patch is what a *backing* line sounds like. This is the only place the
|
|
41
|
+
* distinction between the three voice programs is stated — everywhere else
|
|
42
|
+
* they are simply "a voice" — so it is stated once, here.
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_VOCAL_INSTRUMENT_VALUE = "53";
|
|
36
45
|
/**
|
|
37
46
|
* The `KIT_OPTIONS` value for a program.
|
|
38
47
|
*
|
|
@@ -42,6 +51,29 @@ export declare const DEFAULT_INSTRUMENT_VALUE = "0";
|
|
|
42
51
|
export declare function kitOptionValue(program: number): string;
|
|
43
52
|
/** The eight GM drum kits, for a percussion track. */
|
|
44
53
|
export declare const KIT_OPTIONS: InstrumentOption[];
|
|
54
|
+
/**
|
|
55
|
+
* The three programs that are a human voice, as a group of their own.
|
|
56
|
+
*
|
|
57
|
+
* GM files them under `ensemble`, between String Ensemble and Orchestra Hit,
|
|
58
|
+
* which is where nobody setting out to write a song looks for a singer — so in
|
|
59
|
+
* practice a generated score never had one. The group is *derived* from the set
|
|
60
|
+
* the arranger reads (`VOICE_PROGRAMS`) rather than restating three numbers,
|
|
61
|
+
* because a picker offering a voice the arranger does not recognise as one is
|
|
62
|
+
* exactly the drift that costs a vocal-led arrangement.
|
|
63
|
+
*
|
|
64
|
+
* The default lead goes first and the rest follow in catalogue order: the first
|
|
65
|
+
* entry of a group is the one a reader takes as its ordinary answer, and here
|
|
66
|
+
* that answer is the solo voice.
|
|
67
|
+
*/
|
|
68
|
+
export declare const VOICE_OPTIONS: InstrumentOption[];
|
|
69
|
+
/**
|
|
70
|
+
* Whether a picker value is a sung part.
|
|
71
|
+
*
|
|
72
|
+
* Through the value rather than the program, because `kit:52` addresses a drum
|
|
73
|
+
* kit and a bare number check would read it as a choir — the same confusion
|
|
74
|
+
* `KIT_PREFIX` exists to prevent everywhere else.
|
|
75
|
+
*/
|
|
76
|
+
export declare function isVocalInstrumentValue(value: string): boolean;
|
|
45
77
|
/**
|
|
46
78
|
* Every melodic program, grouped by GM family.
|
|
47
79
|
*
|
|
@@ -50,10 +82,19 @@ export declare const KIT_OPTIONS: InstrumentOption[];
|
|
|
50
82
|
*/
|
|
51
83
|
export declare const INSTRUMENT_OPTIONS: InstrumentOption[];
|
|
52
84
|
/** The same catalogue as nested groups, for a picker that draws its own headings. */
|
|
85
|
+
/**
|
|
86
|
+
* The same catalogue as nested groups, for a picker that draws its own headings.
|
|
87
|
+
*
|
|
88
|
+
* **The voices are not in it**: they are offered as `VOICE_OPTIONS` above, and
|
|
89
|
+
* a program appearing in two groups of one menu is an entry whose selection is
|
|
90
|
+
* ambiguous — the control shows whichever heading it matched first and the
|
|
91
|
+
* reader cannot tell the two apart. `INSTRUMENT_OPTIONS` keeps all 128, because
|
|
92
|
+
* that one is the catalogue rather than a menu.
|
|
93
|
+
*/
|
|
53
94
|
export declare const FAMILY_GROUPS: {
|
|
54
95
|
key: "bass" | "pipe" | "piano" | "chromatic-percussion" | "organ" | "guitar" | "strings" | "ensemble" | "brass" | "reed" | "synth-lead" | "synth-pad" | "synth-effects" | "ethnic" | "percussive" | "sound-effects";
|
|
55
96
|
label: string;
|
|
56
|
-
instruments:
|
|
97
|
+
instruments: import("./gm.js").GmInstrument[];
|
|
57
98
|
}[];
|
|
58
99
|
/** Turns a picker value — from either list — back into track fields. */
|
|
59
100
|
export declare function instrumentChoiceFor(value: string): InstrumentChoice;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-options.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/instrument-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"instrument-options.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/instrument-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAU3C,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,sDAAsD;AACtD,eAAO,MAAM,WAAW,EAAE,gBAAgB,EAGvC,CAAC;AAEJ;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,EAAE,gBAAgB,EAQzC,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAOhD,CAAC;AAEF,qFAAqF;AACrF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa;;;;GAMyB,CAAC;AAYpD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAiBnE;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { GM_FAMILIES, GM_FAMILY_LABELS, gmInstrument, gmInstrumentsByFamily, } from "./gm.js";
|
|
2
2
|
import { GM_KITS, gmKit, gmKitAt } from "./gm-kit.js";
|
|
3
|
+
import { VOICE_PROGRAMS, isVocalProgram } from "./arrangement-order.js";
|
|
3
4
|
const KIT_PREFIX = "kit:";
|
|
4
5
|
/** The default selection: Piano, which is also the melody-carrying lead. */
|
|
5
6
|
export const DEFAULT_INSTRUMENT_VALUE = "0";
|
|
7
|
+
/**
|
|
8
|
+
* The voice a song is carried by, when one is added for the reader.
|
|
9
|
+
*
|
|
10
|
+
* `Voice Oohs` rather than `Choir Aahs`: a lead vocal is one person, and the
|
|
11
|
+
* choir patch is what a *backing* line sounds like. This is the only place the
|
|
12
|
+
* distinction between the three voice programs is stated — everywhere else
|
|
13
|
+
* they are simply "a voice" — so it is stated once, here.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_VOCAL_INSTRUMENT_VALUE = "53";
|
|
6
16
|
/**
|
|
7
17
|
* The `KIT_OPTIONS` value for a program.
|
|
8
18
|
*
|
|
@@ -17,6 +27,39 @@ export const KIT_OPTIONS = GM_KITS.map((kit) => ({
|
|
|
17
27
|
value: `${KIT_PREFIX}${kit.program}`,
|
|
18
28
|
label: kit.name,
|
|
19
29
|
}));
|
|
30
|
+
/**
|
|
31
|
+
* The three programs that are a human voice, as a group of their own.
|
|
32
|
+
*
|
|
33
|
+
* GM files them under `ensemble`, between String Ensemble and Orchestra Hit,
|
|
34
|
+
* which is where nobody setting out to write a song looks for a singer — so in
|
|
35
|
+
* practice a generated score never had one. The group is *derived* from the set
|
|
36
|
+
* the arranger reads (`VOICE_PROGRAMS`) rather than restating three numbers,
|
|
37
|
+
* because a picker offering a voice the arranger does not recognise as one is
|
|
38
|
+
* exactly the drift that costs a vocal-led arrangement.
|
|
39
|
+
*
|
|
40
|
+
* The default lead goes first and the rest follow in catalogue order: the first
|
|
41
|
+
* entry of a group is the one a reader takes as its ordinary answer, and here
|
|
42
|
+
* that answer is the solo voice.
|
|
43
|
+
*/
|
|
44
|
+
export const VOICE_OPTIONS = [
|
|
45
|
+
Number(DEFAULT_VOCAL_INSTRUMENT_VALUE),
|
|
46
|
+
...[...VOICE_PROGRAMS].filter((program) => program !== Number(DEFAULT_VOCAL_INSTRUMENT_VALUE)),
|
|
47
|
+
].map((program) => ({
|
|
48
|
+
value: String(program),
|
|
49
|
+
label: gmInstrument(program)?.name ?? "Voice",
|
|
50
|
+
}));
|
|
51
|
+
/**
|
|
52
|
+
* Whether a picker value is a sung part.
|
|
53
|
+
*
|
|
54
|
+
* Through the value rather than the program, because `kit:52` addresses a drum
|
|
55
|
+
* kit and a bare number check would read it as a choir — the same confusion
|
|
56
|
+
* `KIT_PREFIX` exists to prevent everywhere else.
|
|
57
|
+
*/
|
|
58
|
+
export function isVocalInstrumentValue(value) {
|
|
59
|
+
if (value.startsWith(KIT_PREFIX))
|
|
60
|
+
return false;
|
|
61
|
+
return isVocalProgram(Number(value));
|
|
62
|
+
}
|
|
20
63
|
/**
|
|
21
64
|
* Every melodic program, grouped by GM family.
|
|
22
65
|
*
|
|
@@ -29,11 +72,20 @@ export const INSTRUMENT_OPTIONS = GM_FAMILIES.flatMap((family) => gmInstrumentsB
|
|
|
29
72
|
group: GM_FAMILY_LABELS[family],
|
|
30
73
|
})));
|
|
31
74
|
/** The same catalogue as nested groups, for a picker that draws its own headings. */
|
|
75
|
+
/**
|
|
76
|
+
* The same catalogue as nested groups, for a picker that draws its own headings.
|
|
77
|
+
*
|
|
78
|
+
* **The voices are not in it**: they are offered as `VOICE_OPTIONS` above, and
|
|
79
|
+
* a program appearing in two groups of one menu is an entry whose selection is
|
|
80
|
+
* ambiguous — the control shows whichever heading it matched first and the
|
|
81
|
+
* reader cannot tell the two apart. `INSTRUMENT_OPTIONS` keeps all 128, because
|
|
82
|
+
* that one is the catalogue rather than a menu.
|
|
83
|
+
*/
|
|
32
84
|
export const FAMILY_GROUPS = GM_FAMILIES.map((family) => ({
|
|
33
85
|
key: family,
|
|
34
86
|
label: GM_FAMILY_LABELS[family],
|
|
35
|
-
instruments: gmInstrumentsByFamily(family),
|
|
36
|
-
}));
|
|
87
|
+
instruments: gmInstrumentsByFamily(family).filter((instrument) => !isVocalProgram(instrument.program)),
|
|
88
|
+
})).filter((group) => group.instruments.length > 0);
|
|
37
89
|
/**
|
|
38
90
|
* The clef a melodic program is written on.
|
|
39
91
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-options.js","sourceRoot":"","sources":["../../../src/domain/instruments/instrument-options.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"instrument-options.js","sourceRoot":"","sources":["../../../src/domain/instruments/instrument-options.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -76,6 +76,7 @@ export * from "./domain/instruments/gm-polyphony.js";
|
|
|
76
76
|
export * from "./domain/instruments/gm-transposition.js";
|
|
77
77
|
export * from "./domain/instruments/gm-percussion.js";
|
|
78
78
|
export * from "./domain/generation/style-presets.js";
|
|
79
|
+
export * from "./domain/generation/option-order.js";
|
|
79
80
|
export * from "./domain/selection/selection.js";
|
|
80
81
|
export * from "./services/regeneration/controller.js";
|
|
81
82
|
export * from "./domain/commands/history.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -98,6 +98,7 @@ export * from "./domain/instruments/gm-polyphony.js";
|
|
|
98
98
|
export * from "./domain/instruments/gm-transposition.js";
|
|
99
99
|
export * from "./domain/instruments/gm-percussion.js";
|
|
100
100
|
export * from "./domain/generation/style-presets.js";
|
|
101
|
+
export * from "./domain/generation/option-order.js";
|
|
101
102
|
export * from "./domain/selection/selection.js";
|
|
102
103
|
export * from "./services/regeneration/controller.js";
|
|
103
104
|
// Absorbed from music_lib: pure, synchronous, dependency-free model code
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED