2014-04-23 4 views
1

누군가가 나를 도울 수 있는지 궁금합니다. 저는 현재 미학 프로젝트를 위해 FFT를 사용하는 처리를 사용하는 프로젝트에 참여하고 있습니다. 내가하고 싶은 것은 사용자가 노래를 가져올 수 있고, fft가 반응하여 노래를 기반으로 다른 색상을 표시하는 시각화 도구 역할을하도록 허용하는 것입니다. 내가 겪고있는 문제는 fft 자체를 작동시킬 수 없다는 것입니다. fft를 인식하도록 처리하려면 어떻게해야합니까?처리 중 fft 사용

여기는 내가 사용하고있는 fft 코드입니다.

fft = new FFT(song.bufferSize(), song.sampleRate()); 

    //DRAW FFT 
    fft.forward(song.mix); 
    colorMode(HSB, 255); 


    void wavewave() { 
    float spread = map(450, 0, width, 1, 21.5); 
    float x = 0; 
    for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
    { 
    x = i/spread; 
    stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
    255, //Saturation 
    255); //Brightness 
    line(x, 512, x, 512 - fft.getFreq(i) * 4); 
    } 
    //map(value, minimum1, maximum1, minimum2, maximum2); 

    x = 0; 
    for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
    { 
    x = i/spread; 
    stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
    255, //Saturation 
    255); //Brightness 
    line(x, 512, x, 512 + fft.getFreq(i) * 4); 
    } 
    } 

나는 당신이 어떤 구문 오류를 갖고있는 것 같다 오류

import ddf.minim.spi.*; 
import ddf.minim.signals.*; 
import ddf.minim.*; 
import ddf.minim.analysis.*; 
import ddf.minim.ugens.*; 
import ddf.minim.effects.*; 
import java.io.File; 
import java.io.FilenameFilter; 


    color waveColor; 
    int waveIncr = 0; 
    int counter = 0; 
    int songCounter = 0; 
    int fadeLevel = 10; 


    float buttonX; 
    float buttonY; 
    float buttonW; 
    float buttonH; 

    Minim minim; 
    AudioPlayer player; 
    FFT fft; 
    ArrayList<Songs> s; 
    int k; 

    String filename; 

    boolean isSelected = false; 

    void setup() { 

     s = new ArrayList(); 

     textSize(24); 

     frame.setResizable(false); 

     background(255); 

     size(600, 600); 

     fill(0); 
     stroke(0); 
     noFill(); 

     buttonW = 200; 
     buttonH = 50; 
     buttonX = width - width/2 - buttonW/2; 
     buttonY = height/2 - buttonH/2; 

     // Minim stuff 
     minim = new Minim(this); 
    } 

    void draw() { 

     background(255); 
     fill(0); 

     rectMode(CORNER); 

     rect(buttonX, buttonY, buttonW, buttonH); 

     fill(255); 

     textAlign(LEFT); 
     text("Import File", buttonX+35, buttonY+30); 

     if (isSelected) { 
     // s.get(k).waveform(); 
     s.get(k).wavewave(); 
     } 
    } 

    void mouseClicked() { 
     if (mouseX>buttonX && mouseX < buttonX+buttonW && mouseY > buttonY && mouseY < buttonY+buttonH) { 
     selectInput("Import music file", "fileSelected"); 
     } 
    } 

    /* Taken from Processing.org */ 
    void fileSelected(File selection) { 
     if (selection == null) { 
     println("Window was closed or user hit cancel"); 
     } 
     else { 
     filename = selection.getAbsolutePath(); 
     s.add(new Songs(player, filename, "Filename")); 
     isSelected = true; 
     } 
    } 

    // stop minim and the player. 
    void stop() { 
     player.close(); 
     minim.stop(); 
     super.stop(); 
    } 

    class Songs { 
     AudioPlayer song; 
     String directory; 
     String songName; 
     Songs(AudioPlayer song, String directory, String songName) { 

     song=minim.loadFile(directory);  

     this.song=song; 
     this.songName=songName; 
     song.play(); 
     } 



     fft = new FFT(song.bufferSize(), song.sampleRate()); 

     //DRAW FFT 
     fft.forward(song.mix); 
     colorMode(HSB, 255); 


     void wavewave() { 
     float spread = map(450, 0, width, 1, 21.5); 
     float x = 0; 
     for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
     { 
     x = i/spread; 
     stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
     255, //Saturation 
     255); //Brightness 
     line(x, 512, x, 512 - fft.getFreq(i) * 4); 
     } 
     //map(value, minimum1, maximum1, minimum2, maximum2); 

     x = 0; 
     for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
     { 
     x = i/spread; 
     stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
     255, //Saturation 
     255); //Brightness 
     line(x, 512, x, 512 + fft.getFreq(i) * 4); 
     } 
     } 


    } 
+0

최소한의 작업 예제로 코드를 줄이고 사용중인 언어가 포함 된 태그를 추가하십시오. – siritinga

+0

그것을 줄이려면 아무 것도 없습니다. 코드에서 작동하지 않는 유일한 것은 fft입니다. 태그에 대해서는 이미 처리 중입니다. – user3565990

+0

최소한으로는 모든 그림, 마우스 클릭, 파일 로딩 등을 제거하는 것입니다. 문제가있는 FFT 통화 만 남기고 가짜 데이터로 전화를 걸면됩니다. 그리고 언어 태그에 의해 당신이 사용하는 Java 나 다른 언어를 의미했기 때문에 사람들이 그 질문을 찾도록 도울 것입니다. – siritinga

답변

1

로, 알 수없는 토큰 FFT를 점점 계속.

import ddf.minim.spi.*; 
import ddf.minim.signals.*; 
import ddf.minim.*; 
import ddf.minim.analysis.*; 
import ddf.minim.ugens.*; 
import ddf.minim.effects.*; 
import java.io.File; 
import java.io.FilenameFilter; 


color waveColor; 
int waveIncr = 0; 
int counter = 0; 
int songCounter = 0; 
int fadeLevel = 10; 


float buttonX; 
float buttonY; 
float buttonW; 
float buttonH; 

Minim minim; 
AudioPlayer player; 
FFT fft; 
ArrayList<Songs> s; 
int k; 

String filename; 

boolean isSelected = false; 

void setup() { 

    s = new ArrayList(); 

    textSize(24); 

    frame.setResizable(false); 

    background(255); 

    size(600, 600); 

    fill(0); 
    stroke(0); 
    noFill(); 

    buttonW = 200; 
    buttonH = 50; 
    buttonX = width - width/2 - buttonW/2; 
    buttonY = height/2 - buttonH/2; 

    // Minim stuff 
    minim = new Minim(this); 
} 

void draw() { 

    background(255); 
    fill(0); 

    rectMode(CORNER); 

    rect(buttonX, buttonY, buttonW, buttonH); 

    fill(255); 

    textAlign(LEFT); 
    text("Import File", buttonX+35, buttonY+30); 

    if (isSelected) { 
    // s.get(k).waveform(); 
    s.get(k).wavewave(); 
    } 
} 

void mouseClicked() { 
    if (mouseX>buttonX && mouseX < buttonX+buttonW && mouseY > buttonY && mouseY < buttonY+buttonH) { 
    selectInput("Import music file", "fileSelected"); 
    } 
} 

/* Taken from Processing.org */ 
void fileSelected(File selection) { 
    if (selection == null) { 
    println("Window was closed or user hit cancel"); 
    } 
    else { 
    filename = selection.getAbsolutePath(); 
    s.add(new Songs(player, filename, "Filename")); 
    isSelected = true; 
    } 
} 

// stop minim and the player. 
void stop() { 
    player.close(); 
    minim.stop(); 
    super.stop(); 
} 

class Songs { 
    AudioPlayer song; 
    String directory; 
    String songName; 
    Songs(AudioPlayer song, String directory, String songName) { 

    song=minim.loadFile(directory);  

    this.song=song; 
    this.songName=songName; 
    song.play(); 


    fft = new FFT(song.bufferSize(), song.sampleRate()); 
    } 

    void wavewave() { 
    //DRAW FFT 
    fft.forward(song.mix); 
    colorMode(HSB, 255); 

    float spread = map(450, 0, width, 1, 21.5); 
    float x = 0; 
    for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
    { 
     x = i/spread; 
     stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
     255, //Saturation 
     255); //Brightness 
     line(x, 512, x, 512 - fft.getFreq(i) * 4); 
    } 
    //map(value, minimum1, maximum1, minimum2, maximum2); 

    x = 0; 
    for (int i = 0; i < song.sampleRate() && x < width; i += spread) 
    { 
     x = i/spread; 
     stroke(map(fft.getFreq(i), 0, 256, 0, 360) * 2, //Hue 
     255, //Saturation 
     255); //Brightness 
     line(x, 512, x, 512 + fft.getFreq(i) * 4); 
    } 
    } 
} 

당신은 미래에 오류가 당신을 도울 수는 PDE X 모드를 시도해야, 플러스 끝내 : 여기에 귀하의 코드는 비트에 대해 이동입니다!

+0

도와 줘서 고마워. 이것은 나를 많이 도왔다. – user3565990

+0

멋지므로 마음에들 듯이 투표/표를하십시오.) –

+0

실제로 코드에 조금 더 추가 할 생각입니다. 실제로 이것은 미학에 기반한 독일어 수업의 프로젝트이기 때문에 저는 생각합니다. 정말로 음악과 더 많이 상호 작용하기를 원합니다. 추가 할 수있는 것에 대한 아이디어가 있습니까? – user3565990