我已经开始了一个项目,使用乐器类和 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() 函数,它实际上在时间之后循环播放音乐,但没有办法给延迟一个完全准确的数字,因此它可以准确循环。
一些帮助将不胜感激。