JavaScript:Библиотеки/p5.sound/Класс p5.PeakDetect

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

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



Класс p5.PeakDetect [1]

Описание

Этот класс используется вместе с классом p5.FFT для поиска пиков в спектре частот (во всем спектре или в его части).

Чтобы использовать p5.PeakDetect, вызовите в блоке draw() функцию update() и задайте ей в качестве параметра объект p5.FFT.

Чтобы прослушивать не весь спектр частот, а его фрагмент, его можно задать при помощи параметров freq1 и freq2.

Параметр threshold – это пороговое значение для определения пиков. Допустимые значения: от «0» до «1». Это логарифмическое значение, поэтому «0.1» – это половина громкости от «1.0».

В параметре framesPerPeak задается, как много циклов должно пройти перед тем, как может быть обнаружен новый пик. К примеру, если количество отсчетов равно «60», то ритм песни с 120 ударами в минуту можно рассчитать при помощи следующего уравнения: framesPerPeak = 60 / (estimatedBPM / 60 ).

Класс p5.PeakDetect основан на примере, созданном @b2renger. По этой ссылке можно почитать статью авторства Феликса Тернера, в которой объясняется, как определять ритм.

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

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

Синтаксис

new p5.PeakDetect([freq1], [freq2], [threshold], [framesPerPeak])

Параметры

freq1  нижняя граница частотного диапазона. По умолчанию  20 Гц. Тип данных  number
freq2  верхняя граница частотного диапазона. По умолчанию  20000 Гц. Тип данных  number
threshold  пороговое значение для определения ритма. Значения варьируются от «0» до «1». Это логарифмические значения, поэтому «0.1»  это половина от громкости «1.0». Значение по умолчанию  «0.35». Тип данных  number
framesPerPeak  количество циклов до определения нового пика. Значение по умолчанию  «20». Тип данных  number

Методы

  • update() – вызывается в блоке draw(). В качестве параметра принимает объект p5.FFT. Перед вызовом функции update() нужно обязательно вызвать функцию analyze() класса p5.FFT, потому что она полагается на результаты выполненного ПБФ-анализа.
  • onPeak() – принимает два параметра: функцию, которая вызывается после обнаружения пика, и значение (опциональное), передаваемое функции при определении пика.


Пример

№1

var cnv, soundFile, fft, peakDetect;
var ellipseWidth = 10;

function setup() {
  background(0);
  noStroke();
  fill(255);
  textAlign(CENTER);

  soundFile = loadSound('assets/beat.mp3');

  // объекту p5.PeakDetect необходим объект p5.FFT:
  fft = new p5.FFT();
  peakDetect = new p5.PeakDetect();

}

function draw() {
  background(0);
  text('click to play/pause', width/2, height/2);
   //  'кликните, чтобы начать проигрывание или поставить на паузу'

  // объект «peakDetect» в качестве параметра
  // принимает результаты анализа, выполненного объектом «fft»:
  fft.analyze();
  peakDetect.update(fft);

  if ( peakDetect.isDetected ) {
    ellipseWidth = 50;
  } else {
    ellipseWidth *= 0.95;
  }

  ellipse(width/2, height/2, ellipseWidth, ellipseWidth);
}

// включение/выключение музыки при клике по холсту:
function mouseClicked() {
  if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
    if (soundFile.isPlaying() ) {
      soundFile.stop();
    } else {
      soundFile.play();
    }
  }
}

№2

№3

См.также

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