0

インストゥルメント クラスや 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 の先頭に戻るように反復処理して、1 つのループが終了した後に配列の先頭からのシーケンスをインストゥルメントに与えることです。シーケンス関数を描画ループに入れると、インストゥルメント ノートが信じられないほど高速に送信されます (描画のデフォルトであれば約 60fps です)。時間の経過後に実際に音楽をループする描画ループに delay() 関数を配置しましたが、遅延に完全に正確な数値を与える方法がないため、正確にループします。

いくつかの助けをいただければ幸いです。

4

1 に答える 1