@m_xplay_official

Audio Visualization настройка?

Как сделать так что бы не было привязки к событию onclick и скрипт начинал свою работу сразу после полной загрузки сайта, а еще лучше при воспроизведении аудио на сайте?

Код HTML
<main>
  <button onclick="init()">start</button>
</main>


Код CSS
*, *::before, *::after {
  box-sizing: border-box;
}

body, main {
  margin: 0;
  padding: 0;
  min-width: 100%;
  min-height: 100vh;
  font-family: sans-serif;
  text-align: center;
  color: #fff;
  background: #000;
}

button {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 5em;
  height: 2em;
  margin-left: -2.5em;
  margin-top: -1em;
  z-index: 100;
  
  padding: .25em .5em;
  color: #fff;
  background: #000;
  border: 1px solid #fff;
  border-radius: 4px;
  cursor: pointer;
  font-size: 1.15em;
  font-weight: 200;
  box-shadow: 0 0 10px rgba( 255, 255, 255, .5 );
  transition: box-shadow .5s;
  
  &:hover {
    box-shadow: 0 0 30px 5px rgba( 255, 255, 255, .75 );
  }
}

main {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  
  > div {
    display: inline-block;
    width: 3px;
    height: 100px;
    margin: 0 7px;
    background: currentColor;
    transform: scaleY( .5 );
    opacity: .25;
  }
  
  &.error {
    color: #f7451d;
    min-width: 20em;
    max-width: 30em;
    margin: 0 auto;
    white-space: pre-line;
  }
}


Код JS
var _createClass = function () {
	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);
	}}

	return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};
	}();function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}var AudioVisualizer = function () 

{ function AudioVisualizer(audioContext, processFrame, processError) {_classCallCheck(this, AudioVisualizer);
    this.audioContext = audioContext;
    this.processFrame = processFrame;
    this.connectStream = this.connectStream.bind(this);
    navigator.mediaDevices.getUserMedia({ audio: true, video: false }).
    then(this.connectStream).
    catch(function (error) {
      if (processError) {
        processError(error);
      }
    });
  }_createClass(AudioVisualizer, [{ key: 'connectStream', value: function connectStream(

    stream) {
      this.analyser = this.audioContext.createAnalyser();
      var source = this.audioContext.createMediaStreamSource(stream);
      source.connect(this.analyser);
      this.analyser.smoothingTimeConstant = 0.5;
      this.analyser.fftSize = 32;

      this.initRenderLoop(this.analyser);
    } }, { key: 'initRenderLoop', value: function initRenderLoop()

    {var _this = this;
      var frequencyData = new Uint8Array(this.analyser.frequencyBinCount);
      var processFrame = this.processFrame || function () {};

      var renderFrame = function renderFrame() {
        _this.analyser.getByteFrequencyData(frequencyData);
        processFrame(frequencyData);

        requestAnimationFrame(renderFrame);
      };
      requestAnimationFrame(renderFrame);
    } }]);return AudioVisualizer;}();


var visualMainElement = document.querySelector('main');
var visualValueCount = 16;
var visualElements = void 0;
var createDOMElements = function createDOMElements() {
  var i = void 0;
  for (i = 0; i < visualValueCount; ++i) {
    var elm = document.createElement('div');
    visualMainElement.appendChild(elm);
  }

  visualElements = document.querySelectorAll('main div');
};
createDOMElements();

var init.get(0) = function init() {
  // Creating initial DOM elements
  var audioContext = new AudioContext();
  var initDOM = function initDOM() {
    visualMainElement.innerHTML = '';
    createDOMElements();
  };
  initDOM();

  // Swapping values around for a better visual effect
  var dataMap = { 0: 15, 1: 10, 2: 8, 3: 9, 4: 6, 5: 5, 6: 2, 7: 1, 8: 0, 9: 4, 10: 3, 11: 7, 12: 11, 13: 12, 14: 13, 15: 14 };
  var processFrame = function processFrame(data) {
    var values = Object.values(data);
    var i = void 0;
    for (i = 0; i < visualValueCount; ++i) {
      var value = values[dataMap[i]] / 255;
      var elmStyles = visualElements[i].style;
      elmStyles.transform = 'scaleY( ' + value + ' )';
      elmStyles.opacity = Math.max(.25, value);
    }
  };

  var processError = function processError() {
    visualMainElement.classList.add('error');
    visualMainElement.innerText = 'Please allow access to your microphone in order to see this demo.\nNothing bad is going to happen... hopefully :P';
  };

  var a = new AudioVisualizer(audioContext, processFrame, processError);
};
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы