【问题标题】:Tap BPM code in Processing在处理中点击 BPM 代码
【发布时间】:2025-12-07 02:40:01
【问题描述】:

我正在尝试开发一个程序,该程序可以帮助我通过单击或点击按钮来查找歌曲的每分钟节拍数。

  • 我发现我需要一个动态数组来节省每次点击的时间(以毫秒为单位),每次都在 Arraylist 的末尾添加一个新元素。

  • 添加一定数量的元素后,BPM 的计算方法是找到所有元素的总和,然后除以列表中的元素数量。

我对 Arraylists 不是很熟悉,想知道是否有人可以帮助我实现这些步骤。

我将为此程序使用处理。

【问题讨论】:

  • 欢迎来到 *!请参阅How to Ask 页面以提出更好的问题。试着说出你的实际问题是什么
  • 如果它解决了您的问题,请不要忘记将答案标记为正确

标签: processing


【解决方案1】:

这样的?

ArrayList <Integer> diffs = new ArrayList<Integer>();
int last, now, diff;

void setup() {
  last = millis();
}

void draw() {
}

void mouseClicked() {
  now = millis();
  diff =  now - last;
  last = now;
  diffs.add(diff);

  int sum = 0;
  for (Integer i : diffs) {
  sum = sum + i;
  }

  int average = diffs.size() > 0 ? sum/diffs.size() : 0;

  println ("average = " + average);
}

其实如果你不需要访问每个条目,你甚至不需要一个数组列表...

int last, now, diff, entries, sum;

void setup() {
  last = millis();
}

void draw() {
}

void mouseClicked() {
  now = millis();
  diff =  now - last;
  last = now;
  sum = sum + diff;
  entries++;

  int average = sum/entries ;

  println ("average = " + average);

}

【讨论】:

  • 太棒了!非常感谢,这是一个好的开始。我现在一定能完成这个
最近更新 更多