You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AudioLevels.js 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* global interfaceConfig */
  2. import UIUtil from '../util/UIUtil';
  3. /**
  4. * Responsible for drawing audio levels.
  5. */
  6. const AudioLevels = {
  7. /**
  8. * Updates the audio level of the large video.
  9. *
  10. * @param audioLevel the new audio level to set.
  11. */
  12. updateLargeVideoAudioLevel(elementId, audioLevel) {
  13. const element = document.getElementById(elementId);
  14. if (!UIUtil.isVisible(element)) {
  15. return;
  16. }
  17. let level = parseFloat(audioLevel);
  18. level = isNaN(level) ? 0 : level;
  19. let shadowElement = element.getElementsByClassName('dynamic-shadow');
  20. if (shadowElement && shadowElement.length > 0) {
  21. shadowElement = shadowElement[0];
  22. }
  23. shadowElement.style.boxShadow = this._updateLargeVideoShadow(level);
  24. },
  25. /**
  26. * Updates the large video shadow effect.
  27. */
  28. _updateLargeVideoShadow(level) {
  29. const scale = 2;
  30. // Internal circle audio level.
  31. const int = {
  32. level: level > 0.15 ? 20 : 0,
  33. color: interfaceConfig.AUDIO_LEVEL_PRIMARY_COLOR
  34. };
  35. // External circle audio level.
  36. const ext = {
  37. level: parseFloat(
  38. ((int.level * scale * level) + int.level).toFixed(0)),
  39. color: interfaceConfig.AUDIO_LEVEL_SECONDARY_COLOR
  40. };
  41. // Internal blur.
  42. int.blur = int.level ? 2 : 0;
  43. // External blur.
  44. ext.blur = ext.level ? 6 : 0;
  45. return [
  46. `0 0 ${int.blur}px ${int.level}px ${int.color}`,
  47. `0 0 ${ext.blur}px ${ext.level}px ${ext.color}`
  48. ].join(', ');
  49. }
  50. };
  51. export default AudioLevels;