2016-11-22 7 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의 시작 부분으로 돌아가서 하나의 루프를 마친 후에 배열의 시작 부분에서 악기에 시퀀스를 제공하기를 원합니다. 만약 드로잉 루프에 시퀀스 기능을 넣으면 인스트루먼트 노트가 놀라 울 정도 빨리 전송됩니다 (드로잉의 기본값 인 경우 약 60fps). 나는 실제로 시간이 지나면 음악을 반복하는 draw 루프에 delay() 함수를 넣었지만 완전히 지연된 숫자를 전달할 방법이 없으므로 정확하게 반복됩니다.

일부 도움을 주시면 감사하겠습니다.

+0

크로스 포스트 사이를 연결하십시오. https://forum.processing.org/two/discussion/19217/making-a-basic-music-sequencer-with-minim –

답변

0

변수 %을 사용하면 X 프레임마다 작업을 수행 할 수 있습니다. 두 가지에 대한 자세한 내용은 the reference에서 확인할 수 있습니다.

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

당신은 유사한 만 대신 그리기 원을 할 수있는, 당신이 음을 연주 할 것 :

여기에 임의의 원마다 60 개 프레임을 그리는 작은 예입니다.