Я начал проект по созданию музыкального секвенсора с минимальным использованием классов инструментов и функций playNote и т. Д. У меня есть последовательность нот, работающая нормально, но у меня нет возможности их зациклить. Вот основной код:
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, чтобы он давал инструментам последовательность от начала массива после того, как он завершил один цикл. Если я помещаю функции последовательности в цикл рисования, он невероятно быстро отправляет ноты инструмента (возможно, около 60 кадров в секунду, если это значение по умолчанию для рисования). Я поместил функцию delay () в цикл отрисовки, которая фактически зацикливает музыку по прошествии времени, но нет способа указать задержке число, которое было бы полностью точным, чтобы оно повторялось точно.
Некоторая помощь будет оценена.