@datamoc/mw_games 0.22.0 → 0.23.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 (62) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/audio/Midi.d.ts +24 -0
  3. package/dist/audio/Midi.d.ts.map +1 -1
  4. package/dist/audio/Midi.js +21 -0
  5. package/dist/audio/Midi.js.map +1 -1
  6. package/dist/audio/humanize/Groove.d.ts +80 -0
  7. package/dist/audio/humanize/Groove.d.ts.map +1 -0
  8. package/dist/audio/humanize/Groove.js +102 -0
  9. package/dist/audio/humanize/Groove.js.map +1 -0
  10. package/dist/audio/humanize/GrooveConverter.d.ts +49 -0
  11. package/dist/audio/humanize/GrooveConverter.d.ts.map +1 -0
  12. package/dist/audio/humanize/GrooveConverter.js +344 -0
  13. package/dist/audio/humanize/GrooveConverter.js.map +1 -0
  14. package/dist/audio/humanize/GrooveExtractor.d.ts +49 -0
  15. package/dist/audio/humanize/GrooveExtractor.d.ts.map +1 -0
  16. package/dist/audio/humanize/GrooveExtractor.js +179 -0
  17. package/dist/audio/humanize/GrooveExtractor.js.map +1 -0
  18. package/dist/audio/humanize/GrooveHumanizer.d.ts +34 -0
  19. package/dist/audio/humanize/GrooveHumanizer.d.ts.map +1 -0
  20. package/dist/audio/humanize/GrooveHumanizer.js +37 -0
  21. package/dist/audio/humanize/GrooveHumanizer.js.map +1 -0
  22. package/dist/audio/humanize/Humanize.d.ts +54 -0
  23. package/dist/audio/humanize/Humanize.d.ts.map +1 -0
  24. package/dist/audio/humanize/Humanize.js +239 -0
  25. package/dist/audio/humanize/Humanize.js.map +1 -0
  26. package/dist/audio/humanize/HumanizerFactory.d.ts +68 -0
  27. package/dist/audio/humanize/HumanizerFactory.d.ts.map +1 -0
  28. package/dist/audio/humanize/HumanizerFactory.js +84 -0
  29. package/dist/audio/humanize/HumanizerFactory.js.map +1 -0
  30. package/dist/audio/humanize/LiteHumanizer.d.ts +30 -0
  31. package/dist/audio/humanize/LiteHumanizer.d.ts.map +1 -0
  32. package/dist/audio/humanize/LiteHumanizer.js +35 -0
  33. package/dist/audio/humanize/LiteHumanizer.js.map +1 -0
  34. package/dist/audio/humanize/Onsets.d.ts +26 -0
  35. package/dist/audio/humanize/Onsets.d.ts.map +1 -0
  36. package/dist/audio/humanize/Onsets.js +164 -0
  37. package/dist/audio/humanize/Onsets.js.map +1 -0
  38. package/dist/audio/index.d.ts +11 -0
  39. package/dist/audio/index.d.ts.map +1 -1
  40. package/dist/audio/index.js +6 -0
  41. package/dist/audio/index.js.map +1 -1
  42. package/dist/mw_games.global.js +112 -112
  43. package/dist/rpg/MoveRoute.d.ts +35 -4
  44. package/dist/rpg/MoveRoute.d.ts.map +1 -1
  45. package/dist/rpg/MoveRoute.js +40 -11
  46. package/dist/rpg/MoveRoute.js.map +1 -1
  47. package/dist/two-d/render/RpgmAutotile.d.ts +37 -0
  48. package/dist/two-d/render/RpgmAutotile.d.ts.map +1 -1
  49. package/dist/two-d/render/RpgmAutotile.js +67 -1
  50. package/dist/two-d/render/RpgmAutotile.js.map +1 -1
  51. package/dist/two-d/render/TileMap.d.ts +36 -0
  52. package/dist/two-d/render/TileMap.d.ts.map +1 -1
  53. package/dist/two-d/render/TileMap.js +89 -1
  54. package/dist/two-d/render/TileMap.js.map +1 -1
  55. package/dist/two-d/render/index.d.ts +3 -3
  56. package/dist/two-d/render/index.d.ts.map +1 -1
  57. package/dist/two-d/render/index.js +1 -1
  58. package/dist/two-d/render/index.js.map +1 -1
  59. package/dist/version.d.ts +1 -1
  60. package/dist/version.js +1 -1
  61. package/package.json +6 -6
  62. package/sbom.cdx.json +194 -32
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Onset detection, for the audio path of `GrooveExtractor`: when a groove has to come
3
+ * from a recording rather than from a pair of MIDI files, something has to find the hits
4
+ * first. Spectral flux over a short sliding window is the usual measure (what aubio and
5
+ * Essentia reach for), and it is cheap enough to hand-roll: a radix-2 FFT, the rise in
6
+ * magnitude bin by bin, then a local threshold with a minimum gap so one attack is not
7
+ * reported again by its own decay.
8
+ *
9
+ * The timings are what a groove lives or dies on, so the frame geometry is worth stating.
10
+ * Frames are padded by half a window either side, which is what lets a hit at sample 0 be
11
+ * measured with the window's full weight instead of its zeroed edge. A Hann window makes
12
+ * flux peak a quarter of a window plus half a hop after the hit it is reacting to; the
13
+ * detector subtracts that constant, leaving only the half-hop of frame quantization.
14
+ *
15
+ * Flux alone is not enough to call something an onset, which is what `ENERGY_RISE` below
16
+ * is for: everything else in this file is about locating a hit, that gate is about
17
+ * refusing to find one where there is none.
18
+ */
19
+ const FRAME = 256;
20
+ const HOP = 64;
21
+ /** frames either side of a peak that make up its local mean and spread */
22
+ const NEIGHBOURHOOD = 10;
23
+ /**
24
+ * How far above its neighbourhood a peak has to sit. Two is the balance point: an attack
25
+ * lands well above it however loud the rest of the file is, while three lets the
26
+ * neighbourhood of a sparse attack (mostly zeros) put the peak back within reach.
27
+ */
28
+ const FLUX_SIGMAS = 2;
29
+ /**
30
+ * An onset has to multiply its frame's energy by this much. This is what tells a hit apart
31
+ * from a sustained note: flux alone reports the beating of a steady tone as a train of
32
+ * onsets, because the tone's energy sloshes between bins while its own envelope is flat. A
33
+ * real onset multiplies the frame's energy many times over; a steady tone moves it by a
34
+ * couple of per cent. The previous frame may carry the rise, since flux compares against
35
+ * the frame it came from and so trails the energy by up to one frame.
36
+ */
37
+ const ENERGY_RISE = 0.05;
38
+ /** minimum gap between two onsets, in frames: one attack, not its own ringing */
39
+ const MIN_GAP_FRAMES = 4;
40
+ /** where a Hann window's derivative puts the flux peak behind the hit: FRAME/4 + HOP/2 */
41
+ const FLUX_PEAK_DELAY = FRAME / 4 + HOP / 2;
42
+ /** in-place iterative radix-2 FFT; `real` and `imaginary` must be a power of two long */
43
+ function fft(real, imaginary) {
44
+ const length = real.length;
45
+ let j = 0;
46
+ for (let i = 1; i < length; i++) {
47
+ let bit = length >> 1;
48
+ while (j & bit) {
49
+ j ^= bit;
50
+ bit >>= 1;
51
+ }
52
+ j ^= bit;
53
+ if (i < j) {
54
+ let swap = real[i];
55
+ real[i] = real[j];
56
+ real[j] = swap;
57
+ swap = imaginary[i];
58
+ imaginary[i] = imaginary[j];
59
+ imaginary[j] = swap;
60
+ }
61
+ }
62
+ for (let size = 2; size <= length; size <<= 1) {
63
+ const angle = (-2 * Math.PI) / size;
64
+ const stepReal = Math.cos(angle);
65
+ const stepImaginary = Math.sin(angle);
66
+ const half = size >> 1;
67
+ for (let start = 0; start < length; start += size) {
68
+ let weightReal = 1;
69
+ let weightImaginary = 0;
70
+ for (let k = 0; k < half; k++) {
71
+ const even = start + k;
72
+ const odd = even + half;
73
+ const oddReal = real[odd] * weightReal - imaginary[odd] * weightImaginary;
74
+ const oddImaginary = real[odd] * weightImaginary + imaginary[odd] * weightReal;
75
+ real[odd] = real[even] - oddReal;
76
+ imaginary[odd] = imaginary[even] - oddImaginary;
77
+ real[even] += oddReal;
78
+ imaginary[even] += oddImaginary;
79
+ const nextReal = weightReal * stepReal - weightImaginary * stepImaginary;
80
+ weightImaginary = weightReal * stepImaginary + weightImaginary * stepReal;
81
+ weightReal = nextReal;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * When each onset in a mono signal happens, in seconds from its start.
88
+ *
89
+ * Returns an empty array rather than throwing when there is nothing to find; the caller
90
+ * decides whether silence is a valid extraction result (it is not, and it says so).
91
+ */
92
+ export function detectOnsets(samples, sampleRate) {
93
+ if (samples.length === 0 || sampleRate <= 0)
94
+ return [];
95
+ const pad = FRAME / 2;
96
+ const padded = new Float32Array(samples.length + pad * 2);
97
+ padded.set(samples, pad);
98
+ const window = new Float64Array(FRAME);
99
+ for (let i = 0; i < FRAME; i++)
100
+ window[i] = 0.5 - 0.5 * Math.cos((2 * Math.PI * i) / (FRAME - 1));
101
+ const real = new Float64Array(FRAME);
102
+ const imaginary = new Float64Array(FRAME);
103
+ const previous = new Float64Array(FRAME / 2);
104
+ const flux = [];
105
+ const energyRise = [];
106
+ let previousEnergy = 0;
107
+ for (let start = 0; start + FRAME <= padded.length; start += HOP) {
108
+ let energy = 0;
109
+ for (let i = 0; i < FRAME; i++) {
110
+ real[i] = padded[start + i] * window[i];
111
+ imaginary[i] = 0;
112
+ energy += real[i] * real[i];
113
+ }
114
+ //nothing against nothing is no change, but a frame that finally carries signal is
115
+ //an unbounded one, which is what the first frame of any file is
116
+ energyRise.push(previousEnergy === 0 ? (energy === 0 ? 0 : Infinity) : energy / previousEnergy - 1);
117
+ previousEnergy = energy;
118
+ fft(real, imaginary);
119
+ let rise = 0;
120
+ for (let k = 0; k < FRAME / 2; k++) {
121
+ const magnitude = Math.hypot(real[k], imaginary[k]);
122
+ const difference = magnitude - previous[k];
123
+ if (difference > 0)
124
+ rise += difference;
125
+ previous[k] = magnitude;
126
+ }
127
+ flux.push(rise);
128
+ }
129
+ const onsets = [];
130
+ let lastFrame = -Infinity;
131
+ for (let i = 0; i < flux.length; i++) {
132
+ const from = Math.max(0, i - NEIGHBOURHOOD);
133
+ const to = Math.min(flux.length - 1, i + NEIGHBOURHOOD);
134
+ const span = to - from + 1;
135
+ let mean = 0;
136
+ for (let k = from; k <= to; k++)
137
+ mean += flux[k];
138
+ mean /= span;
139
+ let variance = 0;
140
+ for (let k = from; k <= to; k++)
141
+ variance += (flux[k] - mean) ** 2;
142
+ const threshold = mean + FLUX_SIGMAS * Math.sqrt(variance / span);
143
+ //`<= 0` first: a silent file has flux of exactly zero everywhere, and its last
144
+ //frame would otherwise pass every later test and report an onset at the end
145
+ if (flux[i] <= 0 || flux[i] < threshold)
146
+ continue;
147
+ //and an attack has to have moved the envelope, not just the bin balance
148
+ if (energyRise[i] < ENERGY_RISE && (i === 0 || energyRise[i - 1] < ENERGY_RISE))
149
+ continue;
150
+ // the last frame of a flat top wins, so the plateau an impulse leaves behind
151
+ // resolves to one onset rather than the first frame of the plateau
152
+ if (i > 0 && flux[i - 1] > flux[i])
153
+ continue;
154
+ if (i + 1 < flux.length && flux[i + 1] >= flux[i])
155
+ continue;
156
+ if (i - lastFrame < MIN_GAP_FRAMES)
157
+ continue;
158
+ const time = (i * HOP + pad - FLUX_PEAK_DELAY) / sampleRate;
159
+ onsets.push(Math.max(0, time));
160
+ lastFrame = i;
161
+ }
162
+ return onsets;
163
+ }
164
+ //# sourceMappingURL=Onsets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Onsets.js","sourceRoot":"","sources":["../../../src/audio/humanize/Onsets.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,15 @@ export type { LoopRegion, ChannelPlayOptions, ChannelState, BusMixerLevel } from
23
23
  export type { BusKind, BusTrack, SavedBusTrack, LoadedTrack, BusLoader, BusSnapshot, AudioBusOptions, } from './Channels.ts';
24
24
  export { AudioListener, SoundSource, audioGain, audioPan } from './Positional.ts';
25
25
  export type { AudioPoint, AudioFalloff, SoundSourceOptions } from './Positional.ts';
26
+ export { subdivisionCount, assertGrooveTemplate } from './humanize/Groove.ts';
27
+ export type { GridSubdivision, GrooveOffset, GrooveTemplate } from './humanize/Groove.ts';
28
+ export { LiteHumanizer } from './humanize/LiteHumanizer.ts';
29
+ export { GrooveHumanizer } from './humanize/GrooveHumanizer.ts';
30
+ export { GrooveExtractor } from './humanize/GrooveExtractor.ts';
31
+ export type { GrooveExtractorEngine } from './humanize/GrooveExtractor.ts';
32
+ export { GrooveConverter } from './humanize/GrooveConverter.ts';
33
+ export type { GrooveConverterEngine, GrooveFormat } from './humanize/GrooveConverter.ts';
34
+ export { HumanizerFactory, humanizeMidi } from './humanize/HumanizerFactory.ts';
35
+ export type { HumanizeRequest } from './humanize/HumanizerFactory.ts';
36
+ export type { HumanizationOptions, HumanizeStyle, HumanizerTier, MidiHumanizerEngine } from './humanize/Humanize.ts';
26
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChG,YAAY,EACX,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,iBAAiB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxF,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjG,YAAY,EACX,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,10 @@ export { collectSoundFontUsage, parseSoundFont, subsetSoundFont } from './SoundF
10
10
  export { Channel, AudioBus } from './Channels.js';
11
11
  export { parseVorbisLoopTags, loopRegionFromTags } from './LoopTags.js';
12
12
  export { AudioListener, SoundSource, audioGain, audioPan } from './Positional.js';
13
+ export { subdivisionCount, assertGrooveTemplate } from './humanize/Groove.js';
14
+ export { LiteHumanizer } from './humanize/LiteHumanizer.js';
15
+ export { GrooveHumanizer } from './humanize/GrooveHumanizer.js';
16
+ export { GrooveExtractor } from './humanize/GrooveExtractor.js';
17
+ export { GrooveConverter } from './humanize/GrooveConverter.js';
18
+ export { HumanizerFactory, humanizeMidi } from './humanize/HumanizerFactory.js';
13
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAahG,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYxE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAahG,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYxE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}