wavesurfer.js 6.6.0 → 6.6.2

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 (35) hide show
  1. package/README.md +3 -1
  2. package/dist/plugin/wavesurfer.cursor.js +1 -1
  3. package/dist/plugin/wavesurfer.cursor.min.js +1 -1
  4. package/dist/plugin/wavesurfer.elan.js +1 -1
  5. package/dist/plugin/wavesurfer.elan.min.js +1 -1
  6. package/dist/plugin/wavesurfer.markers.js +1 -1
  7. package/dist/plugin/wavesurfer.markers.min.js +1 -1
  8. package/dist/plugin/wavesurfer.mediasession.js +1 -1
  9. package/dist/plugin/wavesurfer.mediasession.min.js +1 -1
  10. package/dist/plugin/wavesurfer.microphone.js +1 -1
  11. package/dist/plugin/wavesurfer.microphone.min.js +1 -1
  12. package/dist/plugin/wavesurfer.minimap.js +1 -1
  13. package/dist/plugin/wavesurfer.minimap.min.js +1 -1
  14. package/dist/plugin/wavesurfer.playhead.js +1 -1
  15. package/dist/plugin/wavesurfer.playhead.min.js +1 -1
  16. package/dist/plugin/wavesurfer.regions.js +1 -1
  17. package/dist/plugin/wavesurfer.regions.min.js +1 -1
  18. package/dist/plugin/wavesurfer.spectrogram.js +34 -128
  19. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  20. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  21. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  22. package/dist/plugin/wavesurfer.timeline.js +1 -1
  23. package/dist/plugin/wavesurfer.timeline.min.js +1 -1
  24. package/dist/wavesurfer-html-init.js +1 -1
  25. package/dist/wavesurfer-html-init.min.js +1 -1
  26. package/dist/wavesurfer.js +6 -160
  27. package/dist/wavesurfer.js.map +1 -1
  28. package/dist/wavesurfer.min.js +2 -2
  29. package/dist/wavesurfer.min.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/drawer.canvasentry.js +0 -43
  32. package/src/drawer.js +4 -0
  33. package/src/drawer.multicanvas.js +1 -71
  34. package/src/plugin/spectrogram/index.js +30 -121
  35. package/src/wavesurfer.js +0 -33
package/README.md CHANGED
@@ -8,7 +8,9 @@ Interactive navigable audio visualization using Web Audio and Canvas.
8
8
 
9
9
  [![Screenshot](https://raw.githubusercontent.com/wavesurfer-js/wavesurfer.js/gh-pages/example/screenshot.png "Screenshot")](https://wavesurfer-js.org)
10
10
 
11
- See a [tutorial](https://wavesurfer-js.org/docs) and [examples](https://wavesurfer-js.org/examples) on [wavesurfer-js.org](https://wavesurfer-js.org).
11
+ See [docs](https://wavesurfer-js.org/docs) and [examples](https://wavesurfer-js.org/examples) on [wavesurfer-js.org](https://wavesurfer-js.org).
12
+
13
+ For a video tutorial, watch this [series by Live Blogger on YouTube](https://www.youtube.com/watch?v=yCmnDWCF8m0). 📺
12
14
 
13
15
  ## Questions
14
16
  Have a question about integrating wavesurfer.js on your website? Feel free to ask in our forum: https://github.com/wavesurfer-js/wavesurfer.js/discussions/categories/q-a
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js cursor plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js cursor plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js cursor plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js cursor plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js elan plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js elan plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js markers plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js markers plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js markers plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js markers plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js mediasession plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js mediasession plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js mediasession plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js mediasession plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js microphone plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js microphone plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js microphone plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js microphone plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js minimap plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js minimap plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js minimap plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js minimap plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js playhead plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js playhead plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js playhead plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js playhead plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js regions plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js regions plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js regions plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js regions plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js spectrogram plugin 6.6.0 (2023-03-14)
2
+ * wavesurfer.js spectrogram plugin 6.6.2 (2023-03-26)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -284,9 +284,6 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
284
284
  this._onRender = function () {
285
285
  _this.render();
286
286
  };
287
- this._onZoom = function () {
288
- _this.stretchCanvases();
289
- };
290
287
  this._onWrapperClick = function (e) {
291
288
  _this._wrapperClickHandler(e);
292
289
  };
@@ -323,19 +320,15 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
323
320
  _this.alpha = params.alpha;
324
321
  _this.splitChannels = params.splitChannels;
325
322
  _this.channels = _this.splitChannels ? ws.backend.buffer.numberOfChannels : 1;
326
- _this.canvases = [];
327
- _this.canvasesTimeouts = [];
328
- _this.scrollLeftTracker = 0; //Tracks the desired scrollLeft value
329
323
 
330
324
  // Getting file's original samplerate is difficult(#1248).
331
325
  // So set 12kHz default to render like wavesurfer.js 5.x.
332
326
  _this.frequencyMin = params.frequencyMin || 0;
333
327
  _this.frequencyMax = params.frequencyMax || 12000;
334
328
  _this.createWrapper();
335
- _this.addCanvas();
329
+ _this.createCanvas();
336
330
  _this.render();
337
331
  drawer.wrapper.addEventListener('scroll', _this._onScroll);
338
- ws.on('zoom', _this._onZoom);
339
332
  ws.on('redraw', _this._onRender);
340
333
  };
341
334
  }
@@ -411,49 +404,15 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
411
404
  var relX = 'offsetX' in event ? event.offsetX : event.layerX;
412
405
  this.fireEvent('click', relX / this.width || 0);
413
406
  }
414
-
415
- /**
416
- * Add a canvas to this.canvases
417
- */
418
407
  }, {
419
- key: "addCanvas",
420
- value: function addCanvas() {
421
- var canvas = this.wrapper.appendChild(document.createElement('canvas'));
408
+ key: "createCanvas",
409
+ value: function createCanvas() {
410
+ var canvas = this.canvas = this.wrapper.appendChild(document.createElement('canvas'));
411
+ this.spectrCc = canvas.getContext('2d');
422
412
  this.util.style(canvas, {
423
413
  position: 'absolute',
424
414
  zIndex: 4
425
415
  });
426
- this.canvases.push(canvas);
427
- this.canvasesTimeouts.push(null);
428
- }
429
-
430
- /**
431
- * Remove a canvas from this.canvases
432
- */
433
- }, {
434
- key: "removeCanvas",
435
- value: function removeCanvas() {
436
- //Stop drawing (if drawing)
437
- clearTimeout(this.canvasesTimeouts[this.canvasesTimeouts.length - 1]);
438
- var lastEntry = this.canvases[this.canvases.length - 1];
439
- lastEntry.parentElement.removeChild(lastEntry);
440
- this.canvases.pop();
441
- this.canvasesTimeouts.pop();
442
- }
443
-
444
- /**
445
- * Ensure the correct number of canvases for the size of the spectrogram
446
- */
447
- }, {
448
- key: "updateCanvases",
449
- value: function updateCanvases() {
450
- var canvasesRequired = Math.ceil(this.width / 4000);
451
- while (this.canvases.length < canvasesRequired) {
452
- this.addCanvas();
453
- }
454
- while (this.canvases.length > canvasesRequired) {
455
- this.removeCanvas();
456
- }
457
416
  }
458
417
  }, {
459
418
  key: "render",
@@ -468,14 +427,11 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
468
427
  }, {
469
428
  key: "updateCanvasStyle",
470
429
  value: function updateCanvasStyle() {
471
- this.updateCanvases();
472
- //width per canvas
473
- for (var i = 0; i < this.canvases.length; i++) {
474
- this.canvases[i].width = Math.round(this.width / this.canvases.length);
475
- this.canvases[i].height = this.fftSamples / 2 * this.channels;
476
- this.canvases[i].style.width = Math.round(this.canvases[i].width / this.pixelRatio) + 'px';
477
- this.canvases[i].style.height = this.height + 'px';
478
- }
430
+ var width = Math.round(this.width / this.pixelRatio) + 'px';
431
+ this.canvas.width = this.width;
432
+ this.canvas.height = this.fftSamples / 2 * this.channels;
433
+ this.canvas.style.width = width;
434
+ this.canvas.style.height = this.height + 'px';
479
435
  }
480
436
  }, {
481
437
  key: "drawSpectrogram",
@@ -485,58 +441,23 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
485
441
  // to [channel, sample, freq] format
486
442
  frequenciesData = [frequenciesData];
487
443
  }
488
- my.updateCanvasStyle();
489
-
490
- //Stop canvases still being drawn
491
- for (var i = 0; i < my.canvasesTimeouts.length; i++) {
492
- clearTimeout(my.canvasesTimeouts[i]);
493
- }
494
- var view = [my.scrollLeftTracker, my.scrollLeftTracker + my.wrapper.clientWidth];
495
- for (var canvasNum = 0; canvasNum < my.canvases.length; canvasNum++) {
496
- var canvasLeft = canvasNum * Math.floor(my.width / my.canvases.length / my.pixelRatio);
497
- var canvasRight = (canvasNum + 1) * Math.floor(my.width / my.canvases.length / my.pixelRatio);
498
- var canvasBound = [canvasLeft, canvasRight];
499
- my.canvases[canvasNum].style['left'] = canvasLeft + 'px';
500
-
501
- //Optimise drawing for the view
502
- var priority = 0;
503
- if (canvasBound[0] > view[1]) {
504
- //Canvas is to the right of view window
505
- var distance = canvasBound[0] - view[1];
506
- priority = Math.ceil(distance / (view[1] - view[0]));
507
- } else if (canvasBound[1] < view[0]) {
508
- //Canvas is to the left of the view window
509
- var _distance = view[0] - canvasBound[1];
510
- priority = Math.ceil(_distance / (view[1] - view[0]));
511
- }
512
-
513
- //delay = 25ms * number of viewport widths away the canvas is
514
- my.canvasesTimeouts[canvasNum] = setTimeout(my.drawToCanvas, 25 * priority, frequenciesData, my, canvasNum);
515
- }
516
- }
517
-
518
- /**
519
- * Draw spectrogram channel to a specific canvas
520
- * @param {[Number, Number, Number]} frequenciesData spectrogram data in [channel, sample, freq] format
521
- * @param {SpectrogramPlugin} my variable with 'this' in it
522
- * @param {Number} canvasNum Canvas to draw to
523
- */
524
- }, {
525
- key: "drawToCanvas",
526
- value: function drawToCanvas(frequenciesData, my, canvasNum) {
444
+ var spectrCc = my.spectrCc;
527
445
  var height = my.fftSamples / 2;
446
+ var width = my.width;
528
447
  var freqFrom = my.buffer.sampleRate / 2;
529
448
  var freqMin = my.frequencyMin;
530
449
  var freqMax = my.frequencyMax;
531
- var _loop = function _loop(channel) {
532
- //Get pixels from frequency data and apply to image
533
- var relevantFreqs = frequenciesData[channel].slice(canvasNum * Math.round(frequenciesData[channel].length / my.canvases.length), (canvasNum + 1) * Math.round(frequenciesData[channel].length / my.canvases.length));
534
- var pixels = my.resample(relevantFreqs);
535
- var imageData = new ImageData(pixels.length, height);
450
+ if (!spectrCc) {
451
+ return;
452
+ }
453
+ var _loop = function _loop(c) {
454
+ // for each channel
455
+ var pixels = my.resample(frequenciesData[c]);
456
+ var imageData = new ImageData(width, height);
536
457
  for (var i = 0; i < pixels.length; i++) {
537
458
  for (var j = 0; j < pixels[i].length; j++) {
538
459
  var colorMap = my.colorMap[pixels[i][j]];
539
- var redIndex = ((height - j) * imageData.width + i) * 4;
460
+ var redIndex = ((height - j) * width + i) * 4;
540
461
  imageData.data[redIndex] = colorMap[0] * 255;
541
462
  imageData.data[redIndex + 1] = colorMap[1] * 255;
542
463
  imageData.data[redIndex + 2] = colorMap[2] * 255;
@@ -544,26 +465,21 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
544
465
  }
545
466
  }
546
467
 
547
- //Draw image to canvas
468
+ // scale and stack spectrograms
548
469
  createImageBitmap(imageData).then(function (renderer) {
549
- if (my.canvases[canvasNum]) {
550
- //Check canvas still exists after creating image
551
- my.canvases[canvasNum].getContext('2d').drawImage(renderer, 0, height * (1 - freqMax / freqFrom),
552
- // source x, y
553
- imageData.width, height * (freqMax - freqMin) / freqFrom,
554
- // source width, height
555
- 0, height * channel,
556
- // destination x, y
557
- my.canvases[canvasNum].width, height // destination width, height
558
- );
559
- }
470
+ return spectrCc.drawImage(renderer, 0, height * (1 - freqMax / freqFrom),
471
+ // source x, y
472
+ width, height * (freqMax - freqMin) / freqFrom,
473
+ // source width, height
474
+ 0, height * c,
475
+ // destination x, y
476
+ width, height // destination width, height
477
+ );
560
478
  });
561
479
  };
562
- for (var channel = 0; channel < frequenciesData.length; channel++) {
563
- _loop(channel);
480
+ for (var c = 0; c < frequenciesData.length; c++) {
481
+ _loop(c);
564
482
  }
565
- //Drawing is finished
566
- my.canvasesTimeouts[canvasNum] = null;
567
483
  }
568
484
  }, {
569
485
  key: "getFrequencies",
@@ -581,7 +497,7 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
581
497
  var frequencies = [];
582
498
  var noverlap = this.noverlap;
583
499
  if (!noverlap) {
584
- var uniqueSamplesPerPx = buffer.length / this.width;
500
+ var uniqueSamplesPerPx = buffer.length / this.canvas.width;
585
501
  noverlap = Math.max(0, Math.round(fftSamples - uniqueSamplesPerPx));
586
502
  }
587
503
  var fft = new _fft.default(fftSamples, sampleRate, this.windowFunc, this.alpha);
@@ -707,14 +623,13 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
707
623
  key: "updateScroll",
708
624
  value: function updateScroll(e) {
709
625
  if (this.wrapper) {
710
- this.scrollLeftTracker = e.target.scrollLeft;
711
626
  this.wrapper.scrollLeft = e.target.scrollLeft;
712
627
  }
713
628
  }
714
629
  }, {
715
630
  key: "resample",
716
631
  value: function resample(oldMatrix) {
717
- var columnsNumber = oldMatrix.length;
632
+ var columnsNumber = this.width;
718
633
  var newMatrix = [];
719
634
  var oldPiece = 1 / oldMatrix.length;
720
635
  var newPiece = 1 / columnsNumber;
@@ -750,15 +665,6 @@ var SpectrogramPlugin = /*#__PURE__*/function () {
750
665
  }
751
666
  return newMatrix;
752
667
  }
753
- }, {
754
- key: "stretchCanvases",
755
- value: function stretchCanvases() {
756
- for (var i = 0; i < this.canvases.length; i++) {
757
- this.canvases[i].style.width = Math.round(this.drawer.width / this.canvases.length / this.pixelRatio) + 'px';
758
- var canvasLeft = i * Math.floor(this.drawer.width / this.canvases.length / this.pixelRatio);
759
- this.canvases[i].style['left'] = canvasLeft + 'px';
760
- }
761
- }
762
668
  }], [{
763
669
  key: "create",
764
670
  value: