@thi.ng/dsp 4.6.16 → 4.6.18

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 (66) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +1 -1
  3. package/add.js +24 -38
  4. package/addg.js +4 -19
  5. package/adsr.js +148 -156
  6. package/agen.js +17 -21
  7. package/allpass.js +37 -38
  8. package/alt.js +26 -22
  9. package/anti-alias.js +8 -37
  10. package/api.js +0 -1
  11. package/aproc.js +24 -30
  12. package/biquad.js +188 -184
  13. package/bounce.js +15 -16
  14. package/complex.js +4 -1
  15. package/const.js +12 -13
  16. package/convert.js +18 -64
  17. package/cosine.js +43 -48
  18. package/curve.js +12 -41
  19. package/dcblock.js +9 -10
  20. package/delay.js +100 -111
  21. package/feedback-delay.js +23 -30
  22. package/fft.js +188 -334
  23. package/filter-delay.js +23 -27
  24. package/filter-response.js +22 -33
  25. package/foldback.js +26 -35
  26. package/impulse-train.js +35 -37
  27. package/impulse.js +27 -42
  28. package/integrator.js +27 -32
  29. package/internal/ensure.js +4 -1
  30. package/internal/take.js +8 -5
  31. package/iterable.js +32 -43
  32. package/line.js +10 -25
  33. package/madd.js +25 -40
  34. package/mapg.js +77 -69
  35. package/merge.js +18 -20
  36. package/mix.js +20 -16
  37. package/mul.js +24 -38
  38. package/multiplex.js +15 -11
  39. package/onepole.js +41 -42
  40. package/osc-additive.js +25 -53
  41. package/osc-cos.js +4 -1
  42. package/osc-dsf.js +15 -52
  43. package/osc-mix.js +6 -20
  44. package/osc-parabolic.js +4 -13
  45. package/osc-rect.js +6 -8
  46. package/osc-saw.js +4 -1
  47. package/osc-sin.js +4 -1
  48. package/osc-tri.js +4 -1
  49. package/osc-wavetable.js +12 -9
  50. package/osc.js +40 -74
  51. package/package.json +13 -10
  52. package/pan.js +23 -29
  53. package/pink-noise.js +35 -57
  54. package/pipe.js +6 -4
  55. package/power.js +40 -96
  56. package/product.js +5 -4
  57. package/reciprocal.js +20 -22
  58. package/ref.js +24 -20
  59. package/serial.js +59 -60
  60. package/sincos.js +45 -61
  61. package/sum.js +5 -4
  62. package/svf.js +74 -78
  63. package/sweep.js +4 -27
  64. package/waveshaper.js +41 -60
  65. package/white-noise.js +17 -23
  66. package/window.js +67 -52
package/window.js CHANGED
@@ -1,68 +1,83 @@
1
1
  import { isNumber } from "@thi.ng/checks/is-number";
2
2
  import { PI, TAU } from "@thi.ng/math/api";
3
- // https://en.wikipedia.org/wiki/Window_function
4
3
  const PI4 = 4 * PI;
5
4
  const PI6 = 6 * PI;
6
5
  const sin = Math.sin;
7
6
  const cos = Math.cos;
8
- /**
9
- * Creates or fills a given buffer with results of window function `fn`.
10
- * The buffer size MUST be the same as the signal length given to
11
- * {@link fft}.
12
- *
13
- * @param fn -
14
- * @param lenOfBuf -
15
- */
16
- export const window = (fn, lenOfBuf) => {
17
- const buf = isNumber(lenOfBuf) ? new Float64Array(lenOfBuf) : lenOfBuf;
18
- const n = buf.length - 1;
19
- for (let i = 0; i <= n; i++) {
20
- buf[i] = fn(i, n);
21
- }
22
- return buf;
7
+ const window = (fn, lenOfBuf) => {
8
+ const buf = isNumber(lenOfBuf) ? new Float64Array(lenOfBuf) : lenOfBuf;
9
+ const n = buf.length - 1;
10
+ for (let i = 0; i <= n; i++) {
11
+ buf[i] = fn(i, n);
12
+ }
13
+ return buf;
23
14
  };
24
- /**
25
- * Takes a `signal` and `window` buffer and multiplies both elementwise. Writes
26
- * results into `out` (or back into `signal` by default).
27
- *
28
- * @param signal -
29
- * @param window -
30
- * @param out -
31
- */
32
- export const applyWindow = (signal, window, out = signal) => {
33
- for (let i = signal.length; i-- > 0;) {
34
- out[i] = signal[i] * window[i];
35
- }
36
- return out;
15
+ const applyWindow = (signal, window2, out = signal) => {
16
+ for (let i = signal.length; i-- > 0; ) {
17
+ out[i] = signal[i] * window2[i];
18
+ }
19
+ return out;
37
20
  };
38
- export const windowRect = () => 1;
39
- export const windowBartlett = (i, n) => 1 - Math.abs((i - n / 2) / (n / 2));
40
- export const windowWelch = (i, n) => 1 - ((i - n / 2) / (n / 2)) ** 2;
41
- export const windowSin = (i, n) => sin((PI * i) / n);
42
- export const windowSinPow = (k) => (i, n) => sin((PI * i) / n) ** k;
43
- export const windowLanczos = (i, n) => {
44
- i = PI * ((2 * i) / n - 1);
45
- return sin(i) / i;
21
+ const windowRect = () => 1;
22
+ const windowBartlett = (i, n) => 1 - Math.abs((i - n / 2) / (n / 2));
23
+ const windowWelch = (i, n) => 1 - ((i - n / 2) / (n / 2)) ** 2;
24
+ const windowSin = (i, n) => sin(PI * i / n);
25
+ const windowSinPow = (k) => (i, n) => sin(PI * i / n) ** k;
26
+ const windowLanczos = (i, n) => {
27
+ i = PI * (2 * i / n - 1);
28
+ return sin(i) / i;
46
29
  };
47
30
  const windowCosSum = (k) => {
48
- let ik = 1 - k;
49
- return (i, n) => k - ik * cos((TAU * i) / n);
31
+ let ik = 1 - k;
32
+ return (i, n) => k - ik * cos(TAU * i / n);
50
33
  };
51
34
  const windowCosSum3 = (k1, k2, k3) => (i, n) => {
52
- i /= n;
53
- return k1 + k2 * cos(TAU * i) + k3 * cos(PI4 * i);
35
+ i /= n;
36
+ return k1 + k2 * cos(TAU * i) + k3 * cos(PI4 * i);
54
37
  };
55
38
  const windowCosSum4 = (k1, k2, k3, k4) => (i, n) => {
56
- i /= n;
57
- return k1 + k2 * cos(TAU * i) + k3 * cos(PI4 * i) + k4 * cos(PI6 * i);
39
+ i /= n;
40
+ return k1 + k2 * cos(TAU * i) + k3 * cos(PI4 * i) + k4 * cos(PI6 * i);
58
41
  };
59
- export const windowHann = windowCosSum(0.5);
60
- export const windowHamming = windowCosSum(0.53836);
61
- export const windowBlackman = windowCosSum3(0.42, -0.5, 0.08);
62
- export const windowBlackmanHarris = windowCosSum4(0.35875, -0.48829, 0.14128, 0.01168);
63
- export const windowNuttall = windowCosSum4(0.355768, -0.487396, 0.144232, -0.012604);
64
- export const windowBlackmanNuttall = windowCosSum4(0.3635819, -0.4891775, 0.1365995, -0.0106411);
65
- export const windowGauss = (a = 0.4) => (i, n) => {
66
- n /= 2;
67
- return Math.exp(-0.5 * ((i - n) / (a * n)) ** 2);
42
+ const windowHann = windowCosSum(0.5);
43
+ const windowHamming = windowCosSum(0.53836);
44
+ const windowBlackman = windowCosSum3(0.42, -0.5, 0.08);
45
+ const windowBlackmanHarris = windowCosSum4(
46
+ 0.35875,
47
+ -0.48829,
48
+ 0.14128,
49
+ 0.01168
50
+ );
51
+ const windowNuttall = windowCosSum4(
52
+ 0.355768,
53
+ -0.487396,
54
+ 0.144232,
55
+ -0.012604
56
+ );
57
+ const windowBlackmanNuttall = windowCosSum4(
58
+ 0.3635819,
59
+ -0.4891775,
60
+ 0.1365995,
61
+ -0.0106411
62
+ );
63
+ const windowGauss = (a = 0.4) => (i, n) => {
64
+ n /= 2;
65
+ return Math.exp(-0.5 * ((i - n) / (a * n)) ** 2);
66
+ };
67
+ export {
68
+ applyWindow,
69
+ window,
70
+ windowBartlett,
71
+ windowBlackman,
72
+ windowBlackmanHarris,
73
+ windowBlackmanNuttall,
74
+ windowGauss,
75
+ windowHamming,
76
+ windowHann,
77
+ windowLanczos,
78
+ windowNuttall,
79
+ windowRect,
80
+ windowSin,
81
+ windowSinPow,
82
+ windowWelch
68
83
  };