linked-rolls 0.70.0 → 0.72.0

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.
Files changed (143) hide show
  1. package/README.md +106 -5
  2. package/lib/analysis/constraints.d.ts +7 -0
  3. package/lib/analysis/constraints.js +1 -0
  4. package/lib/analysis/ownPaper.d.ts +5 -1
  5. package/lib/analysis/ownPaper.js +5 -1
  6. package/lib/analysis/paper.d.ts +22 -4
  7. package/lib/analysis/paper.js +6 -0
  8. package/lib/analysis/reservations.d.ts +24 -1
  9. package/lib/analysis/reservations.js +15 -1
  10. package/lib/analysis/sigla.d.ts +6 -1
  11. package/lib/analysis/sigla.js +5 -1
  12. package/lib/analysis/stemma.d.ts +6 -1
  13. package/lib/analysis/stemma.js +6 -1
  14. package/lib/analysis/text.d.ts +16 -2
  15. package/lib/analysis/text.js +16 -2
  16. package/lib/analysis/witnesses.d.ts +20 -1
  17. package/lib/analysis/witnesses.js +4 -0
  18. package/lib/collation/Collation.d.ts +47 -8
  19. package/lib/collation/Collation.js +29 -5
  20. package/lib/collation/alignment.d.ts +16 -3
  21. package/lib/collation/alignment.js +15 -3
  22. package/lib/collation/scatter.d.ts +50 -9
  23. package/lib/collation/scatter.js +11 -1
  24. package/lib/collation/statistics.d.ts +39 -9
  25. package/lib/collation/statistics.js +27 -6
  26. package/lib/collation/substitution.d.ts +5 -0
  27. package/lib/collation/substitution.js +4 -0
  28. package/lib/emulation/Emulation.d.ts +16 -1
  29. package/lib/emulation/Emulation.js +10 -0
  30. package/lib/emulation/negotiation.d.ts +1 -0
  31. package/lib/emulation/negotiation.js +1 -0
  32. package/lib/filiation/adoption.d.ts +47 -0
  33. package/lib/filiation/adoption.js +190 -0
  34. package/lib/filiation/changes.d.ts +33 -0
  35. package/lib/filiation/changes.js +38 -0
  36. package/lib/filiation/index.d.ts +12 -0
  37. package/lib/filiation/index.js +12 -0
  38. package/lib/filiation/presence.d.ts +50 -0
  39. package/lib/filiation/presence.js +122 -0
  40. package/lib/filiation/proposal.d.ts +132 -0
  41. package/lib/filiation/proposal.js +376 -0
  42. package/lib/filiation/readings.d.ts +108 -0
  43. package/lib/filiation/readings.js +281 -0
  44. package/lib/filiation/search.d.ts +113 -0
  45. package/lib/filiation/search.js +268 -0
  46. package/lib/filiation/systems.d.ts +21 -0
  47. package/lib/filiation/systems.js +39 -0
  48. package/lib/filiation/trees.d.ts +20 -0
  49. package/lib/filiation/trees.js +69 -0
  50. package/lib/index.d.ts +34 -2
  51. package/lib/index.js +3 -1
  52. package/lib/io/asJsonLd.d.ts +10 -0
  53. package/lib/io/asJsonLd.js +10 -0
  54. package/lib/io/context.d.ts +16 -2
  55. package/lib/io/context.js +16 -2
  56. package/lib/io/importJsonLd.d.ts +1 -0
  57. package/lib/io/importJsonLd.js +1 -0
  58. package/lib/io/migrate.d.ts +8 -0
  59. package/lib/io/migrate.js +8 -0
  60. package/lib/lookup/lookup.d.ts +29 -5
  61. package/lib/lookup/lookup.js +29 -5
  62. package/lib/lookup/paths.d.ts +23 -3
  63. package/lib/lookup/paths.js +17 -3
  64. package/lib/model/Agent.d.ts +28 -2
  65. package/lib/model/Agent.js +15 -1
  66. package/lib/model/Assumption.d.ts +96 -7
  67. package/lib/model/Assumption.js +65 -7
  68. package/lib/model/ConditionState.d.ts +1 -0
  69. package/lib/model/Edit.d.ts +10 -0
  70. package/lib/model/Edit.js +8 -0
  71. package/lib/model/Edition.d.ts +11 -0
  72. package/lib/model/Edition.js +1 -0
  73. package/lib/model/Feature.d.ts +74 -7
  74. package/lib/model/Feature.js +41 -3
  75. package/lib/model/FeatureSource.d.ts +14 -1
  76. package/lib/model/FeatureSource.js +7 -1
  77. package/lib/model/Perforator.d.ts +10 -0
  78. package/lib/model/Perforator.js +1 -0
  79. package/lib/model/Quantity.d.ts +160 -13
  80. package/lib/model/Quantity.js +110 -6
  81. package/lib/model/RollCopy.d.ts +74 -12
  82. package/lib/model/RollCopy.js +53 -10
  83. package/lib/model/Symbol.d.ts +38 -1
  84. package/lib/model/Symbol.js +16 -0
  85. package/lib/model/TrackCalibration.d.ts +10 -2
  86. package/lib/model/TrackCalibration.js +9 -2
  87. package/lib/model/Version.d.ts +24 -4
  88. package/lib/model/Version.js +19 -4
  89. package/lib/model/notes.d.ts +15 -2
  90. package/lib/model/notes.js +9 -2
  91. package/lib/model/procedures.d.ts +5 -1
  92. package/lib/model/procedures.js +5 -1
  93. package/lib/model/vocabulary.d.ts +6 -1
  94. package/lib/model/vocabulary.js +6 -1
  95. package/lib/ops/beliefs.d.ts +23 -1
  96. package/lib/ops/beliefs.js +23 -1
  97. package/lib/ops/collation.d.ts +3 -0
  98. package/lib/ops/collation.js +3 -0
  99. package/lib/ops/commands.d.ts +17 -2
  100. package/lib/ops/commands.js +17 -2
  101. package/lib/ops/copies.d.ts +37 -6
  102. package/lib/ops/copies.js +37 -6
  103. package/lib/ops/draft.d.ts +2 -0
  104. package/lib/ops/draft.js +1 -0
  105. package/lib/ops/edits.d.ts +5 -1
  106. package/lib/ops/edits.js +5 -1
  107. package/lib/ops/features.d.ts +12 -1
  108. package/lib/ops/features.js +7 -0
  109. package/lib/ops/versions.d.ts +15 -3
  110. package/lib/ops/versions.js +15 -3
  111. package/lib/readers/phillipsEroll.d.ts +12 -1
  112. package/lib/readers/phillipsEroll.js +6 -1
  113. package/lib/readers/spencerBar.d.ts +12 -1
  114. package/lib/readers/spencerBar.js +7 -1
  115. package/lib/readers/stanfordAton.d.ts +15 -0
  116. package/lib/readers/stanfordAton.js +9 -0
  117. package/lib/schema.json +10 -0
  118. package/lib/shared/utils.d.ts +12 -0
  119. package/lib/spec/context.json +4 -0
  120. package/lib/systems/ReproducingSystem.d.ts +46 -3
  121. package/lib/systems/TrackerBar.d.ts +45 -4
  122. package/lib/systems/TrackerBar.js +20 -3
  123. package/lib/systems/index.d.ts +9 -2
  124. package/lib/systems/index.js +9 -2
  125. package/lib/systems/velocity.d.ts +1 -0
  126. package/lib/systems/velocity.js +1 -0
  127. package/lib/systems/welte.d.ts +18 -3
  128. package/lib/systems/welte.js +9 -2
  129. package/lib/systems/welteLicensee/bar.d.ts +1 -0
  130. package/lib/systems/welteLicensee/bar.js +1 -0
  131. package/lib/systems/welteLicensee/system.d.ts +18 -0
  132. package/lib/systems/welteLicensee/system.js +17 -0
  133. package/lib/systems/welteT100/bar.d.ts +8 -0
  134. package/lib/systems/welteT100/bar.js +4 -0
  135. package/lib/systems/welteT100/system.d.ts +46 -5
  136. package/lib/systems/welteT100/system.js +29 -3
  137. package/lib/systems/welteT98/bar.d.ts +6 -0
  138. package/lib/systems/welteT98/bar.js +2 -0
  139. package/lib/systems/welteT98/system.d.ts +58 -5
  140. package/lib/systems/welteT98/system.js +42 -3
  141. package/lib/validate.d.ts +16 -0
  142. package/lib/validate.js +15 -0
  143. package/package.json +2 -1
@@ -10,7 +10,10 @@ import { type VelocityMap } from "./velocity.js";
10
10
  * performance is read off the emulator is one; what differs is in front of it,
11
11
  * and each system says that in the `Mechanism` it hands to `performWelte`.
12
12
  */
13
- /** The options every Welte system takes. */
13
+ /**
14
+ * The options every Welte system takes.
15
+ * @category Systems and emulation
16
+ */
14
17
  export type WelteOptions = {
15
18
  /**
16
19
  * The take-up spool, which sets the time axis: it is held at a constant
@@ -54,13 +57,22 @@ export declare const sameParameters: (a: Parameters, b: Parameters) => boolean;
54
57
  * `brushing` their fall is slowed until the quick runs of latch changes
55
58
  * in the SUPRA corpus dip without damping, at the price that lifts
56
59
  * shorter than about 265 ms brush as well.
60
+ * @category Systems and emulation
57
61
  */
58
62
  export declare const pedalPresets: {
59
63
  damping: Readonly<Record<string, number>>;
60
64
  brushing: Readonly<Record<string, number>>;
61
65
  };
66
+ /**
67
+ * The name of one of the readings of the pedal mechanism, `damping` or
68
+ * `brushing`.
69
+ * @category Systems and emulation
70
+ */
62
71
  export type PedalPreset = keyof typeof pedalPresets;
63
- /** The preset a set of pedal constants is, if it is one. */
72
+ /**
73
+ * The preset a set of pedal constants is, if it is one.
74
+ * @category Systems and emulation
75
+ */
64
76
  export declare const pedalPresetOf: (pedals: Parameters) => PedalPreset | undefined;
65
77
  /**
66
78
  * Between the edition's shared place axis and this version's own paper.
@@ -80,7 +92,10 @@ export type Paper = {
80
92
  readonly paperOfRow: (row: number) => Millimeters;
81
93
  readonly paperOfPlace: (place: Millimeters) => Millimeters;
82
94
  };
83
- /** When the spool brings a place on the roll to the tracker bar. */
95
+ /**
96
+ * When the spool brings a place on the roll to the tracker bar.
97
+ * @category Systems and emulation
98
+ */
84
99
  export declare const secondsAt: (spool: Spool, place: Millimeters) => Seconds;
85
100
  /** The speed the spool starts the paper at. */
86
101
  export declare const startingSpeedOf: (spool: Spool) => MetersPerMinute;
@@ -14,12 +14,16 @@ export const sameParameters = (a, b) => Object.keys(a).length === Object.keys(b)
14
14
  * `brushing` their fall is slowed until the quick runs of latch changes
15
15
  * in the SUPRA corpus dip without damping, at the price that lifts
16
16
  * shorter than about 265 ms brush as well.
17
+ * @category Systems and emulation
17
18
  */
18
19
  export const pedalPresets = {
19
20
  damping: pedalDefaults,
20
21
  brushing: pedalBrushing
21
22
  };
22
- /** The preset a set of pedal constants is, if it is one. */
23
+ /**
24
+ * The preset a set of pedal constants is, if it is one.
25
+ * @category Systems and emulation
26
+ */
23
27
  export const pedalPresetOf = (pedals) => Object.keys(pedalPresets).find(name => sameParameters(pedalPresets[name], pedals));
24
28
  /** Paper the grid runs on past the last hole, so that a final pedal release completes. */
25
29
  const RUN_OUT = mm(100);
@@ -31,7 +35,10 @@ const paperOf = (toOwnPaper) => ({
31
35
  paperOfRow: row => mm(row / ROWS_PER_MM),
32
36
  paperOfPlace: place => mm(place * toOwnPaper)
33
37
  });
34
- /** When the spool brings a place on the roll to the tracker bar. */
38
+ /**
39
+ * When the spool brings a place on the roll to the tracker bar.
40
+ * @category Systems and emulation
41
+ */
35
42
  export const secondsAt = (spool, place) => seconds(paperSeconds(spool, inCentimeters(place)));
36
43
  /** The speed the spool starts the paper at. */
37
44
  export const startingSpeedOf = (spool) => metersPerMinute(paperSpeed(spool, 0) * 60 / 100);
@@ -7,5 +7,6 @@ import { TrackerBar } from "../TrackerBar.js";
7
7
  * tracks, so the note block and the treble valves sit two positions
8
8
  * lower. The layout is the one Stanford's midi2exp reads, checked
9
9
  * valve by valve on roll 225 against the T-100 copies.
10
+ * @category Systems and emulation
10
11
  */
11
12
  export declare const welteLicensee: TrackerBar;
@@ -9,6 +9,7 @@ import { welteT100Accents, welteT100Operations } from "../welteT100/bar.js";
9
9
  * tracks, so the note block and the treble valves sit two positions
10
10
  * lower. The layout is the one Stanford's midi2exp reads, checked
11
11
  * valve by valve on roll 225 against the T-100 copies.
12
+ * @category Systems and emulation
12
13
  */
13
14
  export const welteLicensee = describeTrackerBar({
14
15
  id: 'welte-licensee',
@@ -1,5 +1,10 @@
1
1
  import { ReproducingSystem } from "../ReproducingSystem.js";
2
2
  import { type WelteT100Options } from "../welteT100/system.js";
3
+ /**
4
+ * The Licensee takes the options of the T-100, whose mechanism it
5
+ * shares; see `WelteOptions`.
6
+ * @category Systems and emulation
7
+ */
3
8
  export type WelteLicenseeOptions = WelteT100Options;
4
9
  /**
5
10
  * The one instrument on offer, and it is not a Licensee instrument.
@@ -13,15 +18,26 @@ export type WelteLicenseeOptions = WelteT100Options;
13
18
  *
14
19
  * So a Licensee playback is a Freiburg reading of American paper, and the
15
20
  * union has one arm to keep that visible. Nothing should be published from it.
21
+ * @category Systems and emulation
16
22
  */
17
23
  export declare const instruments: {
18
24
  unfitted: {
19
25
  'welte-t100-consensus': import("welte-mignon-emulator/t100").Instrument;
20
26
  };
21
27
  };
28
+ /**
29
+ * The one instrument on offer for the Licensee by name: the T-100
30
+ * consensus, named as unfitted.
31
+ * @category Systems and emulation
32
+ */
22
33
  export type WelteLicenseeInstrumentName = {
23
34
  unfitted: 'welte-t100-consensus';
24
35
  };
36
+ /**
37
+ * The names of the instruments on offer for the Licensee, of which
38
+ * there is one.
39
+ * @category Systems and emulation
40
+ */
25
41
  export declare const instrumentNames: readonly WelteLicenseeInstrumentName[];
26
42
  /**
27
43
  * Welte's own spool is carried over with the constants. Phillips (p. 181) says
@@ -34,6 +50,7 @@ export declare const instrumentNames: readonly WelteLicenseeInstrumentName[];
34
50
  * that roll's tempo (`spoolFor`). Either way only its geometry is used, and
35
51
  * that is better varied than trusted: it scales every conductance by k and
36
52
  * every time constant by 1/k, and touches nothing dimensionless.
53
+ * @category Systems and emulation
37
54
  */
38
55
  export declare const defaultWelteLicenseeOptions: WelteLicenseeOptions;
39
56
  /**
@@ -48,5 +65,6 @@ export declare const defaultWelteLicenseeOptions: WelteLicenseeOptions;
48
65
  * curve produced here names itself as such. The spool sets no tempo of its
49
66
  * own: a version runs at the speed stated for its copies, or at that of the
50
67
  * roll it was re-cut from times the length ratio.
68
+ * @category Systems and emulation
51
69
  */
52
70
  export declare const welteLicenseeSystem: ReproducingSystem<WelteLicenseeOptions>;
@@ -1,3 +1,12 @@
1
+ /**
2
+ * The Welte-Mignon (Licensee), the American re-cut of the T-100 rolls, as
3
+ * a reproducing system (`welteLicenseeSystem`). It is played by the
4
+ * T-100's mechanism on the T-100's constants, since no Licensee
5
+ * instrument has been fitted, and every curve it produces says so. It
6
+ * needs the optional peer dependency welte-mignon-emulator.
7
+ *
8
+ * @module linked-rolls/welte-licensee
9
+ */
1
10
  import { CONSENSUS } from "welte-mignon-emulator/t100";
2
11
  import { track } from "../../model/Quantity.js";
3
12
  import { welteLicensee } from "./bar.js";
@@ -14,8 +23,14 @@ import { defaultWelteT100Options, instrumentNameOf, nuanceOf, performAs } from "
14
23
  *
15
24
  * So a Licensee playback is a Freiburg reading of American paper, and the
16
25
  * union has one arm to keep that visible. Nothing should be published from it.
26
+ * @category Systems and emulation
17
27
  */
18
28
  export const instruments = { unfitted: { 'welte-t100-consensus': CONSENSUS } };
29
+ /**
30
+ * The names of the instruments on offer for the Licensee, of which
31
+ * there is one.
32
+ * @category Systems and emulation
33
+ */
19
34
  export const instrumentNames = [
20
35
  { unfitted: 'welte-t100-consensus' }
21
36
  ];
@@ -30,6 +45,7 @@ export const instrumentNames = [
30
45
  * that roll's tempo (`spoolFor`). Either way only its geometry is used, and
31
46
  * that is better varied than trusted: it scales every conductance by k and
32
47
  * every time constant by 1/k, and touches nothing dimensionless.
48
+ * @category Systems and emulation
33
49
  */
34
50
  export const defaultWelteLicenseeOptions = {
35
51
  ...defaultWelteT100Options,
@@ -57,6 +73,7 @@ const licenseeInstrument = (nuance) => instrumentNameOf(nuance) === 'consensus'
57
73
  * curve produced here names itself as such. The spool sets no tempo of its
58
74
  * own: a version runs at the speed stated for its copies, or at that of the
59
75
  * roll it was re-cut from times the length ratio.
76
+ * @category Systems and emulation
60
77
  */
61
78
  export const welteLicenseeSystem = {
62
79
  name: 'Welte-Mignon (Licensee)',
@@ -1,8 +1,13 @@
1
1
  import { Operation, TrackerBar } from "../TrackerBar.js";
2
2
  /**
3
3
  * The commands of the Welte-Mignon T-100, as its tracker bar reads them.
4
+ * @category Systems and emulation
4
5
  */
5
6
  export declare const welteT100ExpressionTypes: readonly ['SustainPedalOn', 'SustainPedalOff', 'SoftPedalOn', 'SoftPedalOff', 'MezzoforteOff', 'MezzoforteOn', 'SlowCrescendoOn', 'SlowCrescendoOff', 'ForzandoOn', 'ForzandoOff', 'MotorOff', 'MotorOn', 'Rewind', 'ElectricCutOff'];
7
+ /**
8
+ * A command of the Welte-Mignon T-100.
9
+ * @category Systems and emulation
10
+ */
6
11
  export type WelteT100ExpressionType = typeof welteT100ExpressionTypes[number];
7
12
  /**
8
13
  * What each T-100 command operates, so that it can be set against the
@@ -23,11 +28,13 @@ export type WelteT100ExpressionType = typeof welteT100ExpressionTypes[number];
23
28
  * being an automatic mercury contact (Skala-Rolle 98 §12) and its rewind
24
29
  * riding on the bass sforzando-piano line. A red command of those kinds
25
30
  * has no counterpart and stays a plain deletion.
31
+ * @category Systems and emulation
26
32
  */
27
33
  export declare const welteT100Operations: Readonly<Partial<Record<WelteT100ExpressionType, Operation>>>;
28
34
  /**
29
35
  * A single added accent on the T-100: a valve latched on and off again
30
36
  * straight away.
37
+ * @category Systems and emulation
31
38
  */
32
39
  export declare const welteT100Accents: readonly (readonly WelteT100ExpressionType[])[];
33
40
  /**
@@ -37,5 +44,6 @@ export declare const welteT100Accents: readonly (readonly WelteT100ExpressionTyp
37
44
  * The expression valves are duplicated, bass below the note block and
38
45
  * treble above it, in mirrored order. The rolls run at three metres a
39
46
  * minute (Phillips 2016, p. 113; Bärtsch 2020 gives 3 or 2.9).
47
+ * @category Systems and emulation
40
48
  */
41
49
  export declare const welteT100: TrackerBar;
@@ -2,6 +2,7 @@ import { describeTrackerBar } from "../TrackerBar.js";
2
2
  import { metersPerMinute, mm } from "../../model/Quantity.js";
3
3
  /**
4
4
  * The commands of the Welte-Mignon T-100, as its tracker bar reads them.
5
+ * @category Systems and emulation
5
6
  */
6
7
  export const welteT100ExpressionTypes = [
7
8
  'SustainPedalOn',
@@ -38,6 +39,7 @@ export const welteT100ExpressionTypes = [
38
39
  * being an automatic mercury contact (Skala-Rolle 98 §12) and its rewind
39
40
  * riding on the bass sforzando-piano line. A red command of those kinds
40
41
  * has no counterpart and stays a plain deletion.
42
+ * @category Systems and emulation
41
43
  */
42
44
  export const welteT100Operations = {
43
45
  MezzoforteOn: { operates: 'mezzoforte', spelling: 'on', sided: true },
@@ -54,6 +56,7 @@ export const welteT100Operations = {
54
56
  /**
55
57
  * A single added accent on the T-100: a valve latched on and off again
56
58
  * straight away.
59
+ * @category Systems and emulation
57
60
  */
58
61
  export const welteT100Accents = [
59
62
  ['SlowCrescendoOn', 'SlowCrescendoOff'],
@@ -66,6 +69,7 @@ export const welteT100Accents = [
66
69
  * The expression valves are duplicated, bass below the note block and
67
70
  * treble above it, in mirrored order. The rolls run at three metres a
68
71
  * minute (Phillips 2016, p. 113; Bärtsch 2020 gives 3 or 2.9).
72
+ * @category Systems and emulation
69
73
  */
70
74
  export const welteT100 = describeTrackerBar({
71
75
  id: 'welte-t100',
@@ -1,26 +1,65 @@
1
+ /**
2
+ * The Welte-Mignon T-100, the red Welte, as a reproducing system: the
3
+ * system that plays a version (`welteT100System`), the options it takes,
4
+ * and the instruments its emulator was fitted as. It needs the optional
5
+ * peer dependency welte-mignon-emulator.
6
+ *
7
+ * @module linked-rolls/welte-t100
8
+ */
1
9
  import { Half, Parameters } from "welte-mignon-emulator";
2
10
  import { Instrument, RollNumber } from "welte-mignon-emulator/t100";
3
11
  import { NegotiatedEvent, Performance, ReproducingSystem, RollProperties } from "../ReproducingSystem.js";
4
12
  import { type WelteOptions } from "../welte.js";
5
13
  export type { VelocityMap } from "../velocity.js";
6
- export { pedalPresetOf, pedalPresets, secondsAt, type PedalPreset } from "../welte.js";
14
+ export { pedalPresetOf, pedalPresets, secondsAt, type PedalPreset, type WelteOptions } from "../welte.js";
15
+ /**
16
+ * An instrument the T-100 emulator was fitted as: its nuancing constants
17
+ * for each half of the keyboard, and what they were fitted to and how
18
+ * well.
19
+ * @category Systems and emulation
20
+ */
7
21
  export type { Instrument } from "welte-mignon-emulator/t100";
22
+ /**
23
+ * An instrument the T-100 emulator was fitted as, by name: the
24
+ * consensus, or the setting that drew one roll's nuance lines, by the
25
+ * roll's Welte number.
26
+ * @category Systems and emulation
27
+ */
8
28
  export type InstrumentName = 'consensus' | RollNumber;
9
29
  /**
10
30
  * The instruments the emulator was fitted as: the consensus over the six
11
31
  * rolls with drawn nuance lines, and the setting that drew each of them,
12
32
  * named by the roll's Welte number. The provenance beside each says what
13
33
  * it was fitted to and how well.
34
+ * @category Systems and emulation
14
35
  */
15
36
  export declare const instruments: Readonly<Record<InstrumentName, Instrument>>;
16
- /** The instruments by name, the consensus first. */
37
+ /**
38
+ * The instruments by name, the consensus first.
39
+ * @category Systems and emulation
40
+ */
17
41
  export declare const instrumentNames: readonly InstrumentName[];
18
- /** The nuancing constants of an instrument, one set for each half of the keyboard. */
42
+ /**
43
+ * The nuancing constants of an instrument, one set for each half of the keyboard.
44
+ * @category Systems and emulation
45
+ */
19
46
  export declare const nuanceOf: (instrument: Instrument) => Record<Half, Parameters>;
20
- /** The instrument a pair of nuancing constants belongs to, if it is one. */
47
+ /**
48
+ * The instrument a pair of nuancing constants belongs to, if it is one.
49
+ * @category Systems and emulation
50
+ */
21
51
  export declare const instrumentNameOf: (nuance: Record<Half, Parameters>) => InstrumentName | undefined;
22
- /** The T-100 takes the options every Welte system does; see `WelteOptions`. */
52
+ /**
53
+ * The T-100 takes the options every Welte system does; see `WelteOptions`.
54
+ * @category Systems and emulation
55
+ */
23
56
  export type WelteT100Options = WelteOptions;
57
+ /**
58
+ * The options the T-100 plays a version with unless others are given:
59
+ * Welte's spool, the consensus instrument, the damping pedals as a
60
+ * continuous controller, and the keyboard divided at track 54.
61
+ * @category Systems and emulation
62
+ */
24
63
  export declare const defaultWelteT100Options: WelteT100Options;
25
64
  /**
26
65
  * The mechanism, given a way of naming the instrument on the curves it
@@ -29,6 +68,7 @@ export declare const defaultWelteT100Options: WelteT100Options;
29
68
  * shares this; what it may not share is the name, since a Licensee playback
30
69
  * runs on constants fitted to Freiburg instruments and the curve has to say
31
70
  * so, nor the spool, which is the red one it carries over.
71
+ * @internal
32
72
  */
33
73
  export declare const performAs: (instrumentOf: (nuance: Record<Half, Parameters>) => string, ownSpool?: boolean) => (events: readonly NegotiatedEvent[], options: WelteT100Options, roll: RollProperties) => Performance;
34
74
  /**
@@ -38,5 +78,6 @@ export declare const performAs: (instrumentOf: (nuance: Record<Half, Parameters>
38
78
  * switch. The constants are the consensus fitted across the hand-drawn
39
79
  * nuance lines of six rolls, with the terms that describe the drawing
40
80
  * apparatus switched off; `instruments` offers each roll's own setting.
81
+ * @category Systems and emulation
41
82
  */
42
83
  export declare const welteT100System: ReproducingSystem<WelteT100Options>;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * The Welte-Mignon T-100, the red Welte, as a reproducing system: the
3
+ * system that plays a version (`welteT100System`), the options it takes,
4
+ * and the instruments its emulator was fitted as. It needs the optional
5
+ * peer dependency welte-mignon-emulator.
6
+ *
7
+ * @module linked-rolls/welte-t100
8
+ */
1
9
  import { DEFAULT_PUNCH_MM, TRACKER_BORE_MM, WELTE_SPOOL, } from "welte-mignon-emulator";
2
10
  import { aperturePorts, CONSENSUS, pneumaticModel, PRESETS, runPedals, } from "welte-mignon-emulator/t100";
3
11
  import { welteT100 } from "./bar.js";
@@ -10,14 +18,30 @@ export { pedalPresetOf, pedalPresets, secondsAt } from "../welte.js";
10
18
  * rolls with drawn nuance lines, and the setting that drew each of them,
11
19
  * named by the roll's Welte number. The provenance beside each says what
12
20
  * it was fitted to and how well.
21
+ * @category Systems and emulation
13
22
  */
14
23
  export const instruments = { consensus: CONSENSUS, ...PRESETS };
15
- /** The instruments by name, the consensus first. */
24
+ /**
25
+ * The instruments by name, the consensus first.
26
+ * @category Systems and emulation
27
+ */
16
28
  export const instrumentNames = ['consensus', ...Object.keys(PRESETS)];
17
- /** The nuancing constants of an instrument, one set for each half of the keyboard. */
29
+ /**
30
+ * The nuancing constants of an instrument, one set for each half of the keyboard.
31
+ * @category Systems and emulation
32
+ */
18
33
  export const nuanceOf = (instrument) => ({ bass: instrument.bass, treble: instrument.treble });
19
- /** The instrument a pair of nuancing constants belongs to, if it is one. */
34
+ /**
35
+ * The instrument a pair of nuancing constants belongs to, if it is one.
36
+ * @category Systems and emulation
37
+ */
20
38
  export const instrumentNameOf = (nuance) => instrumentNames.find(name => sameParameters(instruments[name].bass, nuance.bass) && sameParameters(instruments[name].treble, nuance.treble));
39
+ /**
40
+ * The options the T-100 plays a version with unless others are given:
41
+ * Welte's spool, the consensus instrument, the damping pedals as a
42
+ * continuous controller, and the keyboard divided at track 54.
43
+ * @category Systems and emulation
44
+ */
21
45
  export const defaultWelteT100Options = {
22
46
  spool: WELTE_SPOOL,
23
47
  nuance: nuanceOf(instruments.consensus),
@@ -60,6 +84,7 @@ const punchOf = (event, rows) => {
60
84
  * shares this; what it may not share is the name, since a Licensee playback
61
85
  * runs on constants fitted to Freiburg instruments and the curve has to say
62
86
  * so, nor the spool, which is the red one it carries over.
87
+ * @internal
63
88
  */
64
89
  export const performAs = (instrumentOf, ownSpool = true) => (events, options, roll) => {
65
90
  const { events: performed, curves } = performWelte(events, options, roll, {
@@ -79,6 +104,7 @@ export const performAs = (instrumentOf, ownSpool = true) => (events, options, ro
79
104
  * switch. The constants are the consensus fitted across the hand-drawn
80
105
  * nuance lines of six rolls, with the terms that describe the drawing
81
106
  * apparatus switched off; `instruments` offers each roll's own setting.
107
+ * @category Systems and emulation
82
108
  */
83
109
  export const welteT100System = {
84
110
  name: 'Welte-Mignon T100',
@@ -7,8 +7,13 @@ import { TrackerBar } from "../TrackerBar.js";
7
7
  * as long as one continuous perforation lasts (Hagmann, pp. 89 f. and
8
8
  * 100–103; Phillips, p. 121), so none of these is an On or an Off. The
9
9
  * two sforzando valves name the end of the range they pull towards.
10
+ * @category Systems and emulation
10
11
  */
11
12
  export declare const welteT98ExpressionTypes: readonly ['SforzandoPiano', 'SforzandoForte', 'Mezzoforte', 'Crescendo', 'SustainPedal', 'SoftPedal'];
13
+ /**
14
+ * A command of the Welte-Mignon T-98.
15
+ * @category Systems and emulation
16
+ */
12
17
  export type WelteT98ExpressionType = typeof welteT98ExpressionTypes[number];
13
18
  /**
14
19
  * Welte-Mignon T-98 ("green Welte"), cf. Hagmann, Anhang 11 (p. 179)
@@ -40,5 +45,6 @@ export type WelteT98ExpressionType = typeof welteT98ExpressionTypes[number];
40
45
  * scale to the cross-line bearing the dial number in half a minute
41
46
  * (Skala-Rolle 98 §1b). This is documentation; what sets the emulator's
42
47
  * time axis is the spool.
48
+ * @category Systems and emulation
43
49
  */
44
50
  export declare const welteT98: TrackerBar;
@@ -8,6 +8,7 @@ import { metersPerMinute, mm } from "../../model/Quantity.js";
8
8
  * as long as one continuous perforation lasts (Hagmann, pp. 89 f. and
9
9
  * 100–103; Phillips, p. 121), so none of these is an On or an Off. The
10
10
  * two sforzando valves name the end of the range they pull towards.
11
+ * @category Systems and emulation
11
12
  */
12
13
  export const welteT98ExpressionTypes = [
13
14
  'SforzandoPiano',
@@ -60,6 +61,7 @@ const welteT98Operations = {
60
61
  * scale to the cross-line bearing the dial number in half a minute
61
62
  * (Skala-Rolle 98 §1b). This is documentation; what sets the emulator's
62
63
  * time axis is the spool.
64
+ * @category Systems and emulation
63
65
  */
64
66
  export const welteT98 = describeTrackerBar({
65
67
  id: 'welte-green',
@@ -1,11 +1,33 @@
1
+ /**
2
+ * The Welte-Mignon T-98, the green Welte, as a reproducing system: the
3
+ * system that plays a version (`welteT98System`), the options it takes,
4
+ * and the green instruments its emulator offers, genuine, derived and
5
+ * unfitted. It needs the optional peer dependency welte-mignon-emulator.
6
+ *
7
+ * @module linked-rolls/welte-t98
8
+ */
1
9
  import { Half, Parameters } from "welte-mignon-emulator";
2
- import { instrumentT98Of, labelOf, nuanceOf, WelteT98InstrumentName } from "welte-mignon-emulator/t98";
10
+ import { instrumentT98Of, labelOf, WelteT98InstrumentName } from "welte-mignon-emulator/t98";
3
11
  import { ReproducingSystem } from "../ReproducingSystem.js";
4
12
  import { Millimeters } from "../../model/Quantity.js";
5
13
  import { type WelteOptions } from "../welte.js";
14
+ /** @category Systems and emulation */
6
15
  export type { VelocityMap } from "../velocity.js";
7
- export { pedalPresetOf, pedalPresets, secondsAt, type PedalPreset } from "../welte.js";
8
- export type { WelteT98Instrument, WelteT98InstrumentName } from "welte-mignon-emulator/t98";
16
+ /** @category Systems and emulation */
17
+ export { pedalPresetOf, pedalPresets, secondsAt, type PedalPreset, type WelteOptions } from "../welte.js";
18
+ /**
19
+ * A set of nuancing constants for the green Welte, with what it was
20
+ * fitted to: a genuine, a derived or an unfitted instrument.
21
+ * @category Systems and emulation
22
+ */
23
+ export type { WelteT98Instrument } from "welte-mignon-emulator/t98";
24
+ /**
25
+ * A green instrument by name: a genuine one by the Welte number of its
26
+ * roll or as their consensus, a derived one by the recording it was
27
+ * fitted on, or the unfitted starting values.
28
+ * @category Systems and emulation
29
+ */
30
+ export type { WelteT98InstrumentName } from "welte-mignon-emulator/t98";
9
31
  /**
10
32
  * The instruments the emulator offers for the green Welte, in three groups that
11
33
  * answer three different questions and must not be listed as one.
@@ -32,6 +54,7 @@ export type { WelteT98Instrument, WelteT98InstrumentName } from "welte-mignon-em
32
54
  * are 0.029 to 0.066, because a shared mechanism describes none of them well.
33
55
  * That spread is a property of the instruments rather than of the fit, and
34
56
  * Gottschewski's finding that they were out of regulation is visible in it.
57
+ * @category Systems and emulation
35
58
  */
36
59
  export declare const instruments: {
37
60
  genuine: Readonly<Partial<Record<"consensus" | import("welte-mignon-emulator/t98").GenuineRoll, import("welte-mignon-emulator/t98").WelteT98Instrument>>>;
@@ -40,10 +63,30 @@ export declare const instruments: {
40
63
  'starting-values': import("welte-mignon-emulator/t98").WelteT98Instrument;
41
64
  };
42
65
  };
66
+ /**
67
+ * The names of the green instruments, the genuine ones first, then the
68
+ * derived ones and the unfitted starting values.
69
+ * @category Systems and emulation
70
+ */
43
71
  export declare const instrumentNames: readonly WelteT98InstrumentName[];
44
- /** The instrument a pair of nuancing constants belongs to, if it is one. */
72
+ /**
73
+ * The instrument a pair of nuancing constants belongs to, if it is one.
74
+ * @category Systems and emulation
75
+ */
45
76
  export declare const instrumentNameOf: (nuance: Record<Half, Parameters>) => WelteT98InstrumentName | undefined;
46
- export { instrumentT98Of, labelOf, nuanceOf };
77
+ /**
78
+ * The green instrument of that name, where the emulator has one.
79
+ * @category Systems and emulation
80
+ */
81
+ export { instrumentT98Of };
82
+ /** @category Systems and emulation */
83
+ export { labelOf };
84
+ /**
85
+ * The nuancing constants of a green instrument, one set for each half of
86
+ * the keyboard.
87
+ * @category Systems and emulation
88
+ */
89
+ export declare const nuanceOf: (instrument: import("welte-mignon-emulator/t98").WelteT98Instrument) => Record<Half, Parameters>;
47
90
  /**
48
91
  * The options every Welte system takes (see `WelteOptions`), with what the
49
92
  * T-98 adds. No source states a T-98 spool geometry, so the default keeps the
@@ -56,6 +99,7 @@ export { instrumentT98Of, labelOf, nuanceOf };
56
99
  * configuration independently gives the last bass note as MIDI 66. A green
57
100
  * roll re-cut from a Mignon master uses only the middle 80 of the 88 note
58
101
  * positions, so the division falls inside the used compass either way.
102
+ * @category Systems and emulation
59
103
  */
60
104
  export type WelteT98Options = WelteOptions & {
61
105
  /** Which instrument the nuancing constants are, so that a curve can say so. */
@@ -80,6 +124,14 @@ export type WelteT98Options = WelteOptions & {
80
124
  */
81
125
  rewind: 'stop' | 'ignore';
82
126
  };
127
+ /**
128
+ * The options the T-98 plays a version with unless others are given:
129
+ * the green spool, the consensus of the genuine instruments, the
130
+ * damping pedals as a continuous controller, the keyboard divided at
131
+ * track 52, and the performance ending where a long perforation sends
132
+ * the roll back.
133
+ * @category Systems and emulation
134
+ */
83
135
  export declare const defaultWelteT98Options: WelteT98Options;
84
136
  /**
85
137
  * The green Welte, as welte-mignon-emulator models it. Everything downstream of
@@ -95,5 +147,6 @@ export declare const defaultWelteT98Options: WelteT98Options;
95
147
  * playback runs on the consensus across them unless the caller names another
96
148
  * instrument. Where the roll being played is one of the five, its own instrument
97
149
  * is the better choice and `instruments.genuine` carries it.
150
+ * @category Systems and emulation
98
151
  */
99
152
  export declare const welteT98System: ReproducingSystem<WelteT98Options>;
@@ -1,9 +1,18 @@
1
+ /**
2
+ * The Welte-Mignon T-98, the green Welte, as a reproducing system: the
3
+ * system that plays a version (`welteT98System`), the options it takes,
4
+ * and the green instruments its emulator offers, genuine, derived and
5
+ * unfitted. It needs the optional peer dependency welte-mignon-emulator.
6
+ *
7
+ * @module linked-rolls/welte-t98
8
+ */
1
9
  import { ROWS_PER_MM, WELTE_T98_SPOOL, } from "welte-mignon-emulator";
2
- import { aperturePorts, CHAIN_GAP_MM, DERIVED, GENUINE, instrumentT98Of, labelOf, nuanceOf, PUNCH_T98_MM, pneumaticT98Model, rewindAt, runPedals, sforzandoPianoLift, STARTING_VALUES, TRACKER_BORE_T98_MM, } from "welte-mignon-emulator/t98";
10
+ import { aperturePorts, CHAIN_GAP_MM, DERIVED, GENUINE, instrumentT98Of, labelOf, nuanceOf as emulatorNuanceOf, PUNCH_T98_MM, pneumaticT98Model, rewindAt, runPedals, sforzandoPianoLift, STARTING_VALUES, TRACKER_BORE_T98_MM, } from "welte-mignon-emulator/t98";
3
11
  import { welteT98 } from "./bar.js";
4
12
  import { mm, seconds, track } from "../../model/Quantity.js";
5
13
  import { defaultVelocityMap } from "../velocity.js";
6
14
  import { pedalPresets, performWelte, sameParameters } from "../welte.js";
15
+ /** @category Systems and emulation */
7
16
  export { pedalPresetOf, pedalPresets, secondsAt } from "../welte.js";
8
17
  /**
9
18
  * The instruments the emulator offers for the green Welte, in three groups that
@@ -31,21 +40,50 @@ export { pedalPresetOf, pedalPresets, secondsAt } from "../welte.js";
31
40
  * are 0.029 to 0.066, because a shared mechanism describes none of them well.
32
41
  * That spread is a property of the instruments rather than of the fit, and
33
42
  * Gottschewski's finding that they were out of regulation is visible in it.
43
+ * @category Systems and emulation
34
44
  */
35
45
  export const instruments = { genuine: GENUINE, derived: DERIVED, unfitted: { 'starting-values': STARTING_VALUES } };
46
+ /**
47
+ * The names of the green instruments, the genuine ones first, then the
48
+ * derived ones and the unfitted starting values.
49
+ * @category Systems and emulation
50
+ */
36
51
  export const instrumentNames = [
37
52
  ...Object.keys(GENUINE).map(genuine => ({ genuine })),
38
53
  ...Object.keys(DERIVED).map(derived => ({ derived })),
39
54
  { unfitted: 'starting-values' }
40
55
  ];
41
- /** The instrument a pair of nuancing constants belongs to, if it is one. */
56
+ /**
57
+ * The instrument a pair of nuancing constants belongs to, if it is one.
58
+ * @category Systems and emulation
59
+ */
42
60
  export const instrumentNameOf = (nuance) => instrumentNames.find(name => {
43
61
  const instrument = instrumentT98Of(name);
44
62
  return instrument !== undefined
45
63
  && sameParameters(instrument.bass, nuance.bass)
46
64
  && sameParameters(instrument.treble, nuance.treble);
47
65
  });
48
- export { instrumentT98Of, labelOf, nuanceOf };
66
+ /**
67
+ * The green instrument of that name, where the emulator has one.
68
+ * @category Systems and emulation
69
+ */
70
+ export { instrumentT98Of };
71
+ /** @category Systems and emulation */
72
+ export { labelOf };
73
+ /**
74
+ * The nuancing constants of a green instrument, one set for each half of
75
+ * the keyboard.
76
+ * @category Systems and emulation
77
+ */
78
+ export const nuanceOf = emulatorNuanceOf;
79
+ /**
80
+ * The options the T-98 plays a version with unless others are given:
81
+ * the green spool, the consensus of the genuine instruments, the
82
+ * damping pedals as a continuous controller, the keyboard divided at
83
+ * track 52, and the performance ending where a long perforation sends
84
+ * the roll back.
85
+ * @category Systems and emulation
86
+ */
49
87
  export const defaultWelteT98Options = {
50
88
  spool: WELTE_T98_SPOOL,
51
89
  nuance: nuanceOf(GENUINE.consensus),
@@ -135,6 +173,7 @@ const perform = (events, options, roll) => {
135
173
  * playback runs on the consensus across them unless the caller names another
136
174
  * instrument. Where the roll being played is one of the five, its own instrument
137
175
  * is the better choice and `instruments.genuine` carries it.
176
+ * @category Systems and emulation
138
177
  */
139
178
  export const welteT98System = {
140
179
  name: 'Welte-Mignon T98',
package/lib/validate.d.ts CHANGED
@@ -1,12 +1,28 @@
1
+ /**
2
+ * Checks an edition's JSON-LD document, as `asJsonLd` writes one, against
3
+ * the schema of the format. The same `validate` is exported from the root
4
+ * module; this entry point offers it alone.
5
+ *
6
+ * @module linked-rolls/validate
7
+ */
1
8
  import { type ErrorObject } from "ajv";
2
9
  import { Edition } from "./model/Edition.js";
3
10
  /**
4
11
  * Holds a document against the edition schema. `errors` says what the
5
12
  * last call found wrong, and is empty where it found nothing.
13
+ * @category Reading and writing
6
14
  */
7
15
  export interface ValidateEdition {
8
16
  (document: unknown): document is Edition;
9
17
  errors?: ErrorObject[] | null;
10
18
  }
19
+ /**
20
+ * Whether the document is an edition as the schema of the format
21
+ * describes it, such as `asJsonLd` writes. What a call found wrong is in
22
+ * `validate.errors` until the next call. A document written by an earlier
23
+ * release may fail where `importJsonLd` would still read it, since the
24
+ * import migrates it first (`migrate`).
25
+ * @category Reading and writing
26
+ */
11
27
  declare const validate: ValidateEdition;
12
28
  export { validate };