Spec-Zone.ru › Web APIs

AnalyserNode

Базовая реализация Широко доступна

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Интерфейс AnalyserNode представляет узел, способный предоставлять информацию о реальном времени частотного и временного анализа. Это AudioNode, который передает аудиопоток без изменений от входа к выходу, но позволяет получать сгенерированные данные, обрабатывать их и создавать аудиовизуализации.

У AnalyserNode ровно один вход и один выход. Узел работает даже если выход не подключен.

Without modifying the audio stream, the node allows to get the frequency and time-domain data associated to it, using a FFT.

EventTarget AudioNode AnalyserNode
Количество входов 1
Количество выходов 1 (но может быть оставлено неподключенным)
Режим подсчета каналов "max"
Количество каналов 2
Интерпретация каналов "speakers"

Конструктор

AnalyserNode()

Создает новый экземпляр объекта AnalyserNode.

Свойства экземпляра

Наследует свойства от своего родителя, AudioNode.

AnalyserNode.fftSize

Значение unsigned long, представляющее размер преобразования Фурье (Быстрое преобразование Фурье), используемого для определения частотного диапазона.

AnalyserNode.frequencyBinCount Только чтение

Значение unsigned long, в два раза меньше размера преобразования Фурье. Обычно соответствует количеству значений данных, с которыми вам нужно работать для визуализации.

AnalyserNode.minDecibels

Значение double, представляющее минимальное значение мощности в диапазоне шкалирования для данных анализа Фурье, для преобразования в значения unsigned byte — по сути, это определяет минимальное значение для диапазона результатов при использовании getByteFrequencyData().

AnalyserNode.maxDecibels

Значение double, представляющее максимальное значение мощности в диапазоне шкалирования для данных анализа Фурье, для преобразования в значения unsigned byte — по сути, это определяет максимальное значение для диапазона результатов при использовании getByteFrequencyData().

AnalyserNode.smoothingTimeConstant

Значение double, представляющее постоянную усреднения с последней кадровой аналитической информацией — по сути, это сглаживает переход между значениями во времени.

Методы экземпляра

Наследует методы от своего родителя, AudioNode.

AnalyserNode.getFloatFrequencyData()

Копирует текущие данные частоты в массив Float32Array, переданный в него.

AnalyserNode.getByteFrequencyData()

Копирует текущие данные частоты в массив Uint8Array (массив беззнаковых байтов), переданный в него.

AnalyserNode.getFloatTimeDomainData()

Копирует текущие данные волны, или данные временного диапазона, в массив Float32Array, переданный в него.

AnalyserNode.getByteTimeDomainData()

Копирует текущие данные волны, или данные временного диапазона, в массив Uint8Array (массив беззнаковых байтов), переданный в него.

Примеры

Примечание: См. руководство Визуализации с помощью API Web Audio для получения дополнительной информации о создании визуализаций аудио.

Основные примеры использования

Следующий пример демонстрирует основное использование AudioContext для создания AnalyserNode, затем requestAnimationFrame и <canvas> для многократного сбора данных временного диапазона и построения «оциллографического» вывода текущего аудио ввода. Для более полных примеров/информации ознакомьтесь с нашим демо Voice-change-O-matic (см. app.js, строки 108-193 для соответствующего кода).

const audioCtx = new AudioContext();

// …

const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);

// Connect the source to be analyzed
source.connect(analyser);

// Get a canvas defined with ID "oscilloscope"
const canvas = document.getElementById("oscilloscope");
const canvasCtx = canvas.getContext("2d");

// draw an oscilloscope of the current audio source

function draw() {
  requestAnimationFrame(draw);

  analyser.getByteTimeDomainData(dataArray);

  canvasCtx.fillStyle = "rgb(200 200 200)";
  canvasCtx.fillRect(0, 0, canvas.width, canvas.height);

  canvasCtx.lineWidth = 2;
  canvasCtx.strokeStyle = "rgb(0 0 0)";

  canvasCtx.beginPath();

  const sliceWidth = (canvas.width * 1.0) / bufferLength;
  let x = 0;

  for (let i = 0; i < bufferLength; i++) {
    const v = dataArray[i] / 128.0;
    const y = (v * canvas.height) / 2;

    if (i === 0) {
      canvasCtx.moveTo(x, y);
    } else {
      canvasCtx.lineTo(x, y);
    }

    x += sliceWidth;
  }

  canvasCtx.lineTo(canvas.width, canvas.height / 2);
  canvasCtx.stroke();
}

draw();

Спецификации

Спецификация
Web Audio API
# AnalyserNode

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
AnalyserNode 55 79 53 42 14.1 55 53 42 14.5 6.0 55
AnalyserNode 14 12 25 15 6 18 25 14 6 1.0 4.4.3
fftSize 14 12 25 15 6 18 25 14 6 1.0 4.4.3
frequencyBinCount 14 12 25 15 6 18 25 14 6 1.0 4.4.3
getByteFrequencyData 14 12 25 15 6 18 25 14 6 1.0 4.4.3
getByteTimeDomainData 14 12 25 15 6 18 25 14 6 1.0 4.4.3
getFloatFrequencyData 14 12 25 15 6 18 25 14 6 1.0 4.4.3
getFloatTimeDomainData 35 12 30 22 14.1 35 30 22 14.5 3.0 37
maxDecibels 14 12 25 15 6 18 25 14 6 1.0 4.4.3
minDecibels 14 12 25 15 6 18 25 14 6 1.0 4.4.3
smoothingTimeConstant 14 12 25 15 6 18 25 14 6 1.0 4.4.3

См. также

  • Использование Web Audio API

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API