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();
}
}
}