wavesurfer.js 6.3.0 → 6.5.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.
- package/LICENSE +1 -1
- package/README.md +36 -47
- package/dist/plugin/wavesurfer.cursor.js +45 -54
- package/dist/plugin/wavesurfer.cursor.js.map +1 -1
- package/dist/plugin/wavesurfer.cursor.min.js +2 -2
- package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.js +24 -51
- package/dist/plugin/wavesurfer.elan.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.min.js +2 -2
- package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.js +62 -74
- package/dist/plugin/wavesurfer.markers.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.min.js +2 -2
- package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.js +8 -16
- package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
- package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.js +48 -63
- package/dist/plugin/wavesurfer.microphone.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.min.js +2 -2
- package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.js +20 -69
- package/dist/plugin/wavesurfer.minimap.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.min.js +2 -2
- package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.js +6 -30
- package/dist/plugin/wavesurfer.playhead.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.min.js +2 -2
- package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.js +203 -260
- package/dist/plugin/wavesurfer.regions.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.min.js +2 -2
- package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.js +55 -147
- package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
- package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.js +53 -88
- package/dist/plugin/wavesurfer.timeline.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.min.js +2 -2
- package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
- package/dist/wavesurfer-html-init.js +34 -54
- package/dist/wavesurfer-html-init.js.map +1 -1
- package/dist/wavesurfer-html-init.min.js +2 -2
- package/dist/wavesurfer-html-init.min.js.map +1 -1
- package/dist/wavesurfer.js +490 -1003
- package/dist/wavesurfer.js.map +1 -1
- package/dist/wavesurfer.min.js +2 -2
- package/dist/wavesurfer.min.js.map +1 -1
- package/package.json +11 -11
- package/src/mediaelement.js +3 -0
- package/src/plugin/cursor/index.js +15 -3
- package/src/plugin/markers/index.js +40 -1
- package/src/plugin/regions/index.js +4 -0
- package/src/plugin/regions/region.js +76 -1
- package/src/util/silence-mode.js +7 -0
- package/src/wavesurfer.js +4 -0
- package/CHANGES.md +0 -482
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js microphone plugin 6.
|
|
2
|
+
* wavesurfer.js microphone plugin 6.5.0 (2023-03-11)
|
|
3
3
|
* https://wavesurfer-js.org
|
|
4
4
|
* @license BSD-3-Clause
|
|
5
5
|
*/
|
|
@@ -29,13 +29,12 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
29
29
|
value: true
|
|
30
30
|
}));
|
|
31
31
|
exports["default"] = void 0;
|
|
32
|
-
|
|
32
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
33
33
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
34
|
-
|
|
35
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
36
|
-
|
|
34
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
37
35
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
38
|
-
|
|
36
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
37
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
39
38
|
/**
|
|
40
39
|
* @typedef {Object} MicrophonePluginParams
|
|
41
40
|
* @property {MediaStreamConstraints} constraints The constraints parameter is a
|
|
@@ -51,7 +50,6 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
51
50
|
* @property {?boolean} deferInit Set to true to manually call
|
|
52
51
|
* `initPlugin('microphone')`
|
|
53
52
|
*/
|
|
54
|
-
|
|
55
53
|
/**
|
|
56
54
|
* Visualize microphone input in a wavesurfer instance.
|
|
57
55
|
*
|
|
@@ -80,50 +78,43 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
80
78
|
var MicrophonePlugin = /*#__PURE__*/function () {
|
|
81
79
|
function MicrophonePlugin(params, ws) {
|
|
82
80
|
var _this = this;
|
|
83
|
-
|
|
84
81
|
_classCallCheck(this, MicrophonePlugin);
|
|
85
|
-
|
|
86
82
|
this.params = params;
|
|
87
83
|
this.wavesurfer = ws;
|
|
88
84
|
this.active = false;
|
|
89
85
|
this.paused = false;
|
|
90
86
|
this.browser = this.detectBrowser();
|
|
91
|
-
|
|
92
87
|
this.reloadBufferFunction = function (e) {
|
|
93
88
|
return _this.reloadBuffer(e);
|
|
94
|
-
};
|
|
95
|
-
|
|
89
|
+
};
|
|
96
90
|
|
|
91
|
+
// cross-browser getUserMedia
|
|
97
92
|
var promisifiedOldGUM = function promisifiedOldGUM(constraints, successCallback, errorCallback) {
|
|
98
93
|
// get a hold of getUserMedia, if present
|
|
99
|
-
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
|
|
94
|
+
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
|
|
95
|
+
// Some browsers just don't implement it - return a rejected
|
|
100
96
|
// promise with an error to keep a consistent interface
|
|
101
|
-
|
|
102
97
|
if (!getUserMedia) {
|
|
103
98
|
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
|
|
104
|
-
}
|
|
99
|
+
}
|
|
100
|
+
// otherwise, wrap the call to the old navigator.getUserMedia with
|
|
105
101
|
// a Promise
|
|
106
|
-
|
|
107
|
-
|
|
108
102
|
return new Promise(function (successCallback, errorCallback) {
|
|
109
103
|
getUserMedia.call(navigator, constraints, successCallback, errorCallback);
|
|
110
104
|
});
|
|
111
|
-
};
|
|
105
|
+
};
|
|
106
|
+
// Older browsers might not implement mediaDevices at all, so we set an
|
|
112
107
|
// empty object first
|
|
113
|
-
|
|
114
|
-
|
|
115
108
|
if (navigator.mediaDevices === undefined) {
|
|
116
109
|
navigator.mediaDevices = {};
|
|
117
|
-
}
|
|
110
|
+
}
|
|
111
|
+
// Some browsers partially implement mediaDevices. We can't just assign
|
|
118
112
|
// an object with getUserMedia as it would overwrite existing
|
|
119
113
|
// properties. Here, we will just add the getUserMedia property if it's
|
|
120
114
|
// missing.
|
|
121
|
-
|
|
122
|
-
|
|
123
115
|
if (navigator.mediaDevices.getUserMedia === undefined) {
|
|
124
116
|
navigator.mediaDevices.getUserMedia = promisifiedOldGUM;
|
|
125
117
|
}
|
|
126
|
-
|
|
127
118
|
this.constraints = this.params.constraints || {
|
|
128
119
|
video: false,
|
|
129
120
|
audio: true
|
|
@@ -131,26 +122,23 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
131
122
|
this.bufferSize = this.params.bufferSize || 4096;
|
|
132
123
|
this.numberOfInputChannels = this.params.numberOfInputChannels || 1;
|
|
133
124
|
this.numberOfOutputChannels = this.params.numberOfOutputChannels || 1;
|
|
134
|
-
|
|
135
125
|
this._onBackendCreated = function () {
|
|
136
126
|
// wavesurfer's AudioContext where we'll route the mic signal to
|
|
137
127
|
_this.micContext = _this.wavesurfer.backend.getAudioContext();
|
|
138
128
|
};
|
|
139
129
|
}
|
|
140
|
-
|
|
141
130
|
_createClass(MicrophonePlugin, [{
|
|
142
131
|
key: "init",
|
|
143
132
|
value: function init() {
|
|
144
133
|
this.wavesurfer.on('backend-created', this._onBackendCreated);
|
|
145
|
-
|
|
146
134
|
if (this.wavesurfer.backend) {
|
|
147
135
|
this._onBackendCreated();
|
|
148
136
|
}
|
|
149
137
|
}
|
|
138
|
+
|
|
150
139
|
/**
|
|
151
140
|
* Destroy the microphone plugin.
|
|
152
141
|
*/
|
|
153
|
-
|
|
154
142
|
}, {
|
|
155
143
|
key: "destroy",
|
|
156
144
|
value: function destroy() {
|
|
@@ -160,26 +148,25 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
160
148
|
this.wavesurfer.un('backend-created', this._onBackendCreated);
|
|
161
149
|
this.stop();
|
|
162
150
|
}
|
|
151
|
+
|
|
163
152
|
/**
|
|
164
153
|
* Allow user to select audio input device, e.g. microphone, and
|
|
165
154
|
* start the visualization.
|
|
166
155
|
*/
|
|
167
|
-
|
|
168
156
|
}, {
|
|
169
157
|
key: "start",
|
|
170
158
|
value: function start() {
|
|
171
159
|
var _this2 = this;
|
|
172
|
-
|
|
173
160
|
navigator.mediaDevices.getUserMedia(this.constraints).then(function (data) {
|
|
174
161
|
return _this2.gotStream(data);
|
|
175
162
|
}).catch(function (data) {
|
|
176
163
|
return _this2.deviceError(data);
|
|
177
164
|
});
|
|
178
165
|
}
|
|
166
|
+
|
|
179
167
|
/**
|
|
180
168
|
* Pause/resume visualization.
|
|
181
169
|
*/
|
|
182
|
-
|
|
183
170
|
}, {
|
|
184
171
|
key: "togglePlay",
|
|
185
172
|
value: function togglePlay() {
|
|
@@ -189,7 +176,6 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
189
176
|
} else {
|
|
190
177
|
// toggle paused
|
|
191
178
|
this.paused = !this.paused;
|
|
192
|
-
|
|
193
179
|
if (this.paused) {
|
|
194
180
|
this.pause();
|
|
195
181
|
} else {
|
|
@@ -197,64 +183,68 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
197
183
|
}
|
|
198
184
|
}
|
|
199
185
|
}
|
|
186
|
+
|
|
200
187
|
/**
|
|
201
188
|
* Play visualization.
|
|
202
189
|
*/
|
|
203
|
-
|
|
204
190
|
}, {
|
|
205
191
|
key: "play",
|
|
206
192
|
value: function play() {
|
|
207
193
|
this.paused = false;
|
|
208
194
|
this.connect();
|
|
209
195
|
}
|
|
196
|
+
|
|
210
197
|
/**
|
|
211
198
|
* Pause visualization.
|
|
212
199
|
*/
|
|
213
|
-
|
|
214
200
|
}, {
|
|
215
201
|
key: "pause",
|
|
216
202
|
value: function pause() {
|
|
217
|
-
this.paused = true;
|
|
218
|
-
// (eg. during audio playback)
|
|
203
|
+
this.paused = true;
|
|
219
204
|
|
|
205
|
+
// disconnect sources so they can be used elsewhere
|
|
206
|
+
// (eg. during audio playback)
|
|
220
207
|
this.disconnect();
|
|
221
208
|
}
|
|
209
|
+
|
|
222
210
|
/**
|
|
223
211
|
* Stop the device stream and remove any remaining waveform drawing from
|
|
224
212
|
* the wavesurfer canvas.
|
|
225
213
|
*/
|
|
226
|
-
|
|
227
214
|
}, {
|
|
228
215
|
key: "stop",
|
|
229
216
|
value: function stop() {
|
|
230
217
|
if (this.active) {
|
|
231
218
|
// stop visualization and device
|
|
232
|
-
this.stopDevice();
|
|
219
|
+
this.stopDevice();
|
|
233
220
|
|
|
221
|
+
// empty last frame
|
|
234
222
|
this.wavesurfer.empty();
|
|
235
223
|
}
|
|
236
224
|
}
|
|
225
|
+
|
|
237
226
|
/**
|
|
238
227
|
* Stop the device and the visualization.
|
|
239
228
|
*/
|
|
240
|
-
|
|
241
229
|
}, {
|
|
242
230
|
key: "stopDevice",
|
|
243
231
|
value: function stopDevice() {
|
|
244
|
-
this.active = false;
|
|
232
|
+
this.active = false;
|
|
245
233
|
|
|
246
|
-
|
|
234
|
+
// stop visualization
|
|
235
|
+
this.disconnect();
|
|
247
236
|
|
|
237
|
+
// stop stream from device
|
|
248
238
|
if (this.stream && this.stream.getTracks) {
|
|
249
239
|
this.stream.getTracks().forEach(function (stream) {
|
|
250
240
|
return stream.stop();
|
|
251
241
|
});
|
|
252
242
|
}
|
|
253
243
|
}
|
|
244
|
+
|
|
254
245
|
/**
|
|
255
246
|
* Connect the media sources that feed the visualization.
|
|
256
247
|
*/
|
|
257
|
-
|
|
258
248
|
}, {
|
|
259
249
|
key: "connect",
|
|
260
250
|
value: function connect() {
|
|
@@ -262,9 +252,9 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
262
252
|
// Create a local buffer for data to be copied to the Wavesurfer buffer for Edge
|
|
263
253
|
if (this.browser.browser === 'edge') {
|
|
264
254
|
this.localAudioBuffer = this.micContext.createBuffer(this.numberOfInputChannels, this.bufferSize, this.micContext.sampleRate);
|
|
265
|
-
}
|
|
266
|
-
|
|
255
|
+
}
|
|
267
256
|
|
|
257
|
+
// Create an AudioNode from the stream.
|
|
268
258
|
this.mediaStreamSource = this.micContext.createMediaStreamSource(this.stream);
|
|
269
259
|
this.levelChecker = this.micContext.createScriptProcessor(this.bufferSize, this.numberOfInputChannels, this.numberOfOutputChannels);
|
|
270
260
|
this.mediaStreamSource.connect(this.levelChecker);
|
|
@@ -272,81 +262,79 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
272
262
|
this.levelChecker.onaudioprocess = this.reloadBufferFunction;
|
|
273
263
|
}
|
|
274
264
|
}
|
|
265
|
+
|
|
275
266
|
/**
|
|
276
267
|
* Disconnect the media sources that feed the visualization.
|
|
277
268
|
*/
|
|
278
|
-
|
|
279
269
|
}, {
|
|
280
270
|
key: "disconnect",
|
|
281
271
|
value: function disconnect() {
|
|
282
272
|
if (this.mediaStreamSource !== undefined) {
|
|
283
273
|
this.mediaStreamSource.disconnect();
|
|
284
274
|
}
|
|
285
|
-
|
|
286
275
|
if (this.levelChecker !== undefined) {
|
|
287
276
|
this.levelChecker.disconnect();
|
|
288
277
|
this.levelChecker.onaudioprocess = undefined;
|
|
289
278
|
}
|
|
290
|
-
|
|
291
279
|
if (this.localAudioBuffer !== undefined) {
|
|
292
280
|
this.localAudioBuffer = undefined;
|
|
293
281
|
}
|
|
294
282
|
}
|
|
283
|
+
|
|
295
284
|
/**
|
|
296
285
|
* Redraw the waveform.
|
|
297
286
|
*
|
|
298
287
|
* @param {object} event Audioprocess event
|
|
299
288
|
*/
|
|
300
|
-
|
|
301
289
|
}, {
|
|
302
290
|
key: "reloadBuffer",
|
|
303
291
|
value: function reloadBuffer(event) {
|
|
304
292
|
if (!this.paused) {
|
|
305
293
|
this.wavesurfer.empty();
|
|
306
|
-
|
|
307
294
|
if (this.browser.browser === 'edge') {
|
|
308
295
|
// copy audio data to a local audio buffer,
|
|
309
296
|
// from https://github.com/audiojs/audio-buffer-utils
|
|
310
297
|
var channel, l;
|
|
311
|
-
|
|
312
298
|
for (channel = 0, l = Math.min(this.localAudioBuffer.numberOfChannels, event.inputBuffer.numberOfChannels); channel < l; channel++) {
|
|
313
299
|
this.localAudioBuffer.getChannelData(channel).set(event.inputBuffer.getChannelData(channel));
|
|
314
300
|
}
|
|
315
|
-
|
|
316
301
|
this.wavesurfer.loadDecodedBuffer(this.localAudioBuffer);
|
|
317
302
|
} else {
|
|
318
303
|
this.wavesurfer.loadDecodedBuffer(event.inputBuffer);
|
|
319
304
|
}
|
|
320
305
|
}
|
|
321
306
|
}
|
|
307
|
+
|
|
322
308
|
/**
|
|
323
309
|
* Audio input device is ready.
|
|
324
310
|
*
|
|
325
311
|
* @param {MediaStream} stream The microphone's media stream.
|
|
326
312
|
*/
|
|
327
|
-
|
|
328
313
|
}, {
|
|
329
314
|
key: "gotStream",
|
|
330
315
|
value: function gotStream(stream) {
|
|
331
316
|
this.stream = stream;
|
|
332
|
-
this.active = true;
|
|
317
|
+
this.active = true;
|
|
333
318
|
|
|
334
|
-
|
|
319
|
+
// start visualization
|
|
320
|
+
this.play();
|
|
335
321
|
|
|
322
|
+
// notify listeners
|
|
336
323
|
this.fireEvent('deviceReady', stream);
|
|
337
324
|
}
|
|
325
|
+
|
|
338
326
|
/**
|
|
339
327
|
* Device error callback.
|
|
340
328
|
*
|
|
341
329
|
* @param {string} code Error message
|
|
342
330
|
*/
|
|
343
|
-
|
|
344
331
|
}, {
|
|
345
332
|
key: "deviceError",
|
|
346
333
|
value: function deviceError(code) {
|
|
347
334
|
// notify listeners
|
|
348
335
|
this.fireEvent('deviceError', code);
|
|
349
336
|
}
|
|
337
|
+
|
|
350
338
|
/**
|
|
351
339
|
* Extract browser version out of the provided user agent string.
|
|
352
340
|
* @param {!string} uastring userAgent string.
|
|
@@ -354,19 +342,18 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
354
342
|
* @param {!number} pos position in the version string to be returned.
|
|
355
343
|
* @return {!number} browser version.
|
|
356
344
|
*/
|
|
357
|
-
|
|
358
345
|
}, {
|
|
359
346
|
key: "extractVersion",
|
|
360
347
|
value: function extractVersion(uastring, expr, pos) {
|
|
361
348
|
var match = uastring.match(expr);
|
|
362
349
|
return match && match.length >= pos && parseInt(match[pos], 10);
|
|
363
350
|
}
|
|
351
|
+
|
|
364
352
|
/**
|
|
365
353
|
* Browser detector.
|
|
366
354
|
* @return {object} result containing browser, version and minVersion
|
|
367
355
|
* properties.
|
|
368
356
|
*/
|
|
369
|
-
|
|
370
357
|
}, {
|
|
371
358
|
key: "detectBrowser",
|
|
372
359
|
value: function detectBrowser() {
|
|
@@ -374,13 +361,13 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
374
361
|
var result = {};
|
|
375
362
|
result.browser = null;
|
|
376
363
|
result.version = null;
|
|
377
|
-
result.minVersion = null;
|
|
364
|
+
result.minVersion = null;
|
|
378
365
|
|
|
366
|
+
// Non supported browser.
|
|
379
367
|
if (typeof window === 'undefined' || !window.navigator) {
|
|
380
368
|
result.browser = 'Not a supported browser.';
|
|
381
369
|
return result;
|
|
382
370
|
}
|
|
383
|
-
|
|
384
371
|
if (navigator.mozGetUserMedia) {
|
|
385
372
|
// Firefox
|
|
386
373
|
result.browser = 'firefox';
|
|
@@ -405,9 +392,9 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
405
392
|
result.minVersion = 11;
|
|
406
393
|
result.version = this.extractVersion(navigator.userAgent, /AppleWebKit\/(\d+)\./, 1);
|
|
407
394
|
return result;
|
|
408
|
-
}
|
|
409
|
-
|
|
395
|
+
}
|
|
410
396
|
|
|
397
|
+
// Non supported browser default.
|
|
411
398
|
result.browser = 'Not a supported browser.';
|
|
412
399
|
return result;
|
|
413
400
|
}
|
|
@@ -432,10 +419,8 @@ var MicrophonePlugin = /*#__PURE__*/function () {
|
|
|
432
419
|
};
|
|
433
420
|
}
|
|
434
421
|
}]);
|
|
435
|
-
|
|
436
422
|
return MicrophonePlugin;
|
|
437
423
|
}();
|
|
438
|
-
|
|
439
424
|
exports["default"] = MicrophonePlugin;
|
|
440
425
|
module.exports = exports.default;
|
|
441
426
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wavesurfer.microphone.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/microphone/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"microphone\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} MicrophonePluginParams\n * @property {MediaStreamConstraints} constraints The constraints parameter is a\n * MediaStreamConstaints object with two members: video and audio, describing\n * the media types requested. Either or both must be specified.\n * @property {number} bufferSize=4096 The buffer size in units of sample-frames.\n * If specified, the bufferSize must be one of the following values: `256`,\n * `512`, `1024`, `2048`, `4096`, `8192`, `16384`\n * @property {number} numberOfInputChannels=1 Integer specifying the number of\n * channels for this node's input. Values of up to 32 are supported.\n * @property {number} numberOfOutputChannels=1 Integer specifying the number of\n * channels for this node's output.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('microphone')`\n */\n\n/**\n * Visualize microphone input in a wavesurfer instance.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import MicrophonePlugin from 'wavesurfer.microphone.js';\n *\n * // commonjs\n * var MicrophonePlugin = require('wavesurfer.microphone.js');\n *\n * // if you are using <script> tags\n * var MicrophonePlugin = window.WaveSurfer.microphone;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * MicrophonePlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class MicrophonePlugin {\n /**\n * Microphone plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {MicrophonePluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'microphone',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: MicrophonePlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n\n this.active = false;\n this.paused = false;\n this.browser = this.detectBrowser();\n this.reloadBufferFunction = e => this.reloadBuffer(e);\n\n // cross-browser getUserMedia\n const promisifiedOldGUM = (\n constraints,\n successCallback,\n errorCallback\n ) => {\n // get a hold of getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia;\n // Some browsers just don't implement it - return a rejected\n // promise with an error to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n );\n }\n // otherwise, wrap the call to the old navigator.getUserMedia with\n // a Promise\n return new Promise((successCallback, errorCallback) => {\n getUserMedia.call(\n navigator,\n constraints,\n successCallback,\n errorCallback\n );\n });\n };\n // Older browsers might not implement mediaDevices at all, so we set an\n // empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {};\n }\n // Some browsers partially implement mediaDevices. We can't just assign\n // an object with getUserMedia as it would overwrite existing\n // properties. Here, we will just add the getUserMedia property if it's\n // missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = promisifiedOldGUM;\n }\n this.constraints = this.params.constraints || {\n video: false,\n audio: true\n };\n this.bufferSize = this.params.bufferSize || 4096;\n this.numberOfInputChannels = this.params.numberOfInputChannels || 1;\n this.numberOfOutputChannels = this.params.numberOfOutputChannels || 1;\n\n this._onBackendCreated = () => {\n // wavesurfer's AudioContext where we'll route the mic signal to\n this.micContext = this.wavesurfer.backend.getAudioContext();\n };\n }\n\n init() {\n this.wavesurfer.on('backend-created', this._onBackendCreated);\n if (this.wavesurfer.backend) {\n this._onBackendCreated();\n }\n }\n\n /**\n * Destroy the microphone plugin.\n */\n destroy() {\n // make sure the buffer is not redrawn during\n // cleanup and demolition of this plugin.\n this.paused = true;\n\n this.wavesurfer.un('backend-created', this._onBackendCreated);\n this.stop();\n }\n\n /**\n * Allow user to select audio input device, e.g. microphone, and\n * start the visualization.\n */\n start() {\n navigator.mediaDevices\n .getUserMedia(this.constraints)\n .then(data => this.gotStream(data))\n .catch(data => this.deviceError(data));\n }\n\n /**\n * Pause/resume visualization.\n */\n togglePlay() {\n if (!this.active) {\n // start it first\n this.start();\n } else {\n // toggle paused\n this.paused = !this.paused;\n\n if (this.paused) {\n this.pause();\n } else {\n this.play();\n }\n }\n }\n\n /**\n * Play visualization.\n */\n play() {\n this.paused = false;\n\n this.connect();\n }\n\n /**\n * Pause visualization.\n */\n pause() {\n this.paused = true;\n\n // disconnect sources so they can be used elsewhere\n // (eg. during audio playback)\n this.disconnect();\n }\n\n /**\n * Stop the device stream and remove any remaining waveform drawing from\n * the wavesurfer canvas.\n */\n stop() {\n if (this.active) {\n // stop visualization and device\n this.stopDevice();\n\n // empty last frame\n this.wavesurfer.empty();\n }\n }\n\n /**\n * Stop the device and the visualization.\n */\n stopDevice() {\n this.active = false;\n\n // stop visualization\n this.disconnect();\n\n // stop stream from device\n if (this.stream && this.stream.getTracks) {\n this.stream.getTracks().forEach(stream => stream.stop());\n }\n }\n\n /**\n * Connect the media sources that feed the visualization.\n */\n connect() {\n if (this.stream !== undefined) {\n // Create a local buffer for data to be copied to the Wavesurfer buffer for Edge\n if (this.browser.browser === 'edge') {\n this.localAudioBuffer = this.micContext.createBuffer(\n this.numberOfInputChannels,\n this.bufferSize,\n this.micContext.sampleRate\n );\n }\n\n // Create an AudioNode from the stream.\n this.mediaStreamSource = this.micContext.createMediaStreamSource(\n this.stream\n );\n\n this.levelChecker = this.micContext.createScriptProcessor(\n this.bufferSize,\n this.numberOfInputChannels,\n this.numberOfOutputChannels\n );\n this.mediaStreamSource.connect(this.levelChecker);\n\n this.levelChecker.connect(this.micContext.destination);\n this.levelChecker.onaudioprocess = this.reloadBufferFunction;\n }\n }\n\n /**\n * Disconnect the media sources that feed the visualization.\n */\n disconnect() {\n if (this.mediaStreamSource !== undefined) {\n this.mediaStreamSource.disconnect();\n }\n\n if (this.levelChecker !== undefined) {\n this.levelChecker.disconnect();\n this.levelChecker.onaudioprocess = undefined;\n }\n\n if (this.localAudioBuffer !== undefined) {\n this.localAudioBuffer = undefined;\n }\n }\n\n /**\n * Redraw the waveform.\n *\n * @param {object} event Audioprocess event\n */\n reloadBuffer(event) {\n if (!this.paused) {\n this.wavesurfer.empty();\n\n if (this.browser.browser === 'edge') {\n // copy audio data to a local audio buffer,\n // from https://github.com/audiojs/audio-buffer-utils\n let channel, l;\n for (\n channel = 0,\n l = Math.min(\n this.localAudioBuffer.numberOfChannels,\n event.inputBuffer.numberOfChannels\n );\n channel < l;\n channel++\n ) {\n this.localAudioBuffer\n .getChannelData(channel)\n .set(event.inputBuffer.getChannelData(channel));\n }\n\n this.wavesurfer.loadDecodedBuffer(this.localAudioBuffer);\n } else {\n this.wavesurfer.loadDecodedBuffer(event.inputBuffer);\n }\n }\n }\n\n /**\n * Audio input device is ready.\n *\n * @param {MediaStream} stream The microphone's media stream.\n */\n gotStream(stream) {\n this.stream = stream;\n this.active = true;\n\n // start visualization\n this.play();\n\n // notify listeners\n this.fireEvent('deviceReady', stream);\n }\n\n /**\n * Device error callback.\n *\n * @param {string} code Error message\n */\n deviceError(code) {\n // notify listeners\n this.fireEvent('deviceError', code);\n }\n\n /**\n * Extract browser version out of the provided user agent string.\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\n extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n }\n\n /**\n * Browser detector.\n * @return {object} result containing browser, version and minVersion\n * properties.\n */\n detectBrowser() {\n // Returned result object.\n const result = {};\n result.browser = null;\n result.version = null;\n result.minVersion = null;\n\n // Non supported browser.\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n if (navigator.mozGetUserMedia) {\n // Firefox\n result.browser = 'firefox';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Firefox\\/(\\d+)\\./,\n 1\n );\n result.minVersion = 31;\n return result;\n } else if (navigator.webkitGetUserMedia) {\n // Chrome/Chromium/Webview/Opera\n result.browser = 'chrome';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./,\n 2\n );\n result.minVersion = 38;\n return result;\n } else if (\n navigator.mediaDevices &&\n navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)\n ) {\n // Edge\n result.browser = 'edge';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Edge\\/(\\d+).(\\d+)$/,\n 2\n );\n result.minVersion = 10547;\n return result;\n } else if (\n window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)\n ) {\n // Safari\n result.browser = 'safari';\n result.minVersion = 11;\n result.version = this.extractVersion(\n navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./,\n 1\n );\n return result;\n }\n\n // Non supported browser default.\n result.browser = 'Not a supported browser.';\n return result;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/microphone/index.js\");\n",""],"names":["MicrophonePlugin","params","ws","wavesurfer","active","paused","browser","detectBrowser","reloadBufferFunction","e","reloadBuffer","promisifiedOldGUM","constraints","successCallback","errorCallback","getUserMedia","navigator","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","Promise","reject","Error","call","mediaDevices","undefined","video","audio","bufferSize","numberOfInputChannels","numberOfOutputChannels","_onBackendCreated","micContext","backend","getAudioContext","on","un","stop","then","data","gotStream","catch","deviceError","start","pause","play","connect","disconnect","stopDevice","empty","stream","getTracks","forEach","localAudioBuffer","createBuffer","sampleRate","mediaStreamSource","createMediaStreamSource","levelChecker","createScriptProcessor","destination","onaudioprocess","event","channel","l","Math","min","numberOfChannels","inputBuffer","getChannelData","set","loadDecodedBuffer","fireEvent","code","uastring","expr","pos","match","length","parseInt","result","version","minVersion","window","extractVersion","userAgent","RTCPeerConnection","name","deferInit","instance"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"wavesurfer.microphone.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/microphone/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"microphone\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} MicrophonePluginParams\n * @property {MediaStreamConstraints} constraints The constraints parameter is a\n * MediaStreamConstaints object with two members: video and audio, describing\n * the media types requested. Either or both must be specified.\n * @property {number} bufferSize=4096 The buffer size in units of sample-frames.\n * If specified, the bufferSize must be one of the following values: `256`,\n * `512`, `1024`, `2048`, `4096`, `8192`, `16384`\n * @property {number} numberOfInputChannels=1 Integer specifying the number of\n * channels for this node's input. Values of up to 32 are supported.\n * @property {number} numberOfOutputChannels=1 Integer specifying the number of\n * channels for this node's output.\n * @property {?boolean} deferInit Set to true to manually call\n * `initPlugin('microphone')`\n */\n\n/**\n * Visualize microphone input in a wavesurfer instance.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import MicrophonePlugin from 'wavesurfer.microphone.js';\n *\n * // commonjs\n * var MicrophonePlugin = require('wavesurfer.microphone.js');\n *\n * // if you are using <script> tags\n * var MicrophonePlugin = window.WaveSurfer.microphone;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * MicrophonePlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class MicrophonePlugin {\n /**\n * Microphone plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {MicrophonePluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'microphone',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: MicrophonePlugin\n };\n }\n\n constructor(params, ws) {\n this.params = params;\n this.wavesurfer = ws;\n\n this.active = false;\n this.paused = false;\n this.browser = this.detectBrowser();\n this.reloadBufferFunction = e => this.reloadBuffer(e);\n\n // cross-browser getUserMedia\n const promisifiedOldGUM = (\n constraints,\n successCallback,\n errorCallback\n ) => {\n // get a hold of getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia;\n // Some browsers just don't implement it - return a rejected\n // promise with an error to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n );\n }\n // otherwise, wrap the call to the old navigator.getUserMedia with\n // a Promise\n return new Promise((successCallback, errorCallback) => {\n getUserMedia.call(\n navigator,\n constraints,\n successCallback,\n errorCallback\n );\n });\n };\n // Older browsers might not implement mediaDevices at all, so we set an\n // empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {};\n }\n // Some browsers partially implement mediaDevices. We can't just assign\n // an object with getUserMedia as it would overwrite existing\n // properties. Here, we will just add the getUserMedia property if it's\n // missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = promisifiedOldGUM;\n }\n this.constraints = this.params.constraints || {\n video: false,\n audio: true\n };\n this.bufferSize = this.params.bufferSize || 4096;\n this.numberOfInputChannels = this.params.numberOfInputChannels || 1;\n this.numberOfOutputChannels = this.params.numberOfOutputChannels || 1;\n\n this._onBackendCreated = () => {\n // wavesurfer's AudioContext where we'll route the mic signal to\n this.micContext = this.wavesurfer.backend.getAudioContext();\n };\n }\n\n init() {\n this.wavesurfer.on('backend-created', this._onBackendCreated);\n if (this.wavesurfer.backend) {\n this._onBackendCreated();\n }\n }\n\n /**\n * Destroy the microphone plugin.\n */\n destroy() {\n // make sure the buffer is not redrawn during\n // cleanup and demolition of this plugin.\n this.paused = true;\n\n this.wavesurfer.un('backend-created', this._onBackendCreated);\n this.stop();\n }\n\n /**\n * Allow user to select audio input device, e.g. microphone, and\n * start the visualization.\n */\n start() {\n navigator.mediaDevices\n .getUserMedia(this.constraints)\n .then(data => this.gotStream(data))\n .catch(data => this.deviceError(data));\n }\n\n /**\n * Pause/resume visualization.\n */\n togglePlay() {\n if (!this.active) {\n // start it first\n this.start();\n } else {\n // toggle paused\n this.paused = !this.paused;\n\n if (this.paused) {\n this.pause();\n } else {\n this.play();\n }\n }\n }\n\n /**\n * Play visualization.\n */\n play() {\n this.paused = false;\n\n this.connect();\n }\n\n /**\n * Pause visualization.\n */\n pause() {\n this.paused = true;\n\n // disconnect sources so they can be used elsewhere\n // (eg. during audio playback)\n this.disconnect();\n }\n\n /**\n * Stop the device stream and remove any remaining waveform drawing from\n * the wavesurfer canvas.\n */\n stop() {\n if (this.active) {\n // stop visualization and device\n this.stopDevice();\n\n // empty last frame\n this.wavesurfer.empty();\n }\n }\n\n /**\n * Stop the device and the visualization.\n */\n stopDevice() {\n this.active = false;\n\n // stop visualization\n this.disconnect();\n\n // stop stream from device\n if (this.stream && this.stream.getTracks) {\n this.stream.getTracks().forEach(stream => stream.stop());\n }\n }\n\n /**\n * Connect the media sources that feed the visualization.\n */\n connect() {\n if (this.stream !== undefined) {\n // Create a local buffer for data to be copied to the Wavesurfer buffer for Edge\n if (this.browser.browser === 'edge') {\n this.localAudioBuffer = this.micContext.createBuffer(\n this.numberOfInputChannels,\n this.bufferSize,\n this.micContext.sampleRate\n );\n }\n\n // Create an AudioNode from the stream.\n this.mediaStreamSource = this.micContext.createMediaStreamSource(\n this.stream\n );\n\n this.levelChecker = this.micContext.createScriptProcessor(\n this.bufferSize,\n this.numberOfInputChannels,\n this.numberOfOutputChannels\n );\n this.mediaStreamSource.connect(this.levelChecker);\n\n this.levelChecker.connect(this.micContext.destination);\n this.levelChecker.onaudioprocess = this.reloadBufferFunction;\n }\n }\n\n /**\n * Disconnect the media sources that feed the visualization.\n */\n disconnect() {\n if (this.mediaStreamSource !== undefined) {\n this.mediaStreamSource.disconnect();\n }\n\n if (this.levelChecker !== undefined) {\n this.levelChecker.disconnect();\n this.levelChecker.onaudioprocess = undefined;\n }\n\n if (this.localAudioBuffer !== undefined) {\n this.localAudioBuffer = undefined;\n }\n }\n\n /**\n * Redraw the waveform.\n *\n * @param {object} event Audioprocess event\n */\n reloadBuffer(event) {\n if (!this.paused) {\n this.wavesurfer.empty();\n\n if (this.browser.browser === 'edge') {\n // copy audio data to a local audio buffer,\n // from https://github.com/audiojs/audio-buffer-utils\n let channel, l;\n for (\n channel = 0,\n l = Math.min(\n this.localAudioBuffer.numberOfChannels,\n event.inputBuffer.numberOfChannels\n );\n channel < l;\n channel++\n ) {\n this.localAudioBuffer\n .getChannelData(channel)\n .set(event.inputBuffer.getChannelData(channel));\n }\n\n this.wavesurfer.loadDecodedBuffer(this.localAudioBuffer);\n } else {\n this.wavesurfer.loadDecodedBuffer(event.inputBuffer);\n }\n }\n }\n\n /**\n * Audio input device is ready.\n *\n * @param {MediaStream} stream The microphone's media stream.\n */\n gotStream(stream) {\n this.stream = stream;\n this.active = true;\n\n // start visualization\n this.play();\n\n // notify listeners\n this.fireEvent('deviceReady', stream);\n }\n\n /**\n * Device error callback.\n *\n * @param {string} code Error message\n */\n deviceError(code) {\n // notify listeners\n this.fireEvent('deviceError', code);\n }\n\n /**\n * Extract browser version out of the provided user agent string.\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\n extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n }\n\n /**\n * Browser detector.\n * @return {object} result containing browser, version and minVersion\n * properties.\n */\n detectBrowser() {\n // Returned result object.\n const result = {};\n result.browser = null;\n result.version = null;\n result.minVersion = null;\n\n // Non supported browser.\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n if (navigator.mozGetUserMedia) {\n // Firefox\n result.browser = 'firefox';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Firefox\\/(\\d+)\\./,\n 1\n );\n result.minVersion = 31;\n return result;\n } else if (navigator.webkitGetUserMedia) {\n // Chrome/Chromium/Webview/Opera\n result.browser = 'chrome';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./,\n 2\n );\n result.minVersion = 38;\n return result;\n } else if (\n navigator.mediaDevices &&\n navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)\n ) {\n // Edge\n result.browser = 'edge';\n result.version = this.extractVersion(\n navigator.userAgent,\n /Edge\\/(\\d+).(\\d+)$/,\n 2\n );\n result.minVersion = 10547;\n return result;\n } else if (\n window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)\n ) {\n // Safari\n result.browser = 'safari';\n result.minVersion = 11;\n result.version = this.extractVersion(\n navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./,\n 1\n );\n return result;\n }\n\n // Non supported browser default.\n result.browser = 'Not a supported browser.';\n return result;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/microphone/index.js\");\n",""],"names":["MicrophonePlugin","params","ws","_this","_classCallCheck","wavesurfer","active","paused","browser","detectBrowser","reloadBufferFunction","e","reloadBuffer","promisifiedOldGUM","constraints","successCallback","errorCallback","getUserMedia","navigator","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","Promise","reject","Error","call","mediaDevices","undefined","video","audio","bufferSize","numberOfInputChannels","numberOfOutputChannels","_onBackendCreated","micContext","backend","getAudioContext","_createClass","key","value","init","on","destroy","un","stop","start","_this2","then","data","gotStream","catch","deviceError","togglePlay","pause","play","connect","disconnect","stopDevice","empty","stream","getTracks","forEach","localAudioBuffer","createBuffer","sampleRate","mediaStreamSource","createMediaStreamSource","levelChecker","createScriptProcessor","destination","onaudioprocess","event","channel","l","Math","min","numberOfChannels","inputBuffer","getChannelData","set","loadDecodedBuffer","fireEvent","code","extractVersion","uastring","expr","pos","match","length","parseInt","result","version","minVersion","window","userAgent","RTCPeerConnection","create","name","deferInit","instance","exports","default","module"],"sourceRoot":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js microphone plugin 6.
|
|
2
|
+
* wavesurfer.js microphone plugin 6.5.0 (2023-03-11)
|
|
3
3
|
* https://wavesurfer-js.org
|
|
4
4
|
* @license BSD-3-Clause
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.microphone=t())}(self,(()=>(()=>{"use strict";var e={872:(e,t)=>{function r(e,t){for(var
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.microphone=t())}(self,(()=>(()=>{"use strict";var e={872:(e,t)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function i(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,(o=n.key,a=void 0,a=function(e,t){if("object"!==r(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!==r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(o,"string"),"symbol"===r(a)?a:String(a)),n)}var o,a}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=function(){function e(t,r){var i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.params=t,this.wavesurfer=r,this.active=!1,this.paused=!1,this.browser=this.detectBrowser(),this.reloadBufferFunction=function(e){return i.reloadBuffer(e)};void 0===navigator.mediaDevices&&(navigator.mediaDevices={}),void 0===navigator.mediaDevices.getUserMedia&&(navigator.mediaDevices.getUserMedia=function(e,t,r){var i=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;return i?new Promise((function(t,r){i.call(navigator,e,t,r)})):Promise.reject(new Error("getUserMedia is not implemented in this browser"))}),this.constraints=this.params.constraints||{video:!1,audio:!0},this.bufferSize=this.params.bufferSize||4096,this.numberOfInputChannels=this.params.numberOfInputChannels||1,this.numberOfOutputChannels=this.params.numberOfOutputChannels||1,this._onBackendCreated=function(){i.micContext=i.wavesurfer.backend.getAudioContext()}}var t,r,n;return t=e,n=[{key:"create",value:function(t){return{name:"microphone",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,instance:e}}}],(r=[{key:"init",value:function(){this.wavesurfer.on("backend-created",this._onBackendCreated),this.wavesurfer.backend&&this._onBackendCreated()}},{key:"destroy",value:function(){this.paused=!0,this.wavesurfer.un("backend-created",this._onBackendCreated),this.stop()}},{key:"start",value:function(){var e=this;navigator.mediaDevices.getUserMedia(this.constraints).then((function(t){return e.gotStream(t)})).catch((function(t){return e.deviceError(t)}))}},{key:"togglePlay",value:function(){this.active?(this.paused=!this.paused,this.paused?this.pause():this.play()):this.start()}},{key:"play",value:function(){this.paused=!1,this.connect()}},{key:"pause",value:function(){this.paused=!0,this.disconnect()}},{key:"stop",value:function(){this.active&&(this.stopDevice(),this.wavesurfer.empty())}},{key:"stopDevice",value:function(){this.active=!1,this.disconnect(),this.stream&&this.stream.getTracks&&this.stream.getTracks().forEach((function(e){return e.stop()}))}},{key:"connect",value:function(){void 0!==this.stream&&("edge"===this.browser.browser&&(this.localAudioBuffer=this.micContext.createBuffer(this.numberOfInputChannels,this.bufferSize,this.micContext.sampleRate)),this.mediaStreamSource=this.micContext.createMediaStreamSource(this.stream),this.levelChecker=this.micContext.createScriptProcessor(this.bufferSize,this.numberOfInputChannels,this.numberOfOutputChannels),this.mediaStreamSource.connect(this.levelChecker),this.levelChecker.connect(this.micContext.destination),this.levelChecker.onaudioprocess=this.reloadBufferFunction)}},{key:"disconnect",value:function(){void 0!==this.mediaStreamSource&&this.mediaStreamSource.disconnect(),void 0!==this.levelChecker&&(this.levelChecker.disconnect(),this.levelChecker.onaudioprocess=void 0),void 0!==this.localAudioBuffer&&(this.localAudioBuffer=void 0)}},{key:"reloadBuffer",value:function(e){if(!this.paused)if(this.wavesurfer.empty(),"edge"===this.browser.browser){var t,r;for(t=0,r=Math.min(this.localAudioBuffer.numberOfChannels,e.inputBuffer.numberOfChannels);t<r;t++)this.localAudioBuffer.getChannelData(t).set(e.inputBuffer.getChannelData(t));this.wavesurfer.loadDecodedBuffer(this.localAudioBuffer)}else this.wavesurfer.loadDecodedBuffer(e.inputBuffer)}},{key:"gotStream",value:function(e){this.stream=e,this.active=!0,this.play(),this.fireEvent("deviceReady",e)}},{key:"deviceError",value:function(e){this.fireEvent("deviceError",e)}},{key:"extractVersion",value:function(e,t,r){var i=e.match(t);return i&&i.length>=r&&parseInt(i[r],10)}},{key:"detectBrowser",value:function(){var e={browser:null,version:null,minVersion:null};return"undefined"!=typeof window&&window.navigator?navigator.mozGetUserMedia?(e.browser="firefox",e.version=this.extractVersion(navigator.userAgent,/Firefox\/(\d+)\./,1),e.minVersion=31,e):navigator.webkitGetUserMedia?(e.browser="chrome",e.version=this.extractVersion(navigator.userAgent,/Chrom(e|ium)\/(\d+)\./,2),e.minVersion=38,e):navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)?(e.browser="edge",e.version=this.extractVersion(navigator.userAgent,/Edge\/(\d+).(\d+)$/,2),e.minVersion=10547,e):window.RTCPeerConnection&&navigator.userAgent.match(/AppleWebKit\/(\d+)\./)?(e.browser="safari",e.minVersion=11,e.version=this.extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1),e):(e.browser="Not a supported browser.",e):(e.browser="Not a supported browser.",e)}}])&&i(t.prototype,r),n&&i(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=n,e.exports=t.default}},t={};var r=function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}(872);return r})()));
|
|
7
7
|
//# sourceMappingURL=wavesurfer.microphone.min.js.map
|