【问题标题】:Creating a basic music sequencer with Minim library in Processing - trouble with looping在 Processing 中使用 Minim 库创建基本音乐音序器 - 循环出现问题
【发布时间】:2016-11-22 13:23:01
【问题描述】:

我已经开始了一个项目,使用乐器类和 playNote 函数等创建一个带有 minim 的音乐音序器。我的一系列音符工作正常,但我无法循环它们。主要代码如下:

import ddf.minim.*;
import ddf.minim.ugens.*;

Minim       minim;
AudioOutput out;
Delay myDelay;
int i;
int endSeq;

public void settings() {
  size(800, 300, P2D);
}

void setup() {

  minim = new Minim(this);
  out = minim.getLineOut();
  myDelay = new Delay(1.5,0.5, false,false);
  bassSeq(); // starts bass sequence function
  chordSeq(); // starts chord sequence function
}

void draw() {
}

这是描述整个低音序列的 bassSeq 函数:

void bassSeq(){
float[] stepArray = {0.00, 0.75, 2.00, 2.5, 2.75, 3.5, 4, 4.5};
float[] decayArray = {1.0, 0.5, 0.5, 0.5, 0.5, 0.2, 0.5, 1.0};
float[] noteArray = {C2, F2, E2, G2, B2, C2, C2, B2};

for (i = 0; i <= 7; i++){

  out.pauseNotes();
  out.setTempo(125);
  out.playNote(stepArray[i], decayArray[i], new BassInstr(noteArray[i], 0.5, out ) );
  out.resumeNotes();

}
}

问题是,如果我将这些功能放在设置中,它们只会播放一次。理想情况下,我想要做的是迭代回到 i=0 的开头,这样它就可以在完成一个循环后从数组的开头为仪器提供序列。如果我将序列函数放在绘图循环中,它会以非常快的速度发送仪器音符(如果这是绘图的默认值,可能会在 60fps 左右)。我在绘图循环中放置了一个 delay() 函数,它实际上会在时间之后循环播放音乐,但是没有办法给延迟一个完全准确的数字,因此它可以准确循环。

我们将不胜感激。

【问题讨论】:

标签: processing minim


【解决方案1】:

您可以使用frameCount 变量和模% 运算符每X 帧执行一次操作。更多信息请访问the reference

这是一个每 60 帧随机绘制一个圆圈的小例子:

void draw(){
  if(frameCount % 60 == 0){
   ellipse(random(width), random(height), 15, 15);   
  }
}

你也可以做类似的事情,只不过不是画圆圈,而是弹奏音符。

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2014-07-14
    • 2016-05-02
    • 2011-06-19
    相关资源
    最近更新 更多