/** * The Welte-Mignon T-98, the green Welte, as a reproducing system: the * system that plays a version (`welteT98System`), the options it takes, * and the green instruments its emulator offers, genuine, derived and * unfitted. It needs the optional peer dependency welte-mignon-emulator. * * @module linked-rolls/welte-t98 */ import { Half, Parameters } from "welte-mignon-emulator"; import { instrumentT98Of, labelOf, WelteT98InstrumentName } from "welte-mignon-emulator/t98"; import { ReproducingSystem } from "../ReproducingSystem.js"; import { Millimeters } from "../../model/Quantity.js"; import { type WelteOptions } from "../welte.js"; /** @category Systems and emulation */ export type { VelocityMap } from "../velocity.js"; /** @category Systems and emulation */ export { pedalPresetOf, pedalPresets, secondsAt, type PedalPreset, type WelteOptions } from "../welte.js"; /** * A set of nuancing constants for the green Welte, with what it was * fitted to: a genuine, a derived or an unfitted instrument. * @category Systems and emulation */ export type { WelteT98Instrument } from "welte-mignon-emulator/t98"; /** * A green instrument by name: a genuine one by the Welte number of its * roll or as their consensus, a derived one by the recording it was * fitted on, or the unfitted starting values. * @category Systems and emulation */ export type { WelteT98InstrumentName } from "welte-mignon-emulator/t98"; /** * The instruments the emulator offers for the green Welte, in three groups that * answer three different questions and must not be listed as one. * * A **genuine** instrument is fitted to the drawn nuance line of a green roll * and says what a green Welte did. A **derived** instrument is fitted so that * the green code of a recording reproduces what the fitted T-100 emulator makes * of the *red* copy of the same recording, and says what Welte's editor meant * the green roll to sound like; its provenance names the T-100 instrument it * inherits, since it is only as good as the red reading behind it. The * difference between the two, in the printed ordinate both scales share, is how * far the transfer of a red reading onto the green mechanism succeeded. * * Both are now fitted, on `welte-mignon-emulator` 1.1.0: five genuine * instruments, one per lined green roll that could be read, a consensus across * them, and the derived instrument for the one recording issued on both scales. * The **unfitted** starting values remain as a third group, arithmetic from * Welte's regulation controls with no green roll behind any of it, and a curve * produced with them says so in its own `instrument` field. * * **Prefer a roll's own instrument where the roll is one of the five.** The * green instruments disagree with one another far more than the red ones do: * the consensus is held out at 0.121 on the bass where the per-roll instruments * are 0.029 to 0.066, because a shared mechanism describes none of them well. * That spread is a property of the instruments rather than of the fit, and * Gottschewski's finding that they were out of regulation is visible in it. * @category Systems and emulation */ export declare const instruments: { genuine: Readonly>>; derived: Readonly>>; unfitted: { 'starting-values': import("welte-mignon-emulator/t98").WelteT98Instrument; }; }; /** * The names of the green instruments, the genuine ones first, then the * derived ones and the unfitted starting values. * @category Systems and emulation */ export declare const instrumentNames: readonly WelteT98InstrumentName[]; /** * The instrument a pair of nuancing constants belongs to, if it is one. * @category Systems and emulation */ export declare const instrumentNameOf: (nuance: Record) => WelteT98InstrumentName | undefined; /** * The green instrument of that name, where the emulator has one. * @category Systems and emulation */ export { instrumentT98Of }; /** @category Systems and emulation */ export { labelOf }; /** * The nuancing constants of a green instrument, one set for each half of * the keyboard. * @category Systems and emulation */ export declare const nuanceOf: (instrument: import("welte-mignon-emulator/t98").WelteT98Instrument) => Record; /** * The options every Welte system takes (see `WelteOptions`), with what the * T-98 adds. No source states a T-98 spool geometry, so the default keeps the * red circumference and layer and sets the revolution to make the initial * paper speed 220 cm/min; it is better varied than trusted, since it scales * every conductance by k and every time constant by 1/k and touches nothing * dimensionless. No source gives the T-98's tracker bore either, and the red * figure is carried over. Welte puts the division between f♯ and g * (Betriebsanleitung p. 7), which on this bar is track 52; PlaySK's green * configuration independently gives the last bass note as MIDI 66. A green * roll re-cut from a Mignon master uses only the middle 80 of the 88 note * positions, so the division falls inside the used compass either way. * @category Systems and emulation */ export type WelteT98Options = WelteOptions & { /** Which instrument the nuancing constants are, so that a curve can say so. */ instrument: WelteT98InstrumentName; /** * Chained punches whose gap is shorter than this are one perforation. A held * T-98 command is punched as a chain of round holes on a 2.66 mm grid with * paper bridges of about a millimetre, not as one slot, so a raw scan and an * edition whose collation has already made one symbol of the chain see the * same port only if the chain is merged. */ chainGap: Millimeters; /** * What a long perforation on the bass sforzando-piano line does. It is the * same valve and the same hole as the dynamic (Skala-Rolle §10), so it * always acts as a sforzando-piano; `stop` additionally ends the performance * there, which is what the instrument does — during rewind the suction to * the primary pneumatics is cut and the Hauptventil closes, so no note * sounds and the expression apparatus is out of action (Betriebsanleitung * p. 17). `ignore` is for an edition that is a fragment, or that carries a * rewind in the middle for some reason of its own. */ rewind: 'stop' | 'ignore'; }; /** * The options the T-98 plays a version with unless others are given: * the green spool, the consensus of the genuine instruments, the * damping pedals as a continuous controller, the keyboard divided at * track 52, and the performance ending where a long perforation sends * the roll back. * @category Systems and emulation */ export declare const defaultWelteT98Options: WelteT98Options; /** * The green Welte, as welte-mignon-emulator models it. Everything downstream of * the relay is the T-100's, on Hagmann's authority that the nuancing unit is * built the same for both tracker scales (p. 96); what differs is in front of * it. Each function is held for exactly as long as its own perforation runs * over the glide block, four conduits stand on one bellows and their drives add * as flows, the crescendo's ceiling is the balance of throttle 98 against the * permanently open bore 100, and a long perforation on the bass sforzando-piano * line sends the roll back. * * Its constants are fitted to the drawn nuance lines of five green rolls, and a * playback runs on the consensus across them unless the caller names another * instrument. Where the roll being played is one of the five, its own instrument * is the better choice and `instruments.genuine` carries it. * @category Systems and emulation */ export declare const welteT98System: ReproducingSystem;