@sudobility/music_types 0.13.5 → 0.13.7

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 CHANGED
@@ -39,6 +39,8 @@ Everything exports from a single sectioned `src/index.ts`:
39
39
 
40
40
  ## Gotchas
41
41
 
42
+ - **One row per General MIDI program, and every row says where its numbers came from** (`gm-catalogue.ts`). Range, polyphony and transposition used to be three tables of family defaults plus a handful of per-program overrides — which looked like deduplication and was not: 90 of the 128 programs inherited a compass nobody had chosen for them, and an inherited value was indistinguishable from a researched one. It hid a real bug (**Muted Trumpet** had no transposition entry, so a B-flat trumpet with a mute in the bell was treated as non-transposing and its part displayed a whole tone wrong), gave the **Clavinet** an 88-key piano compass where it has 60 keys F1-E6, and handed the flute's exact range to five instruments that share none of it. The repetition where eight guitars genuinely share a compass is the point: writing it eight times is a decision somebody made, where inheriting it eight times is a question nobody was asked. **`basis` is the field to read before trusting a number** — `measured` (checked against a source), `synthetic` (an electronic patch has no acoustic compass, so it gets the whole keyboard rather than an invented limit), `unpitched` (a sound effect), and `assumed` (**not verified**, carried over from the old default, left deliberately wide). The current split is 64/24/9/31. `gmRangeIsBinding` answers `true` only for `measured`, and the generation inspector consults it before reporting an out-of-range note: refusing a note against a compass nobody checked rejects music that was fine, and since that finding drives a retry it would spend real money arguing about a limit we invented.
43
+
42
44
  - **A regeneration request says who is playing, and a kit gets told how a kit is written.** A `ScoreFragment` is measures and nothing else — no name, no clef, no program — so "Replace Track" used to hand the model anonymous bars and let it infer the instrument from the notes in front of it. On a drum track there is nothing to infer from: the pitches are drum numbers, not notes. Measured on a real Power Kit regeneration, the result was the kick on every eighth of all 118 bars at a constant velocity 100, the snare on all four beats instead of the backbeat, and five of the 47 drums used — a metronome, not a groove. `RegenerateRegionRequest.tracks` now carries a `GenerateScoreRequestTrack` per fragment track, built by `describeTrackForGeneration` in music_types so whole-score generation and regeneration describe a track the *same* way; the range and polyphony come from `trackKeyboardRange`/`trackMaxPolyphony`, which answer about the **kit** on a percussion track rather than about whatever melodic program shares its number. The roster is matched to the fragment **by position**, so `buildRegeneratePrompt` emits it only when the lengths agree — a roster of a different length is not partial information but wrong information, naming the kit as the cello. And `percussionRules()` — previously generate-only, and previously just the GM map — now travels on both paths and states the two Expression rules that **invert** for percussion: an accent is the rule rather than the exception (velocity variation between accented and ghost notes *is* the groove), and a kit does play continuously even though each individual drum still rests. The map alone is not enough, which is the thing that had to be measured to be believed.
43
45
 
44
46
  - **One fact, one declaration — and `src/__single-source.test.ts` enforces it.** A constant restated in a second package agrees with the first right up until one of them is edited, and nothing fails when they part: the build is clean, the types match, and the only symptom is a wrong sound or a picker quietly missing an entry. Measured across the family, 23 UPPER_CASE constants were declared in more than one repo — `CC_VOLUME` three times, `DYNAMICS` four, `C_MAJOR` five, and `DEFAULT_TIME_SIGNATURE` in four places under two names. The guard reads the list of names **from music_types at runtime** rather than restating it, because a check against duplication that duplicates what it checks would drift like everything else; its `ALLOWED` list is empty on purpose, so an exemption is a decision somebody writes down. Two shapes matter beyond the constants themselves. **A closed vocabulary is declared as an array and the type read off it** (`export const DYNAMICS = [...] as const; export type Dynamic = (typeof DYNAMICS)[number];`) — a TypeScript union has no runtime form, so anything that must *validate* a value has to write the list out again, which is exactly how music_api's decoder came to check generated music against its own private copy. **A label or option list keyed by the vocabulary is a `Record<T, ...>`, never a parallel array** — a record fails to compile when a member is added, an array silently goes on offering the old set; that is why the inspector's picker lists are `ACCIDENTAL_OPTIONS`/`ARTICULATION_OPTIONS` built from the vocabulary rather than `ACCIDENTALS`/`ARTICULATIONS` retyped. Test fixtures follow the same rule: the score fixtures live once, in `@sudobility/music_types/test`, and a package that needs a rendering fixture of its own re-exports them and adds to them.
@@ -0,0 +1,41 @@
1
+ import type { GmFamily } from "./gm.js";
2
+ import { FULL_KEYBOARD, type MidiRange } from "./gm-range.js";
3
+ import { UNLIMITED_POLYPHONY } from "./gm-polyphony.js";
4
+ /** How much to trust a row's numbers. See the module doc. */
5
+ export declare const INSTRUMENT_BASES: readonly ["measured", "synthetic", "unpitched", "assumed"];
6
+ export type InstrumentBasis = (typeof INSTRUMENT_BASES)[number];
7
+ export type GmInstrumentSpec = {
8
+ program: number;
9
+ name: string;
10
+ family: GmFamily;
11
+ /** Sounding compass, inclusive. */
12
+ range: MidiRange;
13
+ /** Notes that can sound at once; `UNLIMITED_POLYPHONY` for anything chordal. */
14
+ maxPolyphony: number;
15
+ /** Semitones to ADD to a sounding pitch to get the written one. */
16
+ writtenTransposition: number;
17
+ basis: InstrumentBasis;
18
+ /** Why these numbers, in one line. */
19
+ note: string;
20
+ };
21
+ /** The catalogue, in program order. */
22
+ export declare const GM_CATALOGUE: readonly GmInstrumentSpec[];
23
+ /**
24
+ * The row for `program`, or `null` outside 0-127.
25
+ *
26
+ * Every other instrument accessor reads this, so there is one lookup to get
27
+ * wrong rather than four.
28
+ */
29
+ export declare function gmSpec(program: number): GmInstrumentSpec | null;
30
+ /**
31
+ * Whether a note outside this instrument's range is worth refusing.
32
+ *
33
+ * False for a synthetic patch, a sound effect, and — importantly — anything
34
+ * whose compass was never verified: refusing a note against a number nobody
35
+ * checked is worse than not checking, because it rejects music that was fine.
36
+ */
37
+ export declare function gmRangeIsBinding(program: number): boolean;
38
+ /** Guard: the families in program order, so a row cannot claim the wrong one. */
39
+ export declare function gmFamilyForProgram(program: number): GmFamily;
40
+ export { FULL_KEYBOARD, UNLIMITED_POLYPHONY };
41
+ //# sourceMappingURL=gm-catalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gm-catalogue.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-catalogue.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,4DAKnB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAgJF,uCAAuC;AACvC,eAAO,MAAM,YAAY,EAAE,SAAS,gBAAgB,EASjD,CAAC;AAEJ;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAI5D;AAED,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Every General MIDI program, one row each, stating its own numbers.
3
+ *
4
+ * This replaced four tables that each held a family default plus a handful of
5
+ * per-program overrides. That shape looked like deduplication and was not: 90
6
+ * of the 128 programs inherited a range nobody had chosen for them, and an
7
+ * inherited value was indistinguishable from a researched one. It hid a real
8
+ * bug — Muted Trumpet had no transposition entry, so a B-flat trumpet with a
9
+ * mute in the bell was treated as non-transposing and its part displayed a
10
+ * whole tone wrong — and it quietly gave the Clavinet an 88-key piano compass,
11
+ * and gave the flute's exact range to five instruments that share none of it.
12
+ *
13
+ * One row per program costs some repetition where eight guitars really do
14
+ * share a compass. That repetition is the point: writing it eight times is a
15
+ * decision somebody made, where inheriting it eight times is a question nobody
16
+ * was asked.
17
+ *
18
+ * `basis` is what makes this honest, and it is the field to read before
19
+ * trusting a number:
20
+ *
21
+ * - `measured` — checked against a source for that instrument.
22
+ * - `synthetic` — an electronic patch with no acoustic compass. The range is
23
+ * the full keyboard because narrowing it would be a fiction.
24
+ * - `unpitched` — a sound effect. There is no pitch to be outside of.
25
+ * - `assumed` — NOT verified. Carried over from the old family default and
26
+ * left deliberately wide. Anything reading these numbers to
27
+ * refuse a note must not refuse on an `assumed` row.
28
+ */
29
+ import { GM_FAMILIES } from "./gm.js";
30
+ import { FULL_KEYBOARD } from "./gm-range.js";
31
+ import { UNLIMITED_POLYPHONY } from "./gm-polyphony.js";
32
+ /** How much to trust a row's numbers. See the module doc. */
33
+ export const INSTRUMENT_BASES = [
34
+ "measured",
35
+ "synthetic",
36
+ "unpitched",
37
+ "assumed",
38
+ ];
39
+ const ROWS = [
40
+ { program: 0, name: "Acoustic Grand Piano", family: "piano", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "A0-C8, the 88-key piano" },
41
+ { program: 1, name: "Bright Acoustic Piano", family: "piano", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "an acoustic piano" },
42
+ { program: 2, name: "Electric Grand Piano", family: "piano", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "an electric grand is a full-size piano action" },
43
+ { program: 3, name: "Honky-tonk Piano", family: "piano", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "a tack piano is a piano" },
44
+ { program: 4, name: "Electric Piano 1", family: "piano", min: 28, max: 100, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "Rhodes 73: 73 keys from E1, so E1-E7" },
45
+ { program: 5, name: "Electric Piano 2", family: "piano", min: 29, max: 88, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "Wurlitzer 200A: 64 keys, A1-C7 is often cited; the 60-key F1-E6 span is the conservative overlap" },
46
+ { program: 6, name: "Harpsichord", family: "piano", min: 29, max: 89, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "F1-F6, the standard two-manual compass" },
47
+ { program: 7, name: "Clavinet", family: "piano", min: 29, max: 88, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "Clavinet D6: 60 keys, F1-E6 (Wikipedia)" },
48
+ { program: 8, name: "Celesta", family: "chromatic-percussion", min: 60, max: 108, poly: UNLIMITED_POLYPHONY, transpose: -12, basis: "measured", note: "C4-C8 sounding; written an octave lower" },
49
+ { program: 9, name: "Glockenspiel", family: "chromatic-percussion", min: 79, max: 108, poly: UNLIMITED_POLYPHONY, transpose: -24, basis: "measured", note: "G5-C8 sounding; written two octaves lower" },
50
+ { program: 10, name: "Music Box", family: "chromatic-percussion", min: 48, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "a music box movement is small and high, but no authoritative compass was found" },
51
+ { program: 11, name: "Vibraphone", family: "chromatic-percussion", min: 53, max: 89, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "F3-F6, three octaves" },
52
+ { program: 12, name: "Marimba", family: "chromatic-percussion", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "C2-C7, the five-octave concert marimba" },
53
+ { program: 13, name: "Xylophone", family: "chromatic-percussion", min: 65, max: 108, poly: UNLIMITED_POLYPHONY, transpose: -12, basis: "measured", note: "F4-C8 sounding; written an octave lower" },
54
+ { program: 14, name: "Tubular Bells", family: "chromatic-percussion", min: 60, max: 77, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "C4-F5, the orchestral chime set" },
55
+ { program: 15, name: "Dulcimer", family: "chromatic-percussion", min: 48, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "hammered dulcimers vary widely by build" },
56
+ { program: 16, name: "Drawbar Organ", family: "organ", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "Hammond drawbar manual: 61 keys, C2-C7" },
57
+ { program: 17, name: "Percussive Organ", family: "organ", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "same manual" },
58
+ { program: 18, name: "Rock Organ", family: "organ", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "same manual" },
59
+ { program: 19, name: "Church Organ", family: "organ", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "C1-C7 manuals; the 32' pedal reaches lower but is a separate part" },
60
+ { program: 20, name: "Reed Organ", family: "organ", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "reed organs vary; the Hammond manual is the usable overlap" },
61
+ { program: 21, name: "Accordion", family: "organ", min: 41, max: 81, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "piano-accordion right hand, F2-A5 on a 41-key model" },
62
+ { program: 22, name: "Harmonica", family: "organ", min: 60, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "12-hole chromatic, C4-C7" },
63
+ { program: 23, name: "Tango Accordion", family: "organ", min: 41, max: 81, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "as the accordion above" },
64
+ { program: 24, name: "Acoustic Guitar (nylon)", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
65
+ { program: 25, name: "Acoustic Guitar (steel)", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
66
+ { program: 26, name: "Electric Guitar (jazz)", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
67
+ { program: 27, name: "Electric Guitar (clean)", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
68
+ { program: 28, name: "Electric Guitar (muted)", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
69
+ { program: 29, name: "Overdriven Guitar", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
70
+ { program: 30, name: "Distortion Guitar", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
71
+ { program: 31, name: "Guitar Harmonics", family: "guitar", min: 40, max: 88, poly: 6, transpose: 12, basis: "measured", note: "six strings, low E2 up to E6 at the top fret" },
72
+ { program: 32, name: "Acoustic Bass", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
73
+ { program: 33, name: "Electric Bass (finger)", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
74
+ { program: 34, name: "Electric Bass (pick)", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
75
+ { program: 35, name: "Fretless Bass", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
76
+ { program: 36, name: "Slap Bass 1", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
77
+ { program: 37, name: "Slap Bass 2", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
78
+ { program: 38, name: "Synth Bass 1", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
79
+ { program: 39, name: "Synth Bass 2", family: "bass", min: 28, max: 67, poly: 4, transpose: 12, basis: "measured", note: "four strings, low E1 up to G4 at the top fret" },
80
+ { program: 40, name: "Violin", family: "strings", min: 55, max: 100, poly: 2, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
81
+ { program: 41, name: "Viola", family: "strings", min: 48, max: 88, poly: 2, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
82
+ { program: 42, name: "Cello", family: "strings", min: 36, max: 84, poly: 2, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
83
+ { program: 43, name: "Contrabass", family: "strings", min: 28, max: 67, poly: 2, transpose: 12, basis: "measured", note: "checked against an orchestration range chart" },
84
+ { program: 44, name: "Tremolo Strings", family: "strings", min: 36, max: 96, poly: 2, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
85
+ { program: 45, name: "Pizzicato Strings", family: "strings", min: 36, max: 96, poly: 2, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
86
+ { program: 46, name: "Orchestral Harp", family: "strings", min: 24, max: 103, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
87
+ { program: 47, name: "Timpani", family: "strings", min: 38, max: 57, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "D2-A3 across a set; a timpanist plays several drums and can sound them together" },
88
+ { program: 48, name: "String Ensemble 1", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
89
+ { program: 49, name: "String Ensemble 2", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
90
+ { program: 50, name: "Synth Strings 1", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
91
+ { program: 51, name: "Synth Strings 2", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
92
+ { program: 52, name: "Choir Aahs", family: "ensemble", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
93
+ { program: 53, name: "Voice Oohs", family: "ensemble", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
94
+ { program: 54, name: "Synth Voice", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
95
+ { program: 55, name: "Orchestra Hit", family: "ensemble", min: 36, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
96
+ { program: 56, name: "Trumpet", family: "brass", min: 52, max: 86, poly: 1, transpose: 2, basis: "measured", note: "checked against an orchestration range chart" },
97
+ { program: 57, name: "Trombone", family: "brass", min: 40, max: 77, poly: 1, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
98
+ { program: 58, name: "Tuba", family: "brass", min: 26, max: 65, poly: 1, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
99
+ { program: 59, name: "Muted Trumpet", family: "brass", min: 52, max: 86, poly: 1, transpose: 2, basis: "measured", note: "a muted trumpet is a B-flat trumpet with a mute in the bell" },
100
+ { program: 60, name: "French Horn", family: "brass", min: 35, max: 77, poly: 1, transpose: 7, basis: "measured", note: "checked against an orchestration range chart" },
101
+ { program: 61, name: "Brass Section", family: "brass", min: 34, max: 82, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
102
+ { program: 62, name: "Synth Brass 1", family: "brass", min: 34, max: 82, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
103
+ { program: 63, name: "Synth Brass 2", family: "brass", min: 34, max: 82, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
104
+ { program: 64, name: "Soprano Sax", family: "reed", min: 56, max: 88, poly: 1, transpose: 2, basis: "measured", note: "checked against an orchestration range chart" },
105
+ { program: 65, name: "Alto Sax", family: "reed", min: 49, max: 81, poly: 1, transpose: 9, basis: "measured", note: "checked against an orchestration range chart" },
106
+ { program: 66, name: "Tenor Sax", family: "reed", min: 44, max: 76, poly: 1, transpose: 14, basis: "measured", note: "checked against an orchestration range chart" },
107
+ { program: 67, name: "Baritone Sax", family: "reed", min: 36, max: 69, poly: 1, transpose: 21, basis: "measured", note: "checked against an orchestration range chart" },
108
+ { program: 68, name: "Oboe", family: "reed", min: 58, max: 91, poly: 1, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
109
+ { program: 69, name: "English Horn", family: "reed", min: 52, max: 81, poly: 1, transpose: 7, basis: "measured", note: "checked against an orchestration range chart" },
110
+ { program: 70, name: "Bassoon", family: "reed", min: 34, max: 75, poly: 1, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
111
+ { program: 71, name: "Clarinet", family: "reed", min: 50, max: 94, poly: 1, transpose: 2, basis: "measured", note: "checked against an orchestration range chart" },
112
+ { program: 72, name: "Piccolo", family: "pipe", min: 74, max: 108, poly: 1, transpose: -12, basis: "measured", note: "checked against an orchestration range chart" },
113
+ { program: 73, name: "Flute", family: "pipe", min: 60, max: 98, poly: 1, transpose: 0, basis: "measured", note: "checked against an orchestration range chart" },
114
+ { program: 74, name: "Recorder", family: "pipe", min: 65, max: 98, poly: 1, transpose: 0, basis: "measured", note: "alto F4-G6 and soprano C5-D7 together; GM does not say which" },
115
+ { program: 75, name: "Pan Flute", family: "pipe", min: 60, max: 98, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
116
+ { program: 76, name: "Blown Bottle", family: "pipe", min: 60, max: 98, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
117
+ { program: 77, name: "Shakuhachi", family: "pipe", min: 62, max: 91, poly: 1, transpose: 0, basis: "measured", note: "1.8 shakuhachi: D4 fundamental, two octaves and a partial third" },
118
+ { program: 78, name: "Whistle", family: "pipe", min: 60, max: 98, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
119
+ { program: 79, name: "Ocarina", family: "pipe", min: 60, max: 98, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
120
+ { program: 80, name: "Lead 1 (square)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
121
+ { program: 81, name: "Lead 2 (sawtooth)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
122
+ { program: 82, name: "Lead 3 (calliope)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
123
+ { program: 83, name: "Lead 4 (chiff)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
124
+ { program: 84, name: "Lead 5 (charang)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
125
+ { program: 85, name: "Lead 6 (voice)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
126
+ { program: 86, name: "Lead 7 (fifths)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
127
+ { program: 87, name: "Lead 8 (bass + lead)", family: "synth-lead", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
128
+ { program: 88, name: "Pad 1 (new age)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
129
+ { program: 89, name: "Pad 2 (warm)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
130
+ { program: 90, name: "Pad 3 (polysynth)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
131
+ { program: 91, name: "Pad 4 (choir)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
132
+ { program: 92, name: "Pad 5 (bowed)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
133
+ { program: 93, name: "Pad 6 (metallic)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
134
+ { program: 94, name: "Pad 7 (halo)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
135
+ { program: 95, name: "Pad 8 (sweep)", family: "synth-pad", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
136
+ { program: 96, name: "FX 1 (rain)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
137
+ { program: 97, name: "FX 2 (soundtrack)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
138
+ { program: 98, name: "FX 3 (crystal)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
139
+ { program: 99, name: "FX 4 (atmosphere)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
140
+ { program: 100, name: "FX 5 (brightness)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
141
+ { program: 101, name: "FX 6 (goblins)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
142
+ { program: 102, name: "FX 7 (echoes)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
143
+ { program: 103, name: "FX 8 (sci-fi)", family: "synth-effects", min: 24, max: 96, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "synthetic", note: "an electronic patch has no acoustic compass" },
144
+ { program: 104, name: "Sitar", family: "ethnic", min: 40, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "sitar compass not authoritatively sourced" },
145
+ { program: 105, name: "Banjo", family: "ethnic", min: 48, max: 84, poly: 5, transpose: 0, basis: "measured", note: "5-string banjo open G reaches D3; tenor banjo down to C3; up to about C6" },
146
+ { program: 106, name: "Shamisen", family: "ethnic", min: 48, max: 79, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
147
+ { program: 107, name: "Koto", family: "ethnic", min: 43, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
148
+ { program: 108, name: "Kalimba", family: "ethnic", min: 53, max: 89, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
149
+ { program: 109, name: "Bagpipe", family: "ethnic", min: 40, max: 84, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
150
+ { program: 110, name: "Fiddle", family: "ethnic", min: 40, max: 84, poly: 2, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
151
+ { program: 111, name: "Shanai", family: "ethnic", min: 40, max: 84, poly: 1, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
152
+ { program: 112, name: "Tinkle Bell", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "tinkle bell is a high sound, but no authoritative compass was found" },
153
+ { program: 113, name: "Agogo", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
154
+ { program: 114, name: "Steel Drums", family: "percussive", min: 33, max: 91, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "measured", note: "steelpan family A1-G6" },
155
+ { program: 115, name: "Woodblock", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "a woodblock is a small set of pitched blocks; no authoritative compass" },
156
+ { program: 116, name: "Taiko Drum", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
157
+ { program: 117, name: "Melodic Tom", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
158
+ { program: 118, name: "Synth Drum", family: "percussive", min: 48, max: 84, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "assumed", note: "inherited from the family default; not individually verified" },
159
+ { program: 119, name: "Reverse Cymbal", family: "percussive", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "reverse cymbal is an effect, not a pitch" },
160
+ { program: 120, name: "Guitar Fret Noise", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
161
+ { program: 121, name: "Breath Noise", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
162
+ { program: 122, name: "Seashore", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
163
+ { program: 123, name: "Bird Tweet", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
164
+ { program: 124, name: "Telephone Ring", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
165
+ { program: 125, name: "Helicopter", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
166
+ { program: 126, name: "Applause", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
167
+ { program: 127, name: "Gunshot", family: "sound-effects", min: 21, max: 108, poly: UNLIMITED_POLYPHONY, transpose: 0, basis: "unpitched", note: "sound effect" },
168
+ ];
169
+ /** The catalogue, in program order. */
170
+ export const GM_CATALOGUE = ROWS.map((r) => ({
171
+ program: r.program,
172
+ name: r.name,
173
+ family: r.family,
174
+ range: { min: r.min, max: r.max },
175
+ maxPolyphony: r.poly,
176
+ writtenTransposition: r.transpose,
177
+ basis: r.basis,
178
+ note: r.note,
179
+ }));
180
+ /**
181
+ * The row for `program`, or `null` outside 0-127.
182
+ *
183
+ * Every other instrument accessor reads this, so there is one lookup to get
184
+ * wrong rather than four.
185
+ */
186
+ export function gmSpec(program) {
187
+ return GM_CATALOGUE[program] ?? null;
188
+ }
189
+ /**
190
+ * Whether a note outside this instrument's range is worth refusing.
191
+ *
192
+ * False for a synthetic patch, a sound effect, and — importantly — anything
193
+ * whose compass was never verified: refusing a note against a number nobody
194
+ * checked is worse than not checking, because it rejects music that was fine.
195
+ */
196
+ export function gmRangeIsBinding(program) {
197
+ return gmSpec(program)?.basis === "measured";
198
+ }
199
+ /** Guard: the families in program order, so a row cannot claim the wrong one. */
200
+ export function gmFamilyForProgram(program) {
201
+ const family = GM_FAMILIES[Math.floor(program / 8)];
202
+ if (!family)
203
+ throw new RangeError(`no General MIDI family for ${program}`);
204
+ return family;
205
+ }
206
+ export { FULL_KEYBOARD, UNLIMITED_POLYPHONY };
207
+ //# sourceMappingURL=gm-catalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gm-catalogue.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-catalogue.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ export declare const UNLIMITED_POLYPHONY: number;
3
3
  /**
4
4
  * The most notes `program` can sound simultaneously.
5
5
  *
6
- * Returns `UNLIMITED_POLYPHONY` for anything chordal, and for any program
7
- * outside 0-127 an unknown instrument gets the benefit of the doubt rather
8
- * than having edits blocked against a guess.
6
+ * `UNLIMITED_POLYPHONY` for anything chordal and for any program outside
7
+ * 0-127: an unknown instrument gets the benefit of the doubt rather than
8
+ * having edits blocked against a guess.
9
9
  */
10
10
  export declare function gmMaxPolyphony(program: number): number;
11
11
  /** Whether `program` can sound `count` notes at once. */
@@ -1 +1 @@
1
- {"version":3,"file":"gm-polyphony.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-polyphony.ts"],"names":[],"mappings":"AAgBA,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,QAA2B,CAAC;AA4C5D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvE"}
1
+ {"version":3,"file":"gm-polyphony.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-polyphony.ts"],"names":[],"mappings":"AAkBA,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,QAA2B,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvE"}
@@ -1,73 +1,31 @@
1
1
  /**
2
2
  * How many notes a General MIDI program can sound at once.
3
3
  *
4
- * General MIDI says nothing about this, so like `gm-range.ts` it is a
5
- * curated table: a default per family, with overrides where the family default
6
- * would be wrong. The numbers are physical facts about the instruments, not
7
- * preferences: a trumpet player has one airstream, a guitar has six strings, a
8
- * violinist can bow two strings at once (and briefly break three).
4
+ * General MIDI says nothing about this, so the numbers are ours. They are
5
+ * physical facts about the instruments rather than preferences: a trumpet
6
+ * player has one airstream, a guitar has six strings, a banjo five, a violinist
7
+ * can bow two at once (and briefly break three).
8
+ *
9
+ * They live in `gm-catalogue.ts`, one row per program, alongside that
10
+ * program's range and transposition — see that module for why a family default
11
+ * plus overrides turned out to be the wrong shape for this.
9
12
  *
10
13
  * This exists so the editor can refuse to write a chord nobody could play. It
11
14
  * deliberately does NOT describe what a synthesizer patch can do — polyphony
12
15
  * there is a setting, not a limit — so every synth family is unlimited.
13
16
  */
14
- import { gmFamilyOf, gmInstrument } from "./gm.js";
17
+ import { gmSpec } from "./gm-catalogue.js";
15
18
  /** No physical limit: keyboards, plucked strings, sections, synths, drums. */
16
19
  export const UNLIMITED_POLYPHONY = Number.POSITIVE_INFINITY;
17
- /**
18
- * Family defaults.
19
- *
20
- * Wind and brass are 1 because one player has one airstream. Bowed strings are
21
- * 2 for double stops. Everything else is unlimited — including the synth
22
- * families, where polyphony is a patch setting rather than a property of the
23
- * instrument, and blocking a chord there would be an invented restriction.
24
- */
25
- const FAMILY_POLYPHONY = {
26
- piano: UNLIMITED_POLYPHONY,
27
- "chromatic-percussion": UNLIMITED_POLYPHONY,
28
- organ: UNLIMITED_POLYPHONY,
29
- guitar: 6,
30
- bass: 4,
31
- strings: 2,
32
- ensemble: UNLIMITED_POLYPHONY,
33
- brass: 1,
34
- reed: 1,
35
- pipe: 1,
36
- "synth-lead": UNLIMITED_POLYPHONY,
37
- "synth-pad": UNLIMITED_POLYPHONY,
38
- "synth-effects": UNLIMITED_POLYPHONY,
39
- ethnic: UNLIMITED_POLYPHONY,
40
- percussive: UNLIMITED_POLYPHONY,
41
- "sound-effects": UNLIMITED_POLYPHONY,
42
- };
43
- /** Programs whose own limit differs from their family's. */
44
- const PROGRAM_POLYPHONY = {
45
- // In the strings family but not bowed: both are chordal instruments.
46
- 46: UNLIMITED_POLYPHONY, // Orchestral Harp
47
- 47: UNLIMITED_POLYPHONY, // Timpani — a set of drums, not one
48
- // Sections, not soloists, despite sitting in the brass family.
49
- 61: UNLIMITED_POLYPHONY, // Brass Section
50
- 62: UNLIMITED_POLYPHONY, // Synth Brass 1
51
- 63: UNLIMITED_POLYPHONY, // Synth Brass 2
52
- // Single-line players inside the otherwise-chordal ethnic family.
53
- 109: 1, // Bagpipe
54
- 110: 2, // Fiddle — bowed, so double stops
55
- 111: 1, // Shanai
56
- };
57
20
  /**
58
21
  * The most notes `program` can sound simultaneously.
59
22
  *
60
- * Returns `UNLIMITED_POLYPHONY` for anything chordal, and for any program
61
- * outside 0-127 an unknown instrument gets the benefit of the doubt rather
62
- * than having edits blocked against a guess.
23
+ * `UNLIMITED_POLYPHONY` for anything chordal and for any program outside
24
+ * 0-127: an unknown instrument gets the benefit of the doubt rather than
25
+ * having edits blocked against a guess.
63
26
  */
64
27
  export function gmMaxPolyphony(program) {
65
- const override = PROGRAM_POLYPHONY[program];
66
- if (override !== undefined)
67
- return override;
68
- return gmInstrument(program)
69
- ? FAMILY_POLYPHONY[gmFamilyOf(program)]
70
- : UNLIMITED_POLYPHONY;
28
+ return gmSpec(program)?.maxPolyphony ?? UNLIMITED_POLYPHONY;
71
29
  }
72
30
  /** Whether `program` can sound `count` notes at once. */
73
31
  export function gmSupportsChord(program, count) {
@@ -1 +1 @@
1
- {"version":3,"file":"gm-polyphony.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-polyphony.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGnD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAA6B;IACjD,KAAK,EAAE,mBAAmB;IAC1B,sBAAsB,EAAE,mBAAmB;IAC3C,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,mBAAmB;IAChC,eAAe,EAAE,mBAAmB;IACpC,MAAM,EAAE,mBAAmB;IAC3B,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,mBAAmB;CACrC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,iBAAiB,GAA2B;IAChD,qEAAqE;IACrE,EAAE,EAAE,mBAAmB,EAAE,kBAAkB;IAC3C,EAAE,EAAE,mBAAmB,EAAE,oCAAoC;IAC7D,+DAA+D;IAC/D,EAAE,EAAE,mBAAmB,EAAE,gBAAgB;IACzC,EAAE,EAAE,mBAAmB,EAAE,gBAAgB;IACzC,EAAE,EAAE,mBAAmB,EAAE,gBAAgB;IACzC,kEAAkE;IAClE,GAAG,EAAE,CAAC,EAAE,UAAU;IAClB,GAAG,EAAE,CAAC,EAAE,kCAAkC;IAC1C,GAAG,EAAE,CAAC,EAAE,SAAS;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,OAAO,YAAY,CAAC,OAAO,CAAC;QAC1B,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,mBAAmB,CAAC;AAC1B,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa;IAC5D,OAAO,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"gm-polyphony.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-polyphony.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,IAAI,mBAAmB,CAAC;AAC9D,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa;IAC5D,OAAO,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,4 +1,11 @@
1
- /** Inclusive MIDI note numbers. */
1
+ /**
2
+ * An instrument's compass.
3
+ *
4
+ * The numbers themselves live in `gm-catalogue.ts`, one row per program. They
5
+ * used to live here as a family default plus 38 overrides, which meant 90
6
+ * programs inherited a compass nobody had chosen for them — see that module's
7
+ * doc for what that hid.
8
+ */
2
9
  export type MidiRange = {
3
10
  min: number;
4
11
  max: number;
@@ -6,10 +13,8 @@ export type MidiRange = {
6
13
  /** A0 to C8 — the 88-key piano, and the widest range anything here returns. */
7
14
  export declare const FULL_KEYBOARD: MidiRange;
8
15
  /**
9
- * The practical range for `program`: its own if it has one, else its family's.
10
- *
11
- * An out-of-range program has no family, so it falls back to the full keyboard
12
- * rather than guessing.
16
+ * The practical range for `program`, or the full keyboard for an unknown one
17
+ * benefit of the doubt rather than edits blocked against a guess.
13
18
  */
14
19
  export declare function gmInstrumentRange(program: number): MidiRange;
15
20
  //# sourceMappingURL=gm-range.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gm-range.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-range.ts"],"names":[],"mappings":"AAmBA,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,SAAiC,CAAC;AAmE9D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAM5D"}
1
+ {"version":3,"file":"gm-range.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-range.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,aAAa,EAAE,SAAiC,CAAC;AAI9D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE5D"}
@@ -1,97 +1,11 @@
1
- /**
2
- * A playable pitch range per General MIDI program.
3
- *
4
- * General MIDI defines names and programs but says nothing about compass, so
5
- * this is a curated table: a default per family, with overrides for the
6
- * instruments where the family default would be badly wrong. A piccolo and a
7
- * tuba are both "wind", and showing either one an 88-key piano tells the player
8
- * nothing about what will actually sound.
9
- *
10
- * The values are the conventional written-to-sounding ranges of the real
11
- * instruments, expressed as MIDI note numbers (60 = middle C). They are
12
- * intentionally the *practical* range rather than the extreme one — the point
13
- * is to show a keyboard whose keys are worth pressing, not to police input.
14
- * Nothing here restricts what can be written; it only decides which keys are
15
- * worth showing.
16
- */
17
- import { gmFamilyOf, gmInstrument } from "./gm.js";
18
1
  /** A0 to C8 — the 88-key piano, and the widest range anything here returns. */
19
2
  export const FULL_KEYBOARD = { min: 21, max: 108 };
3
+ import { gmSpec } from "./gm-catalogue.js";
20
4
  /**
21
- * Family defaults. Synth and effects families get a wide range on purpose:
22
- * they have no acoustic compass to respect, so narrowing them would be a
23
- * fiction.
24
- */
25
- const FAMILY_RANGE = {
26
- piano: { min: 21, max: 108 },
27
- "chromatic-percussion": { min: 48, max: 96 },
28
- organ: { min: 36, max: 96 },
29
- guitar: { min: 40, max: 88 },
30
- bass: { min: 28, max: 67 },
31
- strings: { min: 36, max: 96 },
32
- ensemble: { min: 36, max: 96 },
33
- brass: { min: 34, max: 82 },
34
- reed: { min: 44, max: 88 },
35
- pipe: { min: 60, max: 98 },
36
- "synth-lead": { min: 24, max: 96 },
37
- "synth-pad": { min: 24, max: 96 },
38
- "synth-effects": { min: 24, max: 96 },
39
- ethnic: { min: 40, max: 84 },
40
- percussive: { min: 48, max: 84 },
41
- "sound-effects": { min: 21, max: 108 },
42
- };
43
- /** Instruments whose own compass differs enough from their family to matter. */
44
- const PROGRAM_RANGE = {
45
- 6: { min: 29, max: 89 }, // Harpsichord
46
- 8: { min: 60, max: 108 }, // Celesta
47
- 9: { min: 79, max: 108 }, // Glockenspiel
48
- 11: { min: 53, max: 89 }, // Vibraphone
49
- 12: { min: 36, max: 96 }, // Marimba
50
- 13: { min: 65, max: 108 }, // Xylophone
51
- 14: { min: 65, max: 89 }, // Tubular Bells
52
- 19: { min: 24, max: 96 }, // Church Organ
53
- 21: { min: 41, max: 81 }, // Accordion
54
- 22: { min: 60, max: 96 }, // Harmonica
55
- 40: { min: 55, max: 100 }, // Violin
56
- 41: { min: 48, max: 88 }, // Viola
57
- 42: { min: 36, max: 84 }, // Cello
58
- 43: { min: 28, max: 67 }, // Contrabass
59
- 46: { min: 24, max: 103 }, // Orchestral Harp
60
- 47: { min: 38, max: 57 }, // Timpani
61
- 52: { min: 48, max: 84 }, // Choir Aahs
62
- 53: { min: 48, max: 84 }, // Voice Oohs
63
- 56: { min: 52, max: 86 }, // Trumpet
64
- 57: { min: 40, max: 77 }, // Trombone
65
- 58: { min: 26, max: 65 }, // Tuba
66
- 60: { min: 35, max: 77 }, // French Horn
67
- 64: { min: 56, max: 88 }, // Soprano Sax
68
- 65: { min: 49, max: 81 }, // Alto Sax
69
- 66: { min: 44, max: 76 }, // Tenor Sax
70
- 67: { min: 36, max: 69 }, // Baritone Sax
71
- 68: { min: 58, max: 91 }, // Oboe
72
- 69: { min: 52, max: 81 }, // English Horn
73
- 70: { min: 34, max: 75 }, // Bassoon
74
- 71: { min: 50, max: 94 }, // Clarinet
75
- 72: { min: 74, max: 108 }, // Piccolo
76
- 73: { min: 60, max: 98 }, // Flute
77
- 74: { min: 65, max: 91 }, // Recorder
78
- 105: { min: 48, max: 81 }, // Banjo
79
- 106: { min: 48, max: 79 }, // Shamisen
80
- 107: { min: 43, max: 84 }, // Koto
81
- 108: { min: 53, max: 89 }, // Kalimba
82
- };
83
- /**
84
- * The practical range for `program`: its own if it has one, else its family's.
85
- *
86
- * An out-of-range program has no family, so it falls back to the full keyboard
87
- * rather than guessing.
5
+ * The practical range for `program`, or the full keyboard for an unknown one —
6
+ * benefit of the doubt rather than edits blocked against a guess.
88
7
  */
89
8
  export function gmInstrumentRange(program) {
90
- const override = PROGRAM_RANGE[program];
91
- if (override)
92
- return override;
93
- return gmInstrument(program)
94
- ? FAMILY_RANGE[gmFamilyOf(program)]
95
- : FULL_KEYBOARD;
9
+ return gmSpec(program)?.range ?? FULL_KEYBOARD;
96
10
  }
97
11
  //# sourceMappingURL=gm-range.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gm-range.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gm-range.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-range.ts"],"names":[],"mappings":"AAUA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAc,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,aAAa,CAAC;AACjD,CAAC"}
@@ -1,3 +1,15 @@
1
+ /**
2
+ * How far a General MIDI program's written pitch sits from its sounding pitch.
3
+ *
4
+ * A transposing instrument is written in a key other than the one it sounds: a
5
+ * B♭ trumpet reads a tone above what comes out, so concert C is written D.
6
+ * This is a property of the instrument, not a preference — hand a clarinettist
7
+ * a part at concert pitch and every note is wrong.
8
+ *
9
+ * Curated like `gm-range.ts` and `gm-polyphony.ts`: a default with overrides
10
+ * for the programs that actually transpose. Most do not, so the table below is
11
+ * only the exceptions.
12
+ */
1
13
  /**
2
14
  * Semitones to add to `program`'s sounding pitch to get its written pitch.
3
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"gm-transposition.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-transposition.ts"],"names":[],"mappings":"AA0DA;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD"}
1
+ {"version":3,"file":"gm-transposition.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm-transposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -10,46 +10,8 @@
10
10
  * for the programs that actually transpose. Most do not, so the table below is
11
11
  * only the exceptions.
12
12
  */
13
- import { gmInstrument } from "./gm.js";
14
13
  /** Semitones to ADD to sounding pitch to get written pitch. */
15
- const PROGRAM_TRANSPOSITION = {
16
- // Octave-transposing tuned percussion: written an octave (or two) below
17
- // where they sound, so the reader is not chasing ledger lines.
18
- 8: -12, // Celesta
19
- 9: -24, // Glockenspiel
20
- 13: -12, // Xylophone
21
- // Guitars and basses are written an octave above where they sound.
22
- 24: 12, // Acoustic Guitar (nylon)
23
- 25: 12, // Acoustic Guitar (steel)
24
- 26: 12, // Electric Guitar (jazz)
25
- 27: 12, // Electric Guitar (clean)
26
- 28: 12, // Electric Guitar (muted)
27
- 29: 12, // Overdriven Guitar
28
- 30: 12, // Distortion Guitar
29
- 31: 12, // Guitar Harmonics
30
- 32: 12, // Acoustic Bass
31
- 33: 12, // Electric Bass (finger)
32
- 34: 12, // Electric Bass (pick)
33
- 35: 12, // Fretless Bass
34
- 36: 12, // Slap Bass 1
35
- 37: 12, // Slap Bass 2
36
- 38: 12, // Synth Bass 1
37
- 39: 12, // Synth Bass 2
38
- 43: 12, // Contrabass
39
- // Brass.
40
- 56: 2, // Trumpet — B♭
41
- 60: 7, // French Horn — F
42
- // Reeds. The saxophone family transposes by four different intervals, which
43
- // is why they cannot share a family default.
44
- 64: 2, // Soprano Sax — B♭
45
- 65: 9, // Alto Sax — E♭
46
- 66: 14, // Tenor Sax — B♭, a ninth below
47
- 67: 21, // Baritone Sax — E♭, an octave and a sixth below
48
- 69: 7, // English Horn — F
49
- 71: 2, // Clarinet — B♭
50
- // Pipes.
51
- 72: -12, // Piccolo — sounds an octave above where it is written
52
- };
14
+ import { gmSpec } from "./gm-catalogue.js";
53
15
  /**
54
16
  * Semitones to add to `program`'s sounding pitch to get its written pitch.
55
17
  *
@@ -58,9 +20,7 @@ const PROGRAM_TRANSPOSITION = {
58
20
  * which would be a silently wrong part.
59
21
  */
60
22
  export function gmWrittenTransposition(program) {
61
- if (!gmInstrument(program))
62
- return 0;
63
- return PROGRAM_TRANSPOSITION[program] ?? 0;
23
+ return gmSpec(program)?.writtenTransposition ?? 0;
64
24
  }
65
25
  /** Whether `program` is written anywhere other than where it sounds. */
66
26
  export function gmIsTransposing(program) {
@@ -1 +1 @@
1
- {"version":3,"file":"gm-transposition.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-transposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,+DAA+D;AAC/D,MAAM,qBAAqB,GAA2B;IACpD,wEAAwE;IACxE,+DAA+D;IAC/D,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU;IAClB,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe;IACvB,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY;IAErB,mEAAmE;IACnE,EAAE,EAAE,EAAE,EAAE,0BAA0B;IAClC,EAAE,EAAE,EAAE,EAAE,0BAA0B;IAClC,EAAE,EAAE,EAAE,EAAE,yBAAyB;IACjC,EAAE,EAAE,EAAE,EAAE,0BAA0B;IAClC,EAAE,EAAE,EAAE,EAAE,0BAA0B;IAClC,EAAE,EAAE,EAAE,EAAE,oBAAoB;IAC5B,EAAE,EAAE,EAAE,EAAE,oBAAoB;IAC5B,EAAE,EAAE,EAAE,EAAE,mBAAmB;IAC3B,EAAE,EAAE,EAAE,EAAE,gBAAgB;IACxB,EAAE,EAAE,EAAE,EAAE,yBAAyB;IACjC,EAAE,EAAE,EAAE,EAAE,uBAAuB;IAC/B,EAAE,EAAE,EAAE,EAAE,gBAAgB;IACxB,EAAE,EAAE,EAAE,EAAE,cAAc;IACtB,EAAE,EAAE,EAAE,EAAE,cAAc;IACtB,EAAE,EAAE,EAAE,EAAE,eAAe;IACvB,EAAE,EAAE,EAAE,EAAE,eAAe;IACvB,EAAE,EAAE,EAAE,EAAE,aAAa;IAErB,SAAS;IACT,EAAE,EAAE,CAAC,EAAE,eAAe;IACtB,EAAE,EAAE,CAAC,EAAE,kBAAkB;IAEzB,4EAA4E;IAC5E,6CAA6C;IAC7C,EAAE,EAAE,CAAC,EAAE,mBAAmB;IAC1B,EAAE,EAAE,CAAC,EAAE,gBAAgB;IACvB,EAAE,EAAE,EAAE,EAAE,gCAAgC;IACxC,EAAE,EAAE,EAAE,EAAE,iDAAiD;IACzD,EAAE,EAAE,CAAC,EAAE,mBAAmB;IAC1B,EAAE,EAAE,CAAC,EAAE,gBAAgB;IAEvB,SAAS;IACT,EAAE,EAAE,CAAC,EAAE,EAAE,uDAAuD;CACjE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACrC,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"gm-transposition.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm-transposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -7,7 +7,16 @@
7
7
  * defend against a bad value from the schema — only against a hand-edited
8
8
  * score, which is why `gmInstrument` returns `null` rather than throwing.
9
9
  */
10
- export type GmFamily = "piano" | "chromatic-percussion" | "organ" | "guitar" | "bass" | "strings" | "ensemble" | "brass" | "reed" | "pipe" | "synth-lead" | "synth-pad" | "synth-effects" | "ethnic" | "percussive" | "sound-effects";
10
+ /**
11
+ * The sixteen General MIDI families, in program order: family `i` covers
12
+ * programs `i*8 .. i*8+7`.
13
+ *
14
+ * The list is the declaration and the type is read off it, so a family cannot
15
+ * be added to one and missed from the other — this was a union written above
16
+ * the array, which is the same fact stated twice.
17
+ */
18
+ export declare const GM_FAMILIES: readonly ["piano", "chromatic-percussion", "organ", "guitar", "bass", "strings", "ensemble", "brass", "reed", "pipe", "synth-lead", "synth-pad", "synth-effects", "ethnic", "percussive", "sound-effects"];
19
+ export type GmFamily = (typeof GM_FAMILIES)[number];
11
20
  export type GmInstrument = {
12
21
  /** 0-127, matching `Track.midiProgram`. */
13
22
  program: number;
@@ -15,8 +24,6 @@ export type GmInstrument = {
15
24
  name: string;
16
25
  family: GmFamily;
17
26
  };
18
- /** In program order: family `i` covers programs `i*8 .. i*8+7`. */
19
- export declare const GM_FAMILIES: readonly GmFamily[];
20
27
  export declare const GM_FAMILY_LABELS: Record<GmFamily, string>;
21
28
  /** The family a program belongs to. Arithmetic, because families are runs of eight. */
22
29
  export declare function gmFamilyOf(program: number): GmFamily;
@@ -1 +1 @@
1
- {"version":3,"file":"gm.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,sBAAsB,GACtB,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,GACT,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,YAAY,GACZ,WAAW,GACX,eAAe,GACf,QAAQ,GACR,YAAY,GACZ,eAAe,CAAC;AAEpB,MAAM,MAAM,YAAY,GAAG;IACzB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,SAAS,QAAQ,EAiB1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAiBrD,CAAC;AA0JF,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEpD;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAMjD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGjE;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,QAAQ,GACf,SAAS,YAAY,EAAE,CAEzB"}
1
+ {"version":3,"file":"gm.d.ts","sourceRoot":"","sources":["../../../src/domain/instruments/gm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,4MAiBd,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG;IACzB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAiBrD,CAAC;AA0JF,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEpD;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAMjD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGjE;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,QAAQ,GACf,SAAS,YAAY,EAAE,CAEzB"}
@@ -7,7 +7,14 @@
7
7
  * defend against a bad value from the schema — only against a hand-edited
8
8
  * score, which is why `gmInstrument` returns `null` rather than throwing.
9
9
  */
10
- /** In program order: family `i` covers programs `i*8 .. i*8+7`. */
10
+ /**
11
+ * The sixteen General MIDI families, in program order: family `i` covers
12
+ * programs `i*8 .. i*8+7`.
13
+ *
14
+ * The list is the declaration and the type is read off it, so a family cannot
15
+ * be added to one and missed from the other — this was a union written above
16
+ * the array, which is the same fact stated twice.
17
+ */
11
18
  export const GM_FAMILIES = [
12
19
  "piano",
13
20
  "chromatic-percussion",
@@ -1 +1 @@
1
- {"version":3,"file":"gm.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,OAAO;IACP,sBAAsB;IACtB,OAAO;IACP,QAAQ;IACR,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,YAAY;IACZ,WAAW;IACX,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,KAAK,EAAE,OAAO;IACd,sBAAsB,EAAE,sBAAsB;IAC9C,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,eAAe;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,eAAe,EAAE,eAAe;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,QAAQ,GAAsB;IAClC,YAAY;IACZ,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,aAAa;IACb,UAAU;IACV,4BAA4B;IAC5B,SAAS;IACT,cAAc;IACd,WAAW;IACX,YAAY;IACZ,SAAS;IACT,WAAW;IACX,eAAe;IACf,UAAU;IACV,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,eAAe;IACf,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,yBAAyB;IACzB,yBAAyB;IACzB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,eAAe;IACf,wBAAwB;IACxB,sBAAsB;IACtB,eAAe;IACf,aAAa;IACb,aAAa;IACb,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR,OAAO;IACP,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;IACT,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,eAAe;IACf,cAAc;IACd,SAAS;IACT,UAAU;IACV,MAAM;IACN,eAAe;IACf,aAAa;IACb,eAAe;IACf,eAAe;IACf,eAAe;IACf,aAAa;IACb,aAAa;IACb,UAAU;IACV,WAAW;IACX,cAAc;IACd,MAAM;IACN,cAAc;IACd,SAAS;IACT,UAAU;IACV,aAAa;IACb,SAAS;IACT,OAAO;IACP,UAAU;IACV,WAAW;IACX,cAAc;IACd,YAAY;IACZ,SAAS;IACT,SAAS;IACT,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,iBAAiB;IACjB,cAAc;IACd,mBAAmB;IACnB,eAAe;IACf,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,uBAAuB;IACvB,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,qBAAqB;IACrB,aAAa;IACb,OAAO;IACP,aAAa;IACb,WAAW;IACX,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,wBAAwB;IACxB,mBAAmB;IACnB,cAAc;IACd,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,UAAU;IACV,SAAS;CACV,CAAC;AAEF,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAA4B,QAAQ,CAAC,GAAG,CACjE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAClB,OAAO;IACP,IAAI;IACJ,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;CAC5B,CAAC,CACH,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,qBAAqB,CACnC,MAAgB;IAEhB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"gm.js","sourceRoot":"","sources":["../../../src/domain/instruments/gm.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@ export declare const KIT_OPTIONS: InstrumentOption[];
51
51
  export declare const INSTRUMENT_OPTIONS: InstrumentOption[];
52
52
  /** The same catalogue as nested groups, for a picker that draws its own headings. */
53
53
  export declare const FAMILY_GROUPS: {
54
- key: import("./gm.js").GmFamily;
54
+ key: "bass" | "pipe" | "piano" | "chromatic-percussion" | "organ" | "guitar" | "strings" | "ensemble" | "brass" | "reed" | "synth-lead" | "synth-pad" | "synth-effects" | "ethnic" | "percussive" | "sound-effects";
55
55
  label: string;
56
56
  instruments: readonly import("./gm.js").GmInstrument[];
57
57
  }[];
package/dist/index.d.ts CHANGED
@@ -65,6 +65,7 @@ export * from "./domain/commands/edit-commands.js";
65
65
  export * from "./domain/commands/relocate-commands.js";
66
66
  export * from "./domain/commands/ripple-commands.js";
67
67
  export * from "./domain/instruments/gm.js";
68
+ export * from "./domain/instruments/gm-catalogue.js";
68
69
  export * from "./domain/instruments/midi-protocol.js";
69
70
  export * from "./domain/instruments/gm-kit.js";
70
71
  export * from "./domain/instruments/gm-range.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAQ5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,oBAAoB,CAAC;AAKnC,cAAc,qBAAqB,CAAC;AAMpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAM9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAItD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -87,6 +87,7 @@ export * from "./domain/commands/edit-commands.js";
87
87
  export * from "./domain/commands/relocate-commands.js";
88
88
  export * from "./domain/commands/ripple-commands.js";
89
89
  export * from "./domain/instruments/gm.js";
90
+ export * from "./domain/instruments/gm-catalogue.js";
90
91
  export * from "./domain/instruments/midi-protocol.js";
91
92
  export * from "./domain/instruments/gm-kit.js";
92
93
  export * from "./domain/instruments/gm-range.js";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/music_types",
3
- "version": "0.13.5",
3
+ "version": "0.13.7",
4
4
  "description": "TypeScript types and Zod schemas for the ScoreSmith music API - scores, generation contracts, project payloads",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",