2012-03-24 88 views
1

我試圖在文件上運行頻譜分析。由於我想分析的文件可能很長(40分鐘左右),因此實時分析這個文件對我來說不是一個真正的選擇。對音頻文件的非實時FFT分析

我目前使用Minin的FFT類,但它看起來像我只能運行已經播放的歌曲。我也看過ess library,但我明白這也僅限於實時流。

有沒有一種方法可以在小塊中迭代音頻文件,然後在該數據上運行fft?

這裏是什麼,我現在有一個簡化版本:

void setup() 
{ 
    minim = new Minim(this); 
    frameRate(30); 

    song = minim.loadFile("../shortfile.mp3", 1024); 
    song.loop(); 
    fft = new FFT(song.bufferSize(), song.sampleRate()); 
    background(#ffffff); 
} 

void draw() 
{ 
    fft.forward(song.mix); 

    for(int i = 0; i < height/2; i++) 
    {  
    intensity = constrain((log(fft.getBand(i)*1.4)/log(1.15)), 0, 40); 
    intensity = int(map(intensity, 0 , 40, 0, 255)); 
    stroke(strokeColour(int(intensity))); 

    point(framecount, i); 
    } 
} 

回答

2

官方GitHub軟件倉庫中的這個例子可能對您有所幫助;他們稱之爲offline analysis

+0

很酷,這似乎很有用。我現在還沒有真正考慮過這個問題,不過謝謝:) – Marco 2013-03-28 10:51:50