Web Audio API, получить getByteTimeDomainData для левого / правого канала в двух массивах.

В настоящее время я пытаюсь создать аудио-визуализацию, используя веб-аудио API, а именно, я пытаюсь создать фигуры Лиссажу из данного аудиоисточника.

Я наткнулся на этот пост, но мне не хватает некоторых предварительных условий. Как я могу получить данные временной области для левого / правого каналов? В настоящее время кажется, что я получаю только объединенные данные.

Любая помощь или подсказка будет высоко ценится.

$(document).ready(function () {

  var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
  var audioElement = document.getElementById('audioElement');
  var audioSrc = audioCtx.createMediaElementSource(audioElement);
  var analyser = audioCtx.createAnalyser();

  // Bind analyser to media element source.
  audioSrc.connect(analyser);
  audioSrc.connect(audioCtx.destination);

  //var timeDomainData = new Uint8Array(analyser.frequencyBinCount);
  var timeDomainData = new Uint8Array(200);

  // loop and update time domain data array.
  function renderChart() {
     requestAnimationFrame(renderChart);

     // Copy frequency data to timeDomainData array.
     analyser.getByteTimeDomainData(timeDomainData);

     // debugging: print to console
     console.log(timeDomainData);

  }

  // Run the loop
  renderChart();

});

2 ответа

Решение

Наблюдение правильное, форма волны - результат пониженного микширования. Из текущей спецификации (мой акцент):

Копирует текущие данные во временной области с пониженным микшированием в волновой массив без знака. [...]

Чтобы обойти это, вы можете использовать разветвитель канала (createChannelSplitter()) и назначить каждый канал двум отдельным узлам анализатора.

Для более подробной информации о createChannelSplitter() смотрите эту ссылку.

Мы можем добиться этого, используя panвариант:

Число с плавающей запятой в диапазоне [-1,1], указывающее положение AudioNode в выходном изображении. Значение -1 соответствует полному левому краю, а 1 — полному правому. Значение по умолчанию — 0.


Веб-радио с 2-канальным стереофоническим измерителем уровня громкости

В следующей демонстрации всемирное радио BBC разделено на два левых и правых канала. Эти каналы затем направляются на свои собственные анализаторы, которые передают значения индикаторам выполнения. Зацикливание осуществляется с использованием кадров анимации и таймеров.

StereoPannerNodehttps://developer.mozilla.org/en-US/docs/Web/API/StereoPannerNode/StereoPannerNode

Другие вопросы по тегам