JavaScript:Библиотеки/p5.sound/Класс p5.FFT/analyze()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



analyze() [1]

Описание

Возвращает массив амплитудных значений (между «0» и «255») относительно шкалы частот. Размер этого массива равен количеству ПБФ-отсчетов (по умолчанию – «1024»), т.е. значению, заданному в параметре bins. Каждая позиция в массиве соответствует определенной частоте (т.е. высоте звука) – от самой высокой до самой низкой, слышимой человеческим ухом – и содержит значение, соответствующее этой частоте. Функцию analyze() нужно вызывать до getEnergy().

Чтобы использовать эту функцию, нужно подключить библиотеку p5.sound. Для этого в заголовок своего файла «index.html» впишите следующее:

<script language="javascript" type="text/javascript" src="path/to/p5.sound.js"></script>

Синтаксис

analyze([bins], [scale])

Параметры

bins  количество отсчетов (размер возвращаемого массива). Это значение должно быть в диапазоне между «16» и «16384» (по умолчанию  «1024»). Кроме того, оно должно быть степенью двойки. Тип данных  number
scale  если указать здесь «dB», функция вернет значения в децибелах, и это будут значения с плавающей точкой в диапазоне между «-140» и «0» (макс.). В противном случае функция вернет значения в диапазоне между «0» и «255». Тип данных  number

Возвращаемое значение

Массив со значениями, обозначающими распределение энергии сигнала по шкале частот. Наименьшая энергия  это «0» (тишина), а наибольшая  это «255». Тип данных  массив.

Пример

№1

var osc;
var fft;

function setup(){
  createCanvas(100,100);
  osc = new p5.Oscillator();
  osc.amp(0);
  osc.start();
  fft = new p5.FFT();
}

function draw(){
  background(0);

  var freq = map(mouseX, 0, 800, 20, 15000);
  freq = constrain(freq, 1, 20000);
  osc.freq(freq);

  var spectrum = fft.analyze();
  noStroke();
  fill(0,255,0); // зеленым показано распределение частот
  for (var i = 0; i< spectrum.length; i++){
    var x = map(i, 0, spectrum.length, 0, width);
    var h = -height + map(spectrum[i], 0, 255, height, 0);
    rect(x, height, width / spectrum.length, h );
  }

  stroke(255);
  text('Freq: ' + round(freq)+'Hz', 10, 10);

  isMouseOverCanvas();
}

// проигрываем звук, только если курсор находится над холстом:
function isMouseOverCanvas() {
  var mX = mouseX, mY = mouseY;
  if (mX > 0 && mX < width && mY < height && mY > 0) {
    osc.amp(0.5, 0.2);
  } else {
    osc.amp(0, 0.2);
  }
}

№2

№3

См.также

Внешние ссылки