limiter-audio-worklet-processor 1.1.41 → 1.1.43

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.
package/README.md CHANGED
@@ -2,5 +2,4 @@
2
2
 
3
3
  **The AudioWorkletProcessor which is used by the limiter-audio-worklet package.**
4
4
 
5
- [![dependencies](https://img.shields.io/david/chrisguttandin/limiter-audio-worklet-processor.svg?style=flat-square)](https://github.com/chrisguttandin/limiter-audio-worklet-processor/network/dependencies)
6
5
  [![version](https://img.shields.io/npm/v/limiter-audio-worklet-processor.svg?style=flat-square)](https://www.npmjs.com/package/limiter-audio-worklet-processor)
@@ -18,17 +18,14 @@
18
18
  var ConstantMemoryDeque = /*#__PURE__*/function () {
19
19
  function ConstantMemoryDeque(_buffer) {
20
20
  _classCallCheck__default["default"](this, ConstantMemoryDeque);
21
-
22
21
  this._buffer = _buffer;
23
22
  this._firstIndex = 0;
24
23
  this._isEmpty = true;
25
24
  this._lastIndex = 0;
26
-
27
25
  if (this._buffer.length === 0) {
28
26
  throw new Error('The given buffer is too small.');
29
27
  }
30
28
  }
31
-
32
29
  _createClass__default["default"](ConstantMemoryDeque, [{
33
30
  key: "size",
34
31
  get: function get() {
@@ -38,21 +35,18 @@
38
35
  key: "first",
39
36
  value: function first() {
40
37
  this._throwIfEmpty();
41
-
42
38
  return this._buffer[this._firstIndex];
43
39
  }
44
40
  }, {
45
41
  key: "last",
46
42
  value: function last() {
47
43
  this._throwIfEmpty();
48
-
49
44
  return this._buffer[this._lastIndex];
50
45
  }
51
46
  }, {
52
47
  key: "pop",
53
48
  value: function pop() {
54
49
  this._throwIfEmpty();
55
-
56
50
  if (this._firstIndex === this._lastIndex) {
57
51
  this._isEmpty = true;
58
52
  } else {
@@ -63,7 +57,6 @@
63
57
  key: "shift",
64
58
  value: function shift() {
65
59
  this._throwIfEmpty();
66
-
67
60
  if (this._firstIndex === this._lastIndex) {
68
61
  this._isEmpty = true;
69
62
  } else {
@@ -78,11 +71,9 @@
78
71
  this._isEmpty = false;
79
72
  } else {
80
73
  var nextIndex = this._decrementIndex(this._firstIndex);
81
-
82
74
  if (nextIndex === this._lastIndex) {
83
75
  throw new Error('Deque is full.');
84
76
  }
85
-
86
77
  this._buffer[nextIndex] = value;
87
78
  this._firstIndex = nextIndex;
88
79
  }
@@ -105,18 +96,15 @@
105
96
  }
106
97
  }
107
98
  }]);
108
-
109
99
  return ConstantMemoryDeque;
110
100
  }();
111
101
 
112
102
  var readFromRingBuffer = function readFromRingBuffer(target, source, offset) {
113
103
  var theoreticalNextOffset = offset + source.length;
114
-
115
104
  if (theoreticalNextOffset <= target.length) {
116
105
  source.set(new Float32Array(target.buffer, target.byteOffset + offset * source.BYTES_PER_ELEMENT, source.length));
117
106
  return theoreticalNextOffset === target.length ? 0 : theoreticalNextOffset;
118
107
  }
119
-
120
108
  var nextOffset = theoreticalNextOffset - target.length;
121
109
  var lengthOfFirstChunk = target.length - offset;
122
110
  source.set(new Float32Array(target.buffer, target.byteOffset + offset * source.BYTES_PER_ELEMENT, lengthOfFirstChunk));
@@ -126,12 +114,10 @@
126
114
 
127
115
  var writeToRingBuffer = function writeToRingBuffer(target, source, offset) {
128
116
  var theoreticalNextOffset = offset + source.length;
129
-
130
117
  if (theoreticalNextOffset <= target.length) {
131
118
  target.set(source, offset);
132
119
  return theoreticalNextOffset === target.length ? 0 : theoreticalNextOffset;
133
120
  }
134
-
135
121
  var nextOffset = theoreticalNextOffset - target.length;
136
122
  var lengthOfFirstChunk = target.length - offset;
137
123
  target.set(new Float32Array(source.buffer, source.byteOffset, lengthOfFirstChunk), offset);
@@ -140,36 +126,28 @@
140
126
  };
141
127
 
142
128
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
143
-
144
129
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
145
130
  var RELEASE_TIME_SECONDS = 0.5;
146
131
  var RELEASE_GAIN = Math.exp(-1 / (sampleRate * RELEASE_TIME_SECONDS));
147
132
  var THRESHOLD = Math.pow(10, -0.1);
148
-
149
133
  var computeEnvelope = function computeEnvelope(envelopeBuffer, delayBuffer, offset, constantMemoryDeque) {
150
134
  var previousEnvelopeValue = envelopeBuffer[127];
151
-
152
135
  for (var i = 0; i < 128; i += 1) {
153
136
  var readOffset = (offset + i) % delayBuffer.length;
154
137
  var absoluteValue = Math.abs(delayBuffer[readOffset]);
155
138
  var maximumValue = void 0;
156
139
  var remainingSteps = void 0;
157
-
158
140
  if (constantMemoryDeque !== null) {
159
141
  while (constantMemoryDeque.size > 0 && absoluteValue >= Math.abs(delayBuffer[constantMemoryDeque.first()])) {
160
142
  constantMemoryDeque.shift();
161
143
  }
162
-
163
144
  if (constantMemoryDeque.size === 0 || absoluteValue < Math.abs(delayBuffer[constantMemoryDeque.first()])) {
164
145
  constantMemoryDeque.unshift(readOffset);
165
146
  }
166
-
167
147
  var dropOffset = (offset + i + 128) % delayBuffer.length;
168
-
169
148
  if (constantMemoryDeque.last() === dropOffset) {
170
149
  constantMemoryDeque.pop();
171
150
  }
172
-
173
151
  var indexOfMaximum = constantMemoryDeque.last();
174
152
  maximumValue = Math.abs(delayBuffer[indexOfMaximum]);
175
153
  remainingSteps = indexOfMaximum < readOffset ? readOffset - indexOfMaximum + 1 : readOffset + delayBuffer.length - indexOfMaximum + 1;
@@ -177,62 +155,46 @@
177
155
  maximumValue = absoluteValue;
178
156
  remainingSteps = 1;
179
157
  }
180
-
181
158
  var difference = previousEnvelopeValue - maximumValue;
182
-
183
159
  if (previousEnvelopeValue < maximumValue) {
184
160
  previousEnvelopeValue = previousEnvelopeValue - difference / remainingSteps;
185
161
  } else {
186
162
  previousEnvelopeValue = maximumValue + RELEASE_GAIN * difference;
187
163
  }
188
-
189
164
  envelopeBuffer[i] = previousEnvelopeValue;
190
165
  }
191
166
  };
192
-
193
167
  var LimiterAudioWorkletProcessor = /*#__PURE__*/function (_AudioWorkletProcesso) {
194
168
  _inherits__default["default"](LimiterAudioWorkletProcessor, _AudioWorkletProcesso);
195
-
196
169
  var _super = _createSuper(LimiterAudioWorkletProcessor);
197
-
198
170
  function LimiterAudioWorkletProcessor(_ref) {
199
171
  var _this;
200
-
201
172
  var channelCount = _ref.channelCount,
202
- channelCountMode = _ref.channelCountMode,
203
- numberOfInputs = _ref.numberOfInputs,
204
- numberOfOutputs = _ref.numberOfOutputs,
205
- outputChannelCount = _ref.outputChannelCount,
206
- processorOptions = _ref.processorOptions;
207
-
173
+ channelCountMode = _ref.channelCountMode,
174
+ numberOfInputs = _ref.numberOfInputs,
175
+ numberOfOutputs = _ref.numberOfOutputs,
176
+ outputChannelCount = _ref.outputChannelCount,
177
+ processorOptions = _ref.processorOptions;
208
178
  _classCallCheck__default["default"](this, LimiterAudioWorkletProcessor);
209
-
210
179
  var attack = _typeof__default["default"](processorOptions) === 'object' && processorOptions !== null && 'attack' in processorOptions ? processorOptions.attack : 0;
211
-
212
180
  if (typeof attack !== 'number') {
213
181
  throw new Error('The attack needs to be of type "number".');
214
182
  }
215
-
216
183
  if (attack < 0) {
217
184
  throw new Error("The attack can't be negative.");
218
185
  }
219
-
220
186
  if (channelCountMode !== 'explicit') {
221
187
  throw new Error('The channelCountMode needs to be "explicit".');
222
188
  }
223
-
224
189
  if (numberOfInputs !== 1) {
225
190
  throw new Error('The numberOfInputs must be 1.');
226
191
  }
227
-
228
192
  if (numberOfOutputs !== 1) {
229
193
  throw new Error('The numberOfOutputs must be 1.');
230
194
  }
231
-
232
195
  if (outputChannelCount === undefined || channelCount !== outputChannelCount[0]) {
233
196
  throw new Error('The channelCount must be the same as the outputChannelCount of the first output.');
234
197
  }
235
-
236
198
  _this = _super.call(this);
237
199
  var attackSamples = sampleRate * attack;
238
200
  var delaySize = Math.round(attackSamples);
@@ -255,19 +217,15 @@
255
217
  _this._writeOffset = 0;
256
218
  return _this;
257
219
  }
258
-
259
220
  _createClass__default["default"](LimiterAudioWorkletProcessor, [{
260
221
  key: "process",
261
222
  value: function process(_ref2, _ref3) {
262
223
  var _ref4 = _slicedToArray__default["default"](_ref2, 1),
263
- input = _ref4[0];
264
-
224
+ input = _ref4[0];
265
225
  var _ref5 = _slicedToArray__default["default"](_ref3, 1),
266
- output = _ref5[0];
267
-
226
+ output = _ref5[0];
268
227
  var numberOfChannels = input.length;
269
228
  var writeOffset = this._writeOffset;
270
-
271
229
  for (var channel = 0; channel < numberOfChannels; channel += 1) {
272
230
  var constantMemoryDeque = this._constantMemoryDeques === null ? null : this._constantMemoryDeques[channel];
273
231
  var delayBuffer = this._delayBuffers[channel];
@@ -277,17 +235,14 @@
277
235
  this._writeOffset = writeToRingBuffer(delayBuffer, inputChannelData, writeOffset);
278
236
  computeEnvelope(envelopeBuffer, delayBuffer, writeOffset, constantMemoryDeque);
279
237
  readFromRingBuffer(delayBuffer, outputChannelData, this._writeOffset);
280
-
281
238
  for (var i = 0; i < 128; i += 1) {
282
239
  var gain = Math.min(1, THRESHOLD / envelopeBuffer[i]);
283
240
  outputChannelData[i] *= gain;
284
241
  }
285
242
  }
286
-
287
243
  return true;
288
244
  }
289
245
  }]);
290
-
291
246
  return LimiterAudioWorkletProcessor;
292
247
  }( /*#__PURE__*/_wrapNativeSuper__default["default"](AudioWorkletProcessor));
293
248
  LimiterAudioWorkletProcessor.parameterDescriptors = [];
package/package.json CHANGED
@@ -9,28 +9,28 @@
9
9
  }
10
10
  },
11
11
  "dependencies": {
12
- "@babel/runtime": "^7.18.9",
12
+ "@babel/runtime": "^7.19.4",
13
13
  "tslib": "^2.4.0"
14
14
  },
15
15
  "description": "The AudioWorkletProcessor which is used by the limiter-audio-worklet package.",
16
16
  "devDependencies": {
17
- "@babel/core": "^7.18.10",
17
+ "@babel/core": "^7.19.6",
18
18
  "@babel/plugin-external-helpers": "^7.18.6",
19
- "@babel/plugin-transform-runtime": "^7.18.10",
20
- "@babel/preset-env": "^7.18.10",
21
- "@commitlint/cli": "^17.0.3",
22
- "@commitlint/config-angular": "^17.0.3",
19
+ "@babel/plugin-transform-runtime": "^7.19.6",
20
+ "@babel/preset-env": "^7.19.4",
21
+ "@commitlint/cli": "^17.1.2",
22
+ "@commitlint/config-angular": "^17.1.0",
23
23
  "@rollup/plugin-babel": "^5.3.1",
24
24
  "chai": "^4.3.6",
25
25
  "commitizen": "^4.2.5",
26
26
  "cz-conventional-changelog": "^3.3.0",
27
- "eslint": "^8.21.0",
28
- "eslint-config-holy-grail": "^52.0.24",
27
+ "eslint": "^8.26.0",
28
+ "eslint-config-holy-grail": "^52.0.33",
29
29
  "grunt": "^1.5.3",
30
30
  "grunt-cli": "^1.4.3",
31
31
  "grunt-sh": "^0.2.0",
32
32
  "husky": "^8.0.1",
33
- "karma": "^6.4.0",
33
+ "karma": "^6.4.1",
34
34
  "karma-chrome-launcher": "^3.1.1",
35
35
  "karma-cli": "^2.0.0",
36
36
  "karma-firefox-launcher": "^2.1.2",
@@ -42,19 +42,19 @@
42
42
  "karma-webpack": "^5.0.0",
43
43
  "load-grunt-config": "^4.0.1",
44
44
  "memory-fs": "^0.5.0",
45
- "mocha": "^10.0.0",
45
+ "mocha": "^10.1.0",
46
46
  "prettier": "^2.7.1",
47
47
  "pretty-quick": "^3.1.3",
48
48
  "rimraf": "^3.0.2",
49
- "rollup": "^2.77.2",
50
- "sinon": "^14.0.0",
49
+ "rollup": "^2.79.1",
50
+ "sinon": "^14.0.1",
51
51
  "sinon-chai": "^3.7.0",
52
- "standardized-audio-context": "^25.3.29",
53
- "ts-loader": "^9.3.1",
54
- "tsconfig-holy-grail": "^11.1.34",
52
+ "standardized-audio-context": "^25.3.33",
53
+ "ts-loader": "^9.4.1",
54
+ "tsconfig-holy-grail": "^11.1.36",
55
55
  "tslint": "^6.1.3",
56
- "tslint-config-holy-grail": "^53.2.30",
57
- "typescript": "^4.7.4",
56
+ "tslint-config-holy-grail": "^53.2.33",
57
+ "typescript": "^4.8.4",
58
58
  "webpack": "^5.74.0"
59
59
  },
60
60
  "files": [
@@ -77,5 +77,5 @@
77
77
  "test": "grunt lint && grunt test"
78
78
  },
79
79
  "types": "build/es2019/module.d.ts",
80
- "version": "1.1.41"
80
+ "version": "1.1.43"
81
81
  }