@hraness/dawg 0.6.0 → 0.6.1

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 (93) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/DAWG.md +338 -51
  3. package/README.md +4 -4
  4. package/core/chords.ts +492 -4
  5. package/core/diff.ts +5 -0
  6. package/core/expression.ts +143 -6
  7. package/core/fx.ts +258 -6
  8. package/core/granular.ts +91 -0
  9. package/core/instruments.ts +161 -0
  10. package/core/keys.ts +573 -4
  11. package/core/resonators.ts +291 -3
  12. package/core/score.ts +349 -3
  13. package/core/sdk/print.ts +78 -3
  14. package/core/sdk/v1.ts +1320 -36
  15. package/core/sections.ts +12 -4
  16. package/core/strings.ts +237 -2
  17. package/core/winds.ts +652 -0
  18. package/guides/automation.md +1 -0
  19. package/guides/chords.md +3 -1
  20. package/guides/effects.md +3 -2
  21. package/guides/media.md +1 -1
  22. package/guides/performance.md +3 -0
  23. package/guides/resample.md +26 -0
  24. package/guides/sounds.md +7 -6
  25. package/package.json +1 -1
  26. package/src/agent/agent.ts +8 -2
  27. package/src/agent/chord-tools.ts +153 -1
  28. package/src/agent/expression-tools.ts +91 -0
  29. package/src/agent/ops.ts +4 -1
  30. package/src/agent/preview-tool.ts +2 -1
  31. package/src/agent/resample-tool.ts +131 -0
  32. package/src/agent/tools.ts +200 -15
  33. package/src/agent/xcb-agent.ts +8 -2
  34. package/src/audio/arrange.ts +21 -0
  35. package/src/audio/dsp/envelope.ts +161 -0
  36. package/src/audio/dsp/shift.ts +256 -0
  37. package/src/audio/effects/chain.ts +18 -3
  38. package/src/audio/effects/common.ts +14 -0
  39. package/src/audio/effects/convolution.ts +106 -1
  40. package/src/audio/effects/gaze.ts +354 -0
  41. package/src/audio/engine.ts +46 -5
  42. package/src/audio/fit.ts +45 -0
  43. package/src/audio/granular.ts +352 -21
  44. package/src/audio/instrument-check.ts +9 -5
  45. package/src/audio/instruments.ts +32 -3
  46. package/src/audio/keys/electric.ts +420 -0
  47. package/src/audio/keys/engine.ts +143 -19
  48. package/src/audio/keys/organ.ts +1335 -0
  49. package/src/audio/keys/piano.ts +50 -6
  50. package/src/audio/keys/sympathetic.ts +127 -0
  51. package/src/audio/live-worker.ts +3 -1
  52. package/src/audio/live.ts +136 -9
  53. package/src/audio/preview.ts +15 -1
  54. package/src/audio/resample.ts +285 -0
  55. package/src/audio/resonators.ts +10 -2
  56. package/src/audio/sampler.ts +168 -21
  57. package/src/audio/samples.ts +26 -1
  58. package/src/audio/strings/body.ts +29 -16
  59. package/src/audio/strings/bow.ts +656 -0
  60. package/src/audio/strings/engine.ts +266 -20
  61. package/src/audio/strings/measure.test-helpers.ts +2 -0
  62. package/src/audio/wav.ts +119 -19
  63. package/src/audio/winds/engine.ts +302 -0
  64. package/src/audio/winds/filters.ts +153 -0
  65. package/src/audio/winds/pitch.ts +104 -0
  66. package/src/audio/winds/trim.ts +80 -0
  67. package/src/audio/winds/trims.ts +917 -0
  68. package/src/audio/winds/voice.ts +479 -0
  69. package/src/commands/expression.ts +103 -22
  70. package/src/commands/fx.ts +4 -1
  71. package/src/commands/granular.ts +7 -2
  72. package/src/commands/help.ts +91 -8
  73. package/src/commands/keys.ts +287 -11
  74. package/src/commands/modal.ts +67 -4
  75. package/src/commands/resample.ts +281 -0
  76. package/src/commands/rig.ts +5 -1
  77. package/src/commands/sample.ts +49 -2
  78. package/src/commands/shift.ts +119 -0
  79. package/src/commands/string.ts +28 -2
  80. package/src/commands/strum.ts +473 -0
  81. package/src/commands/wind.ts +244 -0
  82. package/src/main.ts +129 -7
  83. package/src/project/check.ts +5 -1
  84. package/src/render.ts +16 -0
  85. package/src/session/presence.ts +16 -3
  86. package/src/tui/audition.ts +1 -1
  87. package/src/tui/menu.ts +637 -35
  88. package/src/tui/modal-menu.ts +34 -7
  89. package/src/tui/performance-menu.ts +42 -0
  90. package/src/tui/play-chords.ts +104 -3
  91. package/src/tui/play-mode.ts +1 -0
  92. package/src/tui/play-session.ts +34 -9
  93. package/src/tui/wind-menu.ts +144 -0
@@ -132,6 +132,42 @@ export const INSTRUMENT_WORDS: readonly InstrumentWordRow[] = Object.freeze([
132
132
  preset: "dulcimer",
133
133
  },
134
134
  { word: "sehtar", instrument: "string", field: "string", preset: "setar" },
135
+ // bowed (f061-bowed): bowed presets of the string engine. `cello`,
136
+ // `contrabass` and `strings` stay legacy words (today's voice);
137
+ // `bowed-cello`, `string cello` or `bowed cello` reach the engine.
138
+ { word: "violin", instrument: "string", field: "string", preset: "violin" },
139
+ { word: "viola", instrument: "string", field: "string", preset: "viola" },
140
+ { word: "fiddle", instrument: "string", field: "string", preset: "fiddle" },
141
+ { word: "erhu", instrument: "string", field: "string", preset: "erhu" },
142
+ {
143
+ word: "kamancheh",
144
+ instrument: "string",
145
+ field: "string",
146
+ preset: "kamancheh",
147
+ },
148
+ {
149
+ word: "kemence",
150
+ instrument: "string",
151
+ field: "string",
152
+ preset: "kamancheh",
153
+ },
154
+ { word: "violins", instrument: "string", field: "string", preset: "violins" },
155
+ { word: "violas", instrument: "string", field: "string", preset: "violas" },
156
+ { word: "cellos", instrument: "string", field: "string", preset: "cellos" },
157
+ {
158
+ word: "contrabasses",
159
+ instrument: "string",
160
+ field: "string",
161
+ preset: "contrabasses",
162
+ },
163
+ { word: "pizzicato", instrument: "string", field: "string", preset: "pizz" },
164
+ { word: "tremolo", instrument: "string", field: "string", preset: "trem" },
165
+ {
166
+ word: "bowed-cello",
167
+ instrument: "string",
168
+ field: "string",
169
+ preset: "cello",
170
+ },
135
171
  // f06-rig: guitar track aliases, a guitar voice plus a whole rig. The
136
172
  // voice is the strings lane's `electric` row (jangle: its 12-string
137
173
  // `jangle` preset); the pluck only while that row is absent. Never `lead`
@@ -196,6 +232,39 @@ export const INSTRUMENT_WORDS: readonly InstrumentWordRow[] = Object.freeze([
196
232
  field: "keys",
197
233
  preset: "prepared",
198
234
  },
235
+ // keys (f061-organ): tonewheel, combo and pipe organs on the keys
236
+ // engine. `organ` stays legacy (the sine voice).
237
+ {
238
+ word: "tonewheel",
239
+ instrument: "tonewheel",
240
+ field: "keys",
241
+ preset: "tonewheel",
242
+ },
243
+ {
244
+ word: "hammond",
245
+ instrument: "tonewheel",
246
+ field: "keys",
247
+ preset: "tonewheel",
248
+ },
249
+ { word: "b3", instrument: "tonewheel", field: "keys", preset: "tonewheel" },
250
+ { word: "gospel", instrument: "tonewheel", field: "keys", preset: "gospel" },
251
+ {
252
+ word: "jazzorgan",
253
+ instrument: "tonewheel",
254
+ field: "keys",
255
+ preset: "jazzorgan",
256
+ },
257
+ { word: "combo", instrument: "combo", field: "keys", preset: "combo" },
258
+ { word: "farfisa", instrument: "combo", field: "keys", preset: "combo" },
259
+ { word: "vox", instrument: "combo", field: "keys", preset: "vox" },
260
+ { word: "pipe", instrument: "pipe", field: "keys", preset: "pipe" },
261
+ { word: "church", instrument: "pipe", field: "keys", preset: "pipe" },
262
+ { word: "pipeorgan", instrument: "pipe", field: "keys", preset: "pipe" },
263
+ { word: "churchorgan", instrument: "pipe", field: "keys", preset: "pipe" },
264
+ { word: "flutes", instrument: "pipe", field: "keys", preset: "flutes" },
265
+ { word: "cornet", instrument: "pipe", field: "keys", preset: "cornet" },
266
+ { word: "reeds", instrument: "pipe", field: "keys", preset: "reeds" },
267
+ { word: "celeste", instrument: "pipe", field: "keys", preset: "celeste" },
199
268
  // f06-modal: mallets and bells (core/resonators.ts). `marimba` is legacy;
200
269
  // `modal` alone gives the modal marimba.
201
270
  { word: "modal", instrument: "modal", field: "modal", preset: "marimba" },
@@ -249,6 +318,98 @@ export const INSTRUMENT_WORDS: readonly InstrumentWordRow[] = Object.freeze([
249
318
  field: "modal",
250
319
  preset: "chimes",
251
320
  },
321
+ // keys-electric (0.6.1): electric pianos and clavinet. `keys` stays legacy.
322
+ { word: "epiano", instrument: "epiano", field: "keys", preset: "epiano" },
323
+ { word: "rhodes", instrument: "epiano", field: "keys", preset: "epiano" },
324
+ {
325
+ word: "suitcase",
326
+ instrument: "epiano",
327
+ field: "keys",
328
+ preset: "suitcase",
329
+ },
330
+ { word: "dyno", instrument: "epiano", field: "keys", preset: "dyno" },
331
+ { word: "wurli", instrument: "wurli", field: "keys", preset: "wurli" },
332
+ { word: "wurlitzer", instrument: "wurli", field: "keys", preset: "wurli" },
333
+ { word: "clav", instrument: "clav", field: "keys", preset: "clav" },
334
+ { word: "clavinet", instrument: "clav", field: "keys", preset: "clav" },
335
+ { word: "funkclav", instrument: "clav", field: "keys", preset: "funkclav" },
336
+ // f061-guitar: the shoegaze alias, an electric guitar voice plus the
337
+ // shoegaze rig and its long wash.
338
+ { word: "shoegaze", instrument: "pluck", voice: "electric", fx: "shoegaze" },
339
+ // f061 integration: the two rig names that are free as instrument words
340
+ // (glide and swell are taken by commands; reach them with `rig glide`).
341
+ { word: "dreampop", instrument: "pluck", voice: "electric", fx: "dreampop" },
342
+ { word: "ebow", instrument: "pluck", voice: "electric", fx: "ebow" },
343
+ // f061-gamelan-winds: gamelan, small bells and frame drums.
344
+ { word: "crotales", instrument: "modal", field: "modal", preset: "crotales" },
345
+ { word: "crotale", instrument: "modal", field: "modal", preset: "crotales" },
346
+ { word: "musicbox", instrument: "modal", field: "modal", preset: "musicbox" },
347
+ { word: "toypiano", instrument: "modal", field: "modal", preset: "toypiano" },
348
+ { word: "saron", instrument: "modal", field: "modal", preset: "saron" },
349
+ { word: "demung", instrument: "modal", field: "modal", preset: "demung" },
350
+ { word: "slenthem", instrument: "modal", field: "modal", preset: "slenthem" },
351
+ { word: "gangsa", instrument: "modal", field: "modal", preset: "gangsa" },
352
+ { word: "gender", instrument: "modal", field: "modal", preset: "gender" },
353
+ { word: "bonang", instrument: "modal", field: "modal", preset: "bonang" },
354
+ { word: "kenong", instrument: "modal", field: "modal", preset: "kenong" },
355
+ { word: "kethuk", instrument: "modal", field: "modal", preset: "kethuk" },
356
+ { word: "kempul", instrument: "modal", field: "modal", preset: "kempul" },
357
+ { word: "daf", instrument: "modal", field: "modal", preset: "daf" },
358
+ { word: "bodhran", instrument: "modal", field: "modal", preset: "bodhran" },
359
+ { word: "framedrum", instrument: "modal", field: "modal", preset: "bodhran" },
360
+ { word: "tabla", instrument: "modal", field: "modal", preset: "tabla" },
361
+ // f061-gamelan-winds: blown waveguides (core/winds.ts). The legacy word
362
+ // `wind` keeps its tone; these words and their aliases pick a wind preset.
363
+ { word: "flute", instrument: "wind", field: "wind", preset: "flute" },
364
+ { word: "recorder", instrument: "wind", field: "wind", preset: "recorder" },
365
+ { word: "whistle", instrument: "wind", field: "wind", preset: "whistle" },
366
+ { word: "ney", instrument: "wind", field: "wind", preset: "ney" },
367
+ {
368
+ word: "shakuhachi",
369
+ instrument: "wind",
370
+ field: "wind",
371
+ preset: "shakuhachi",
372
+ },
373
+ { word: "panpipe", instrument: "wind", field: "wind", preset: "panpipe" },
374
+ { word: "suling", instrument: "wind", field: "wind", preset: "suling" },
375
+ { word: "bansuri", instrument: "wind", field: "wind", preset: "bansuri" },
376
+ { word: "clarinet", instrument: "wind", field: "wind", preset: "clarinet" },
377
+ {
378
+ word: "bassclarinet",
379
+ instrument: "wind",
380
+ field: "wind",
381
+ preset: "bassclarinet",
382
+ },
383
+ { word: "oboe", instrument: "wind", field: "wind", preset: "oboe" },
384
+ { word: "bassoon", instrument: "wind", field: "wind", preset: "bassoon" },
385
+ { word: "sax", instrument: "wind", field: "wind", preset: "sax" },
386
+ { word: "altosax", instrument: "wind", field: "wind", preset: "altosax" },
387
+ { word: "barisax", instrument: "wind", field: "wind", preset: "barisax" },
388
+ { word: "trumpet", instrument: "wind", field: "wind", preset: "trumpet" },
389
+ { word: "harmon", instrument: "wind", field: "wind", preset: "harmon" },
390
+ { word: "plunger", instrument: "wind", field: "wind", preset: "plunger" },
391
+ { word: "trombone", instrument: "wind", field: "wind", preset: "trombone" },
392
+ { word: "tuba", instrument: "wind", field: "wind", preset: "tuba" },
393
+ { word: "horn", instrument: "wind", field: "wind", preset: "horn" },
394
+ { word: "tinwhistle", instrument: "wind", field: "wind", preset: "whistle" },
395
+ {
396
+ word: "pennywhistle",
397
+ instrument: "wind",
398
+ field: "wind",
399
+ preset: "whistle",
400
+ },
401
+ { word: "nay", instrument: "wind", field: "wind", preset: "ney" },
402
+ { word: "panflute", instrument: "wind", field: "wind", preset: "panpipe" },
403
+ { word: "panpipes", instrument: "wind", field: "wind", preset: "panpipe" },
404
+ { word: "saxophone", instrument: "wind", field: "wind", preset: "sax" },
405
+ { word: "tenorsax", instrument: "wind", field: "wind", preset: "sax" },
406
+ { word: "tenor", instrument: "wind", field: "wind", preset: "sax" },
407
+ { word: "alto", instrument: "wind", field: "wind", preset: "altosax" },
408
+ { word: "bari", instrument: "wind", field: "wind", preset: "barisax" },
409
+ { word: "baritonesax", instrument: "wind", field: "wind", preset: "barisax" },
410
+ { word: "frenchhorn", instrument: "wind", field: "wind", preset: "horn" },
411
+ { word: "mutedtrumpet", instrument: "wind", field: "wind", preset: "harmon" },
412
+ { word: "wahtrumpet", instrument: "wind", field: "wind", preset: "plunger" },
252
413
  ]);
253
414
 
254
415
  /**