2016-11-22 21 views
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となります)。私は時間の後に実際にループ音楽を行いますが完全に正確なので、正確にループするように遅延を与える方法はありません描画ループに遅延()関数を配置しました。

何か助けていただければ幸いです。

+0

クロスポスト間をリンクしてください:https://forum.processing.org/two/discussion/19217/making-a-basic-music-sequencer-with-minim –

答えて

0

あなたは、すべてのXフレームアクションを取ることframeCount変数と剰余%演算子を使用することができます。両方の詳細についてはthe referenceをご覧ください。ここで

は、すべての60のフレームのランダムな円を描く少し例を示します

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

あなたが唯一の代わりに円を描くと、あなたがノートを演奏しているはずだ、似た何かをすることができます。

関連する問題