@typeonce/ritmo-tools 0.17.0 → 0.19.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 (131) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +304 -24
  3. package/dist/cli.js +5 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/internal/version.d.ts +1 -1
  6. package/dist/internal/version.js +1 -1
  7. package/dist/music/cli/commands.d.ts +15 -0
  8. package/dist/music/cli/commands.d.ts.map +1 -0
  9. package/dist/music/cli/commands.js +180 -0
  10. package/dist/music/cli/commands.js.map +1 -0
  11. package/dist/music/cli/io.d.ts +11 -0
  12. package/dist/music/cli/io.d.ts.map +1 -0
  13. package/dist/music/cli/io.js +28 -0
  14. package/dist/music/cli/io.js.map +1 -0
  15. package/dist/music/cli/serve.d.ts +13 -0
  16. package/dist/music/cli/serve.d.ts.map +1 -0
  17. package/dist/music/cli/serve.js +168 -0
  18. package/dist/music/cli/serve.js.map +1 -0
  19. package/dist/music/core/audio.d.ts +22 -0
  20. package/dist/music/core/audio.d.ts.map +1 -0
  21. package/dist/music/core/audio.js +95 -0
  22. package/dist/music/core/audio.js.map +1 -0
  23. package/dist/music/core/check.d.ts +51 -0
  24. package/dist/music/core/check.d.ts.map +1 -0
  25. package/dist/music/core/check.js +113 -0
  26. package/dist/music/core/check.js.map +1 -0
  27. package/dist/music/core/instruments.d.ts +179 -0
  28. package/dist/music/core/instruments.d.ts.map +1 -0
  29. package/dist/music/core/instruments.js +531 -0
  30. package/dist/music/core/instruments.js.map +1 -0
  31. package/dist/music/core/listen.d.ts +32 -0
  32. package/dist/music/core/listen.d.ts.map +1 -0
  33. package/dist/music/core/listen.js +350 -0
  34. package/dist/music/core/listen.js.map +1 -0
  35. package/dist/music/core/midi.d.ts +4 -0
  36. package/dist/music/core/midi.d.ts.map +1 -0
  37. package/dist/music/core/midi.js +76 -0
  38. package/dist/music/core/midi.js.map +1 -0
  39. package/dist/music/core/render.d.ts +37 -0
  40. package/dist/music/core/render.d.ts.map +1 -0
  41. package/dist/music/core/render.js +204 -0
  42. package/dist/music/core/render.js.map +1 -0
  43. package/dist/music/core/review.d.ts +41 -0
  44. package/dist/music/core/review.d.ts.map +1 -0
  45. package/dist/music/core/review.js +139 -0
  46. package/dist/music/core/review.js.map +1 -0
  47. package/dist/music/core/song.d.ts +144 -0
  48. package/dist/music/core/song.d.ts.map +1 -0
  49. package/dist/music/core/song.js +291 -0
  50. package/dist/music/core/song.js.map +1 -0
  51. package/dist/music/page/assets/index-BfO_jOqP.js +4 -0
  52. package/dist/music/page/assets/index-Dw14kxkL.css +1 -0
  53. package/dist/music/page/index.html +19 -0
  54. package/dist/pixel/cli/commands.d.ts.map +1 -1
  55. package/dist/pixel/cli/commands.js +122 -46
  56. package/dist/pixel/cli/commands.js.map +1 -1
  57. package/dist/pixel/cli/io.d.ts +5 -1
  58. package/dist/pixel/cli/io.d.ts.map +1 -1
  59. package/dist/pixel/cli/io.js +16 -1
  60. package/dist/pixel/cli/io.js.map +1 -1
  61. package/dist/pixel/core/animation.d.ts +23 -8
  62. package/dist/pixel/core/animation.d.ts.map +1 -1
  63. package/dist/pixel/core/animation.js +41 -18
  64. package/dist/pixel/core/animation.js.map +1 -1
  65. package/dist/pixel/core/grid.d.ts +3 -2
  66. package/dist/pixel/core/grid.d.ts.map +1 -1
  67. package/dist/pixel/core/grid.js +14 -6
  68. package/dist/pixel/core/grid.js.map +1 -1
  69. package/dist/pixel/core/preview.d.ts +8 -3
  70. package/dist/pixel/core/preview.d.ts.map +1 -1
  71. package/dist/pixel/core/preview.js +39 -25
  72. package/dist/pixel/core/preview.js.map +1 -1
  73. package/dist/pixel/core/project.d.ts +27 -0
  74. package/dist/pixel/core/project.d.ts.map +1 -0
  75. package/dist/pixel/core/project.js +117 -0
  76. package/dist/pixel/core/project.js.map +1 -0
  77. package/dist/pixel/core/recipe.d.ts.map +1 -1
  78. package/dist/pixel/core/recipe.js +43 -6
  79. package/dist/pixel/core/recipe.js.map +1 -1
  80. package/dist/pixel/core/report.d.ts +21 -3
  81. package/dist/pixel/core/report.d.ts.map +1 -1
  82. package/dist/pixel/core/report.js +52 -22
  83. package/dist/pixel/core/report.js.map +1 -1
  84. package/dist/pixel/core/sheet.d.ts +68 -8
  85. package/dist/pixel/core/sheet.d.ts.map +1 -1
  86. package/dist/pixel/core/sheet.js +250 -32
  87. package/dist/pixel/core/sheet.js.map +1 -1
  88. package/dist/pixel/core/spritesheet.d.ts +43 -35
  89. package/dist/pixel/core/spritesheet.d.ts.map +1 -1
  90. package/dist/pixel/core/spritesheet.js +63 -59
  91. package/dist/pixel/core/spritesheet.js.map +1 -1
  92. package/dist/sound/cli/commands.d.ts +25 -0
  93. package/dist/sound/cli/commands.d.ts.map +1 -0
  94. package/dist/sound/cli/commands.js +137 -0
  95. package/dist/sound/cli/commands.js.map +1 -0
  96. package/dist/sound/cli/io.d.ts +24 -0
  97. package/dist/sound/cli/io.d.ts.map +1 -0
  98. package/dist/sound/cli/io.js +51 -0
  99. package/dist/sound/cli/io.js.map +1 -0
  100. package/dist/sound/cli/serve.d.ts +11 -0
  101. package/dist/sound/cli/serve.d.ts.map +1 -0
  102. package/dist/sound/cli/serve.js +147 -0
  103. package/dist/sound/cli/serve.js.map +1 -0
  104. package/dist/sound/core/measure.d.ts +67 -0
  105. package/dist/sound/core/measure.d.ts.map +1 -0
  106. package/dist/sound/core/measure.js +138 -0
  107. package/dist/sound/core/measure.js.map +1 -0
  108. package/dist/sound/core/recipe.d.ts +143 -0
  109. package/dist/sound/core/recipe.d.ts.map +1 -0
  110. package/dist/sound/core/recipe.js +292 -0
  111. package/dist/sound/core/recipe.js.map +1 -0
  112. package/dist/sound/core/render.d.ts +37 -0
  113. package/dist/sound/core/render.d.ts.map +1 -0
  114. package/dist/sound/core/render.js +317 -0
  115. package/dist/sound/core/render.js.map +1 -0
  116. package/dist/sound/core/review.d.ts +52 -0
  117. package/dist/sound/core/review.d.ts.map +1 -0
  118. package/dist/sound/core/review.js +89 -0
  119. package/dist/sound/core/review.js.map +1 -0
  120. package/dist/sound/core/takes.d.ts +29 -0
  121. package/dist/sound/core/takes.d.ts.map +1 -0
  122. package/dist/sound/core/takes.js +109 -0
  123. package/dist/sound/core/takes.js.map +1 -0
  124. package/dist/sound/core/wav.d.ts +4 -0
  125. package/dist/sound/core/wav.d.ts.map +1 -0
  126. package/dist/sound/core/wav.js +28 -0
  127. package/dist/sound/core/wav.js.map +1 -0
  128. package/dist/sound/page/assets/index-Cjun5b92.js +6 -0
  129. package/dist/sound/page/assets/index-DZm59wkQ.css +1 -0
  130. package/dist/sound/page/index.html +19 -0
  131. package/package.json +10 -4
@@ -0,0 +1,531 @@
1
+ /**
2
+ * The instruments a song can use: each one is synthesized from a small
3
+ * model of how the real instrument makes its sound (a plucked string for
4
+ * the guitar, struck strings for the piano, a breath and a tube for the
5
+ * flute), so they need no sample files and play the same bits everywhere.
6
+ *
7
+ * Each instrument turns one note (a pitch, how long it is held, how hard it
8
+ * is played) into mono samples; the renderer places, pans, and mixes them.
9
+ */
10
+ export const instruments = {
11
+ piano: { label: "Piano", kind: "melodic", about: "A grand piano: chords, melodies, bass. Warm and full; notes ring and fade.", range: [21, 108], program: 0, color: "#7aa2f7" },
12
+ epiano: { label: "Electric piano", kind: "melodic", about: "A soft electric piano (Rhodes): mellow chords, lo-fi and cozy tunes.", range: [28, 103], program: 4, color: "#9d8cf7" },
13
+ guitar: { label: "Acoustic guitar", kind: "melodic", about: "A plucked steel-string guitar: strummed chords, picked patterns (arpeggios), folk melodies.", range: [40, 88], program: 25, color: "#f0a843" },
14
+ bass: { label: "Bass guitar", kind: "melodic", about: "A plucked electric bass: the low line under the chords, one note at a time.", range: [28, 60], program: 33, color: "#e06c75" },
15
+ strings: { label: "Strings", kind: "melodic", about: "A string section: long held chords that swell in, sweeping melodies. Slow to start, so give it long notes.", range: [28, 96], program: 48, color: "#56b6c2" },
16
+ flute: { label: "Flute", kind: "melodic", about: "A breathy wooden flute: gentle melodies, one note at a time, best in its middle and high notes.", range: [60, 96], program: 73, color: "#98c379" },
17
+ marimba: { label: "Marimba", kind: "melodic", about: "Wooden bars struck by mallets: short bright notes, playful patterns.", range: [45, 96], program: 12, color: "#d19a66" },
18
+ bells: { label: "Bells", kind: "melodic", about: "Glassy bells: sparkle, magic, a few long high notes over the rest.", range: [60, 108], program: 9, color: "#e5c07b" },
19
+ pad: { label: "Warm pad", kind: "melodic", about: "A soft synth pad: a cushion of held chords behind everything; slow to swell.", range: [36, 96], program: 89, color: "#c678dd" },
20
+ chipLead: { label: "Chip lead", kind: "melodic", about: "A retro game-console square wave: chiptune melodies, one note at a time.", range: [48, 96], program: 80, color: "#4cc38a" },
21
+ chipBass: { label: "Chip bass", kind: "melodic", about: "A retro game-console triangle wave: chiptune bass lines.", range: [28, 72], program: 38, color: "#2fb3a3" },
22
+ rockGuitar: { label: "Distorted guitar", kind: "melodic", about: "An electric guitar through an overdriven amp: rock riffs, power chords (a note and the one seven semitones up), crunchy rhythm parts.", range: [40, 88], program: 30, color: "#ff7b54" },
23
+ reese: { label: "Reese bass", kind: "melodic", about: "Detuned saws, a sub, and grit, slowly moving: the drum & bass bass, also for dark electronic lines. One note at a time; hold notes long.", range: [28, 60], program: 38, color: "#b4475a" },
24
+ synthLead: { label: "Synth lead", kind: "melodic", about: "A wide stack of detuned saws (a supersaw): modern electronic leads and riffs, bright and big. One note at a time.", range: [48, 96], program: 81, color: "#3fb6f2" },
25
+ drums: { label: "Drum kit", kind: "drums", about: "A clean drum kit. Its notes are drums, not pitches: kick, snare, hat, openHat, clap, tomLow, tomHigh, crash, rim, shaker.", range: [0, 127], program: 0, color: "#bdbab3" },
26
+ breaks: { label: "Punchy kit", kind: "drums", about: "A hard-hitting kit for rock, drum & bass, and electronic music: a clicky, driven kick, a cracking snare, crisp hats. The same drums as the drum kit.", range: [0, 127], program: 0, color: "#e8e3d5" }
27
+ };
28
+ export const instrumentIds = ["piano", "epiano", "guitar", "rockGuitar", "bass", "reese", "strings", "flute", "marimba", "bells", "pad", "synthLead", "chipLead", "chipBass", "drums", "breaks"];
29
+ export const isKit = (id) => instruments[id].kind === "drums";
30
+ /** The drums, top to bottom as the page lists them, with their General MIDI numbers. */
31
+ export const drums = [
32
+ { name: "crash", label: "Crash", gm: 49 },
33
+ { name: "openHat", label: "Open hat", gm: 46 },
34
+ { name: "hat", label: "Hat", gm: 42 },
35
+ { name: "shaker", label: "Shaker", gm: 70 },
36
+ { name: "tomHigh", label: "High tom", gm: 50 },
37
+ { name: "tomLow", label: "Low tom", gm: 45 },
38
+ { name: "rim", label: "Rim", gm: 37 },
39
+ { name: "clap", label: "Clap", gm: 39 },
40
+ { name: "snare", label: "Snare", gm: 38 },
41
+ { name: "kick", label: "Kick", gm: 36 }
42
+ ];
43
+ export const drumNames = drums.map((drum) => drum.name);
44
+ export const isDrum = (name) => drumNames.includes(name);
45
+ // ---------------------------------------------------------------------------
46
+ // Small pieces
47
+ const TAU = 2 * Math.PI;
48
+ /** Corrects a naive square or sawtooth at its jumps, so high notes do not alias (PolyBLEP). */
49
+ const blep = (phase, step) => {
50
+ if (phase < step) {
51
+ const t = phase / step;
52
+ return t + t - t * t - 1;
53
+ }
54
+ if (phase > 1 - step) {
55
+ const t = (phase - 1) / step;
56
+ return t * t + t + t + 1;
57
+ }
58
+ return 0;
59
+ };
60
+ const saw = (phase, step) => 2 * phase - 1 - blep(phase, step);
61
+ const pulse = (phase, step, width) => (phase < width ? 1 : -1) + blep(phase, step) - blep((phase + 1 - width) % 1, step);
62
+ /** A one-pole lowpass: cheap darkening. `cutoff` in Hz. */
63
+ const onePole = (cutoff, rate) => {
64
+ const a = Math.exp((-TAU * cutoff) / rate);
65
+ let y = 0;
66
+ return (x) => (y = x * (1 - a) + y * a);
67
+ };
68
+ /** A state-variable filter (Zavalishin's, stable at any cutoff): lowpass, bandpass, and highpass at once, its cutoff settable per sample. */
69
+ const svf = (rate, q) => {
70
+ const k = 1 / q;
71
+ let ic1 = 0;
72
+ let ic2 = 0;
73
+ let a1 = 0;
74
+ let a2 = 0;
75
+ let a3 = 0;
76
+ return {
77
+ set: (cutoff) => {
78
+ const g = Math.tan((Math.PI * Math.min(cutoff, rate * 0.45)) / rate);
79
+ a1 = 1 / (1 + g * (g + k));
80
+ a2 = g * a1;
81
+ a3 = g * a2;
82
+ },
83
+ step: (x) => {
84
+ const v3 = x - ic2;
85
+ const v1 = a1 * ic1 + a2 * v3;
86
+ const v2 = ic2 + a2 * ic1 + a3 * v3;
87
+ ic1 = 2 * v1 - ic1;
88
+ ic2 = 2 * v2 - ic2;
89
+ return { low: v2, band: v1, high: x - k * v1 - v2 };
90
+ }
91
+ };
92
+ };
93
+ /** Shapes the note's ends: a quick fade in (no click) and a fade out after `held` seconds over `release`. */
94
+ const gate = (t, attack, held, release) => {
95
+ const rise = attack <= 0 ? 1 : Math.min(1, t / attack);
96
+ if (t <= held)
97
+ return rise;
98
+ return rise * Math.max(0, 1 - (t - held) / release);
99
+ };
100
+ /** Overdrive: soft clipping that keeps the level near 1 at any `amount`. */
101
+ const drive = (x, amount) => Math.tanh(x * amount) / Math.tanh(amount);
102
+ const frequency = (midi) => 440 * Math.pow(2, (midi - 69) / 12);
103
+ // ---------------------------------------------------------------------------
104
+ // Melodic instruments
105
+ /** Struck strings: inharmonic partials that die faster the higher they are, two strings a hair apart, and the hammer's thump. */
106
+ const piano = ({ midi, held, velocity, rate, random }) => {
107
+ const f = frequency(midi);
108
+ const low = Math.max(0, Math.min(1, (72 - midi) / 48));
109
+ const ring = 1.2 + 4 * low;
110
+ const release = 0.18 + 0.2 * low;
111
+ const length = Math.min(held + release, ring + 0.2);
112
+ const out = new Float32Array(Math.ceil(length * rate));
113
+ const stiffness = 0.0002 + 0.0004 * (1 - low);
114
+ const partials = Math.min(12, Math.floor(9000 / f));
115
+ const brightness = 0.6 + 0.9 * velocity;
116
+ for (let n = 1; n <= partials; n++) {
117
+ const fn = f * n * Math.sqrt(1 + stiffness * n * n);
118
+ const level = Math.pow(n, -(2.3 - brightness)) * (n === 1 ? 1 : 0.8);
119
+ const fast = 3 + n * 1.6;
120
+ const slow = (0.9 + 0.35 * n) / ring;
121
+ for (const detune of [1, 1.0009]) {
122
+ // A rotating phasor and two decaying levels, stepped by multiplication: no sin or exp per sample.
123
+ const step = (TAU * fn * detune) / rate;
124
+ const turnCos = Math.cos(step);
125
+ const turnSin = Math.sin(step);
126
+ const start = random() * TAU;
127
+ let c = Math.cos(start);
128
+ let s = Math.sin(start);
129
+ let fastLevel = 0.6 * level * 0.5;
130
+ let slowLevel = 0.4 * level * 0.5;
131
+ const fastKeep = Math.exp(-fast / rate);
132
+ const slowKeep = Math.exp((-slow * 3) / rate);
133
+ for (let i = 0; i < out.length; i++) {
134
+ out[i] += s * (fastLevel + slowLevel);
135
+ const nextC = c * turnCos - s * turnSin;
136
+ s = c * turnSin + s * turnCos;
137
+ c = nextC;
138
+ fastLevel *= fastKeep;
139
+ slowLevel *= slowKeep;
140
+ if (fastLevel + slowLevel < 1e-5)
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ // The hammer: a short, dull knock.
146
+ const knock = onePole(800 + 1500 * velocity, rate);
147
+ for (let i = 0; i < Math.min(out.length, rate * 0.02); i++)
148
+ out[i] += knock(random() * 2 - 1) * 0.3 * velocity * (1 - i / (rate * 0.02));
149
+ for (let i = 0; i < out.length; i++)
150
+ out[i] *= gate(i / rate, 0.002, held, release) * 0.5;
151
+ return out;
152
+ };
153
+ /** A tine and a pickup: a bell-like FM tone whose bite fades as the note rings. */
154
+ const epiano = ({ midi, held, velocity, rate }) => {
155
+ const f = frequency(midi);
156
+ const release = 0.25;
157
+ const length = Math.min(held + release, 3.5);
158
+ const out = new Float32Array(Math.ceil(length * rate));
159
+ let carrier = 0;
160
+ let modulator = 0;
161
+ let tine = 0;
162
+ for (let i = 0; i < out.length; i++) {
163
+ const t = i / rate;
164
+ const index = (0.6 + 2.2 * velocity) * Math.exp(-t * 2.2) + 0.25;
165
+ const tineLevel = 0.35 * velocity * Math.exp(-t * 18);
166
+ const value = Math.sin(carrier + index * Math.sin(modulator)) + tineLevel * Math.sin(tine);
167
+ out[i] = value * Math.exp(-t * (0.5 + midi / 120)) * gate(t, 0.003, held, release) * 0.32;
168
+ carrier += (TAU * f) / rate;
169
+ modulator += (TAU * f) / rate;
170
+ tine += (TAU * f * 14) / rate;
171
+ }
172
+ return out;
173
+ };
174
+ /**
175
+ * A plucked string (Karplus-Strong): a burst of noise circulating in a delay
176
+ * as long as one vibration, softened a little every pass, which is how a
177
+ * real string loses its brightness. `bright` sets the pluck (pick or finger),
178
+ * `sustain` how long the string rings.
179
+ */
180
+ const pluck = ({ midi, held, velocity, rate, random }, bright, sustain, release) => {
181
+ const f = frequency(midi);
182
+ const length = Math.min(held + release, sustain + 0.1);
183
+ const out = new Float32Array(Math.ceil(length * rate));
184
+ const period = rate / f;
185
+ // The loop's average filter delays half a sample; a fractional allpass makes up the rest, so the string is in tune.
186
+ const whole = Math.floor(period - 0.5);
187
+ const fraction = period - 0.5 - whole;
188
+ const allpass = (1 - fraction) / (1 + fraction);
189
+ const line = new Float64Array(whole + 2);
190
+ const color = onePole(f * (2 + 10 * bright * (0.4 + 0.6 * velocity)), rate);
191
+ for (let i = 0; i < line.length; i++)
192
+ line[i] = color(random() * 2 - 1);
193
+ let mean = 0;
194
+ for (const x of line)
195
+ mean += x / line.length;
196
+ for (let i = 0; i < line.length; i++)
197
+ line[i] -= mean;
198
+ // How much each pass keeps, so the string falls 60 dB over `sustain` seconds (shorter for high notes).
199
+ const keep = Math.pow(0.001, 1 / (f * sustain * (1.2 - Math.min(0.6, midi / 160))));
200
+ let read = 0;
201
+ let apIn = 0;
202
+ let apOut = 0;
203
+ for (let i = 0; i < out.length; i++) {
204
+ const t = i / rate;
205
+ const current = line[read];
206
+ const next = line[(read + 1) % line.length];
207
+ const averaged = 0.5 * (current + next) * (t > held ? keep * 0.985 : keep);
208
+ // The fractional delay.
209
+ const tuned = allpass * averaged + apIn - allpass * apOut;
210
+ apIn = averaged;
211
+ apOut = tuned;
212
+ line[read] = tuned;
213
+ read = (read + 1) % line.length;
214
+ out[i] = current;
215
+ }
216
+ for (let i = 0; i < out.length; i++)
217
+ out[i] *= gate(i / rate, 0.001, held, release) * 0.55;
218
+ return out;
219
+ };
220
+ const guitar = (input) => {
221
+ const out = pluck(input, 0.55, 3, 0.12);
222
+ for (let i = 0; i < out.length; i++)
223
+ out[i] *= 2.4;
224
+ // The body: a little warmth around 200 Hz.
225
+ const body = svf(input.rate, 1.2);
226
+ body.set(210);
227
+ for (let i = 0; i < out.length; i++)
228
+ out[i] = out[i] + body.step(out[i]).band * 0.25;
229
+ return out;
230
+ };
231
+ const bass = (input) => {
232
+ const out = pluck(input, 0.12, 2.5, 0.08);
233
+ // A clean low fundamental under the string, for weight on small speakers too.
234
+ const f = frequency(input.midi);
235
+ let phase = 0;
236
+ for (let i = 0; i < out.length; i++) {
237
+ const t = i / input.rate;
238
+ out[i] = out[i] * 1.2 + Math.sin(phase) * 0.22 * Math.exp(-t * 1.5) * gate(t, 0.004, input.held, 0.08);
239
+ phase += (TAU * f) / input.rate;
240
+ }
241
+ return out;
242
+ };
243
+ /** Detuned saws through a lowpass that opens as the note swells, with a slow vibrato: an ensemble of bowed strings, or a pad. */
244
+ const ensemble = ({ midi, held, velocity, rate, random }, voices, attack, release, cutoff, vibrato, level) => {
245
+ const f = frequency(midi);
246
+ const out = new Float32Array(Math.ceil((held + release) * rate));
247
+ const filter = svf(rate, 0.8);
248
+ const phases = voices.map(() => random());
249
+ for (let i = 0; i < out.length; i++) {
250
+ const t = i / rate;
251
+ const swell = Math.min(1, t / attack);
252
+ const wobble = 1 + vibrato * Math.min(1, Math.max(0, t - 0.25) * 2) * Math.sin(TAU * 5.2 * t);
253
+ let x = 0;
254
+ voices.forEach((cents, v) => {
255
+ const step = (f * wobble * Math.pow(2, cents / 1200)) / rate;
256
+ x += saw(phases[v], step);
257
+ phases[v] = (phases[v] + step) % 1;
258
+ });
259
+ if (i % 32 === 0)
260
+ filter.set(f * 1.5 + cutoff * (0.5 + 0.5 * velocity) * (0.35 + 0.65 * swell));
261
+ out[i] = filter.step(x / voices.length).low * gate(t, attack, held, release) * level;
262
+ }
263
+ return out;
264
+ };
265
+ const strings = (input) => ensemble(input, [-9, -3, 4, 10], 0.22, 0.45, 2600, 0.004, 0.5);
266
+ const pad = (input) => ensemble(input, [-12, 0, 7, 1200], 0.55, 0.9, 1100, 0.002, 0.65);
267
+ /** A tube and a breath: a soft, nearly pure tone with a little noise in it and a vibrato that comes in late. */
268
+ const flute = ({ midi, held, velocity, rate, random }) => {
269
+ const f = frequency(midi);
270
+ const release = 0.12;
271
+ const out = new Float32Array(Math.ceil((held + release) * rate));
272
+ const breath = svf(rate, 4);
273
+ breath.set(f * 2);
274
+ let phase = 0;
275
+ for (let i = 0; i < out.length; i++) {
276
+ const t = i / rate;
277
+ const vibrato = 1 + 0.004 * Math.min(1, Math.max(0, t - 0.3) * 3) * Math.sin(TAU * 5 * t);
278
+ const tone = Math.sin(phase) + 0.22 * Math.sin(2 * phase) + 0.06 * Math.sin(3 * phase);
279
+ const chiff = Math.exp(-t * 30) * 0.6;
280
+ const air = breath.step(random() * 2 - 1).band * (0.12 + chiff);
281
+ out[i] = (tone + air) * gate(t, 0.05, held, release) * (0.13 + 0.08 * velocity);
282
+ phase += (TAU * f * vibrato) / rate;
283
+ }
284
+ return out;
285
+ };
286
+ /** A struck wooden bar: the tone and its fourth-octave overtone dying fast, and the mallet's tap. */
287
+ const marimba = ({ midi, held, velocity, rate, random }) => {
288
+ const f = frequency(midi);
289
+ const ring = 0.4 + 1.4 * Math.max(0, (84 - midi) / 40);
290
+ const out = new Float32Array(Math.ceil(Math.min(held + 0.15, ring) * rate));
291
+ const tap = onePole(3000, rate);
292
+ for (let i = 0; i < out.length; i++) {
293
+ const t = i / rate;
294
+ const value = Math.sin(TAU * f * t) * Math.exp((-t * 3) / ring) + 0.25 * velocity * Math.sin(TAU * f * 4 * t) * Math.exp(-t * 22) + 0.1 * Math.sin(TAU * f * 10 * t) * Math.exp(-t * 60);
295
+ const mallet = i < rate * 0.004 ? tap(random() * 2 - 1) * 0.4 : 0;
296
+ out[i] = (value + mallet) * gate(t, 0.001, held, 0.15) * (0.25 + 0.15 * velocity);
297
+ }
298
+ return out;
299
+ };
300
+ /** Glass bells: FM at an inharmonic ratio, ringing long. */
301
+ const bells = ({ midi, held, velocity, rate }) => {
302
+ const f = frequency(midi);
303
+ const out = new Float32Array(Math.ceil(Math.min(held + 1.2, 3.5) * rate));
304
+ for (let i = 0; i < out.length; i++) {
305
+ const t = i / rate;
306
+ const index = (1 + 2.5 * velocity) * Math.exp(-t * 3);
307
+ const value = Math.sin(TAU * f * t + index * Math.sin(TAU * f * 3.5 * t)) * Math.exp(-t * 1.3);
308
+ out[i] = value * gate(t, 0.001, held, 1.2) * 0.28;
309
+ }
310
+ return out;
311
+ };
312
+ /** A retro console's pulse wave, a quarter wide, with a light vibrato. */
313
+ const chipLead = ({ midi, held, velocity, rate }) => {
314
+ const f = frequency(midi);
315
+ const out = new Float32Array(Math.ceil((held + 0.04) * rate));
316
+ let phase = 0;
317
+ for (let i = 0; i < out.length; i++) {
318
+ const t = i / rate;
319
+ const step = (f * (1 + 0.006 * Math.min(1, Math.max(0, t - 0.2) * 4) * Math.sin(TAU * 6 * t))) / rate;
320
+ out[i] = pulse(phase, step, 0.25) * gate(t, 0.003, held, 0.04) * (0.09 + 0.07 * velocity);
321
+ phase = (phase + step) % 1;
322
+ }
323
+ return out;
324
+ };
325
+ /** A retro console's stepped triangle wave. */
326
+ const chipBass = ({ midi, held, velocity, rate }) => {
327
+ const f = frequency(midi);
328
+ const out = new Float32Array(Math.ceil((held + 0.03) * rate));
329
+ let phase = 0;
330
+ for (let i = 0; i < out.length; i++) {
331
+ const t = i / rate;
332
+ const triangle = phase < 0.5 ? 4 * phase - 1 : 3 - 4 * phase;
333
+ // Sixteen steps, as the old console's 4-bit wave.
334
+ out[i] = (Math.round(triangle * 8) / 8) * gate(t, 0.002, held, 0.03) * (0.2 + 0.1 * velocity);
335
+ phase = (phase + f / rate) % 1;
336
+ }
337
+ return out;
338
+ };
339
+ /**
340
+ * An electric guitar into an overdriven amp: the plucked string, its lows
341
+ * trimmed so the drive stays tight, clipped hard (which also holds the note
342
+ * up, as a real amp does), then the speaker cabinet's top cut.
343
+ */
344
+ const rockGuitar = (input) => {
345
+ const out = pluck(input, 0.85, 4, 0.1);
346
+ const tight = svf(input.rate, 0.7);
347
+ tight.set(110);
348
+ const cabinet = svf(input.rate, 0.9);
349
+ cabinet.set(4200);
350
+ const presence = svf(input.rate, 1.6);
351
+ presence.set(1800);
352
+ const amount = 10 + 14 * input.velocity;
353
+ for (let i = 0; i < out.length; i++) {
354
+ const driven = drive(tight.step(out[i] * 3).high, amount);
355
+ const shaped = cabinet.step(driven).low;
356
+ out[i] = (shaped + presence.step(shaped).band * 0.35) * gate(i / input.rate, 0.002, input.held, 0.1) * 0.3;
357
+ }
358
+ return out;
359
+ };
360
+ /** Three saws a few cents apart beating slowly, a sine under them for weight, a lowpass that drifts, and some drive: the reese. */
361
+ const reese = ({ midi, held, velocity, rate, random }) => {
362
+ const f = frequency(midi);
363
+ const release = 0.06;
364
+ const out = new Float32Array(Math.ceil((held + release) * rate));
365
+ const filter = svf(rate, 1.1);
366
+ const detunes = [-10, 0, 9];
367
+ const phases = detunes.map(() => random());
368
+ const drift = random() * TAU;
369
+ let sub = 0;
370
+ for (let i = 0; i < out.length; i++) {
371
+ const t = i / rate;
372
+ let x = 0;
373
+ detunes.forEach((cents, v) => {
374
+ const step = (f * Math.pow(2, cents / 1200)) / rate;
375
+ x += saw(phases[v], step);
376
+ phases[v] = (phases[v] + step) % 1;
377
+ });
378
+ if (i % 32 === 0)
379
+ filter.set(f * 3 + (500 + 700 * velocity) * (1 + 0.6 * Math.sin(TAU * 0.35 * t + drift)));
380
+ const body = drive(filter.step(x / 3).low * 1.6, 2.2);
381
+ out[i] = (body * 0.55 + Math.sin(sub) * 0.6) * gate(t, 0.004, held, release) * (0.2 + 0.08 * velocity);
382
+ sub += (TAU * f) / rate;
383
+ }
384
+ return out;
385
+ };
386
+ /** Seven saws spread across about 40 cents, through a lowpass that opens on the attack and settles: a supersaw lead. */
387
+ const synthLead = ({ midi, held, velocity, rate, random }) => {
388
+ const f = frequency(midi);
389
+ const release = 0.12;
390
+ const out = new Float32Array(Math.ceil((held + release) * rate));
391
+ const filter = svf(rate, 0.9);
392
+ const detunes = [-21, -13, -6, 0, 6, 13, 21];
393
+ const phases = detunes.map(() => random());
394
+ for (let i = 0; i < out.length; i++) {
395
+ const t = i / rate;
396
+ const wobble = 1 + 0.004 * Math.min(1, Math.max(0, t - 0.25) * 3) * Math.sin(TAU * 5.5 * t);
397
+ let x = 0;
398
+ detunes.forEach((cents, v) => {
399
+ const step = (f * wobble * Math.pow(2, cents / 1200)) / rate;
400
+ x += saw(phases[v], step) * (cents === 0 ? 1.4 : 1);
401
+ phases[v] = (phases[v] + step) % 1;
402
+ });
403
+ if (i % 32 === 0)
404
+ filter.set(f * 2 + (2500 + 4000 * velocity) * (0.45 + 0.55 * Math.exp(-t * 6)));
405
+ // Detuned saws add up like noise, not like one wave: divided by the square root of their count, the stack is as loud as one saw.
406
+ out[i] = filter.step(x / Math.sqrt(detunes.length)).low * gate(t, 0.004, held, release) * (0.17 + 0.07 * velocity);
407
+ }
408
+ return out;
409
+ };
410
+ // ---------------------------------------------------------------------------
411
+ // Drums
412
+ const noiseBurst = (out, rate, random, options) => {
413
+ const filter = svf(rate, options.q ?? 0.9);
414
+ const start = Math.round((options.delay ?? 0) * rate);
415
+ for (let i = start; i < out.length; i++) {
416
+ const t = (i - start) / rate;
417
+ if (i % 16 === 0)
418
+ filter.set(options.from * Math.pow(options.to / options.from, Math.min(1, t / options.decay)));
419
+ const result = filter.step(random() * 2 - 1);
420
+ const x = options.type === "low" ? result.low : options.type === "band" ? result.band : result.high;
421
+ out[i] += x * options.gain * Math.exp(-t / (options.decay / 4.6));
422
+ }
423
+ };
424
+ const sweep = (out, rate, options) => {
425
+ let phase = 0;
426
+ for (let i = 0; i < out.length; i++) {
427
+ const t = i / rate;
428
+ const f = options.to + (options.from - options.to) * Math.exp(-t / options.glide);
429
+ out[i] += Math.sin(phase) * options.gain * Math.exp(-t / (options.decay / 4.6));
430
+ phase += (TAU * f) / rate;
431
+ }
432
+ };
433
+ const drum = (name, velocity, rate, random) => {
434
+ const length = name === "crash" ? 1.6 : name === "openHat" ? 0.45 : name === "kick" || name === "tomLow" ? 0.5 : 0.3;
435
+ const out = new Float32Array(Math.ceil(length * rate));
436
+ const v = 0.4 + 0.6 * velocity;
437
+ switch (name) {
438
+ case "kick":
439
+ sweep(out, rate, { from: 160, to: 48, glide: 0.03, decay: 0.45, gain: 0.9 * v });
440
+ noiseBurst(out, rate, random, { from: 3000, to: 1000, decay: 0.012, gain: 0.25 * v, type: "low" });
441
+ break;
442
+ case "snare":
443
+ sweep(out, rate, { from: 260, to: 185, glide: 0.02, decay: 0.12, gain: 0.35 * v });
444
+ noiseBurst(out, rate, random, { from: 5000, to: 3500, decay: 0.2, gain: 0.45 * v, type: "high" });
445
+ break;
446
+ case "hat":
447
+ noiseBurst(out, rate, random, { from: 9000, to: 8000, decay: 0.05, gain: 0.25 * v, type: "high" });
448
+ break;
449
+ case "openHat":
450
+ noiseBurst(out, rate, random, { from: 8500, to: 7000, decay: 0.4, gain: 0.2 * v, type: "high" });
451
+ break;
452
+ case "shaker":
453
+ noiseBurst(out, rate, random, { from: 6500, to: 6000, decay: 0.07, gain: 0.18 * v, type: "band", q: 1.5 });
454
+ break;
455
+ case "clap":
456
+ for (const delay of [0, 0.011, 0.022])
457
+ noiseBurst(out, rate, random, { from: 1300, to: 1100, decay: 0.03, gain: 0.35 * v, type: "band", q: 1.4, delay });
458
+ noiseBurst(out, rate, random, { from: 1200, to: 900, decay: 0.2, gain: 0.25 * v, type: "band", q: 1.2, delay: 0.03 });
459
+ break;
460
+ case "rim":
461
+ sweep(out, rate, { from: 1700, to: 1600, glide: 0.01, decay: 0.03, gain: 0.3 * v });
462
+ noiseBurst(out, rate, random, { from: 3000, to: 2500, decay: 0.015, gain: 0.25 * v, type: "band", q: 2 });
463
+ break;
464
+ case "tomLow":
465
+ sweep(out, rate, { from: 140, to: 90, glide: 0.08, decay: 0.45, gain: 0.6 * v });
466
+ break;
467
+ case "tomHigh":
468
+ sweep(out, rate, { from: 220, to: 150, glide: 0.06, decay: 0.3, gain: 0.5 * v });
469
+ break;
470
+ case "crash":
471
+ noiseBurst(out, rate, random, { from: 7000, to: 4000, decay: 1.5, gain: 0.22 * v, type: "high" });
472
+ for (const ratio of [1, 1.47, 2.09, 2.56])
473
+ sweep(out, rate, { from: 420 * ratio, to: 420 * ratio, glide: 1, decay: 0.9, gain: 0.02 * v });
474
+ break;
475
+ }
476
+ // A drum ends in silence, never mid-wave.
477
+ const fade = Math.floor(rate * 0.01);
478
+ for (let i = 0; i < fade; i++)
479
+ out[out.length - 1 - i] *= i / fade;
480
+ return out;
481
+ };
482
+ /**
483
+ * The punchy kit: a kick with a click on top and a lower, longer boom, a
484
+ * snare with two body tones and a wide crack, tighter hats, and every drum
485
+ * driven a little, so it hits like a produced record rather than a drum
486
+ * machine.
487
+ */
488
+ const breaks = (name, velocity, rate, random) => {
489
+ const v = 0.4 + 0.6 * velocity;
490
+ let out;
491
+ let amount = 1.6;
492
+ switch (name) {
493
+ case "kick":
494
+ out = new Float32Array(Math.ceil(0.45 * rate));
495
+ sweep(out, rate, { from: 240, to: 46, glide: 0.022, decay: 0.4, gain: 1 * v });
496
+ noiseBurst(out, rate, random, { from: 9000, to: 4000, decay: 0.006, gain: 0.5 * v, type: "high" });
497
+ amount = 2.6;
498
+ break;
499
+ case "snare":
500
+ out = new Float32Array(Math.ceil(0.3 * rate));
501
+ sweep(out, rate, { from: 330, to: 200, glide: 0.015, decay: 0.1, gain: 0.45 * v });
502
+ sweep(out, rate, { from: 520, to: 330, glide: 0.01, decay: 0.05, gain: 0.2 * v });
503
+ noiseBurst(out, rate, random, { from: 7000, to: 2500, decay: 0.22, gain: 0.7 * v, type: "band", q: 0.6 });
504
+ amount = 2.4;
505
+ break;
506
+ case "hat":
507
+ out = new Float32Array(Math.ceil(0.12 * rate));
508
+ noiseBurst(out, rate, random, { from: 11000, to: 9000, decay: 0.035, gain: 0.32 * v, type: "high", q: 1.2 });
509
+ break;
510
+ case "openHat":
511
+ out = new Float32Array(Math.ceil(0.4 * rate));
512
+ noiseBurst(out, rate, random, { from: 10000, to: 8000, decay: 0.32, gain: 0.26 * v, type: "high", q: 1.2 });
513
+ break;
514
+ default:
515
+ out = drum(name, velocity, rate, random);
516
+ amount = 1.4;
517
+ }
518
+ for (let i = 0; i < out.length; i++)
519
+ out[i] = drive(out[i], amount);
520
+ const fade = Math.floor(rate * 0.01);
521
+ for (let i = 0; i < fade; i++)
522
+ out[out.length - 1 - i] *= i / fade;
523
+ return out;
524
+ };
525
+ // ---------------------------------------------------------------------------
526
+ const voices = { piano, epiano, guitar, rockGuitar, bass, reese, strings, flute, marimba, bells, pad, synthLead, chipLead, chipBass };
527
+ /** One note of a melodic instrument (`midi` a MIDI number), as mono samples from the note's start. */
528
+ export const playVoice = (instrument, midi, held, velocity, rate, random) => voices[instrument]({ midi, held: Math.max(0.02, held), velocity, rate, random });
529
+ /** One hit of a drum kit, as mono samples from the hit. */
530
+ export const playDrum = (kit, name, velocity, rate, random) => kit === "breaks" ? breaks(name, velocity, rate, random) : drum(name, velocity, rate, random);
531
+ //# sourceMappingURL=instruments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruments.js","sourceRoot":"","sources":["../../../src/music/core/instruments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type Reference } from "./song.ts";
2
+ export interface Heard extends Reference {
3
+ /** What the listening found, for the agent: how much of the audio had a clear pitch, how many notes, how sure the tempo is. */
4
+ readonly found: {
5
+ readonly seconds: number;
6
+ /** Share of the audio with a clear, sung or played pitch, 0 to 1. */
7
+ readonly voiced: number;
8
+ /** Where the melody sits: its lowest and highest notes. */
9
+ readonly range: readonly [string, string] | undefined;
10
+ /** How much better the chosen tempo fits than the next best, 0 (a guess) to 1 (clear). */
11
+ readonly tempoConfidence: number;
12
+ /** How far off pitch the voice sat the whole way, in cents (-50 to 50; negative is flat), taken out of the notes. */
13
+ readonly tuning: number;
14
+ };
15
+ }
16
+ export interface ListenOptions {
17
+ /** The tempo, when it is known (a metronome was on, or the person said so): only the melody and key are listened for. */
18
+ readonly tempo?: number | undefined;
19
+ /** The audio file's name, kept in the reference. */
20
+ readonly audio?: string | undefined;
21
+ }
22
+ /** Listens to audio (mono samples) and writes down what it heard. */
23
+ export declare const listen: (input: Float32Array, sampleRate: number, options?: ListenOptions) => Heard;
24
+ /**
25
+ * Whether the listening found too few notes for its length to be one voice:
26
+ * a full recording (a band, a song played in the room) or a noisy one, which
27
+ * the melody tracker cannot follow. Hum the part alone instead.
28
+ */
29
+ export declare const isSparse: (heard: Heard) => boolean;
30
+ /** The reference as the song keeps it (what was found is for the agent's eyes only). */
31
+ export declare const referenceOf: (heard: Heard) => Reference;
32
+ //# sourceMappingURL=listen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../../src/music/core/listen.ts"],"names":[],"mappings":"AAmBA,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAElE,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,+HAA+H;IAC/H,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,qEAAqE;QACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,2DAA2D;QAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;QACrD,0FAA0F;QAC1F,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;QAChC,qHAAqH;QACrH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,CAAA;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,yHAAyH;IACzH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAqQD,qEAAqE;AACrE,eAAO,MAAM,MAAM,UAAW,YAAY,cAAc,MAAM,YAAW,aAAa,KAAQ,KA4D7F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,UAAW,KAAK,KAAG,OAA8G,CAAA;AAEtJ,wFAAwF;AACxF,eAAO,MAAM,WAAW,UAAW,KAAK,KAAG,SAG1C,CAAA"}