我正在建立一个项目,我需要一个球,根据麦克风输入的频率上下移动。我使用的是p5.js库。
球运动:我想取平均频率的每一秒,并改变y轴的位置,球的基础上。
这是我现在写的代码。
var mic;
var fft;
const average = arr => arr.reduce((a,b) => a + b, 0) / arr.length;
function setup() {
createCanvas(700, 700);
mic = new p5.AudioIn();
buttonStart = createButton('start')
buttonStop = createButton('stop')
buttonStart.mousePressed(() => {
mic.start();
})
fft = new p5.FFT(0, 32);
fft.setInput(mic);
buttonStop.mousePressed(() => {
mic.stop();
})
}
function timeout(freqs) {
var avgFreq = average(freqs);
console.log(avgFreq);
fill(0);
ellipse(50, avgFreq, 30, 30)
}
function draw() {
background(220);
let temp = [];
let freqs = fft.analyze();
temp.push(average(freqs));
setInterval(timeout(temp),1000);
console.log(temp);
}这似乎不是很好,每次调用绘制函数时,它也调用超时函数,而不需要等待1秒,这是在setInterval()中指定的。
发布于 2022-02-17 08:23:08
您有一个基本的JavaScript错误:当您将一个函数传递给另一个函数以便它稍后调用(即setInterval的第一个参数)时,您需要传递它的名称:setInterval(timeout, 1000),或者使用箭头表达式(a.k.a )。):setInterval(() => timeout(temp), 1000)。否则,您只需立即调用超时值,并将未定义的结果传递给setInterval()。
话虽如此,但肯定还有其他几个问题,你到底想要实现什么,还不清楚。
https://stackoverflow.com/questions/71152500
复制相似问题