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