首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于麦克风频率的p5.js球运动

基于麦克风频率的p5.js球运动
EN

Stack Overflow用户
提问于 2022-02-17 04:23:06
回答 1查看 180关注 0票数 0

我正在建立一个项目,我需要一个球,根据麦克风输入的频率上下移动。我使用的是p5.js库。

球运动:我想取平均频率的每一秒,并改变y轴的位置,球的基础上。

这是我现在写的代码。

代码语言:javascript
复制
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()中指定的。

EN

回答 1

Stack Overflow用户

发布于 2022-02-17 08:23:08

您有一个基本的JavaScript错误:当您将一个函数传递给另一个函数以便它稍后调用(即setInterval的第一个参数)时,您需要传递它的名称:setInterval(timeout, 1000),或者使用箭头表达式(a.k.a )。):setInterval(() => timeout(temp), 1000)。否则,您只需立即调用超时值,并将未定义的结果传递给setInterval()

话虽如此,但肯定还有其他几个问题,你到底想要实现什么,还不清楚。

  1. --您将有很多延迟调用这个超时函数(~60次/秒),但这基本上相当于延迟呈现
  2. -- temp数组总是包含一个值,因为您声明它并在每个调用中添加一个项来绘制()
  3. ,FFT.analyze函数将返回一个表示不同频率范围的桶列表,每个桶的值将是该桶的幅度。因此,这些值的平均值不随频率而随体积而变化。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71152500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档