mirror of
https://github.com/processing/processing4.git
synced 2026-02-03 21:59:20 +01:00
56 lines
1.5 KiB
Plaintext
56 lines
1.5 KiB
Plaintext
/**
|
|
* This sketch demonstrates how to use an FFT to analyze
|
|
* the audio being generated by an AudioPlayer.
|
|
* <p>
|
|
* FFT stands for Fast Fourier Transform, which is a
|
|
* method of analyzing audio that allows you to visualize
|
|
* the frequency content of a signal. You've seen
|
|
* visualizations like this before in music players
|
|
* and car stereos.
|
|
*/
|
|
|
|
import ddf.minim.analysis.*;
|
|
import ddf.minim.*;
|
|
|
|
Minim minim;
|
|
AudioPlayer jingle;
|
|
FFT fft;
|
|
|
|
void setup()
|
|
{
|
|
size(512, 200, P3D);
|
|
|
|
minim = new Minim(this);
|
|
|
|
// specify that we want the audio buffers of the AudioPlayer
|
|
// to be 1024 samples long because our FFT needs to have
|
|
// a power-of-two buffer size and this is a good size.
|
|
jingle = minim.loadFile("jingle.mp3", 1024);
|
|
|
|
// loop the file indefinitely
|
|
jingle.loop();
|
|
|
|
// create an FFT object that has a time-domain buffer
|
|
// the same size as jingle's sample buffer
|
|
// note that this needs to be a power of two
|
|
// and that it means the size of the spectrum will be half as large.
|
|
fft = new FFT( jingle.bufferSize(), jingle.sampleRate() );
|
|
|
|
}
|
|
|
|
void draw()
|
|
{
|
|
background(0);
|
|
stroke(255);
|
|
|
|
// perform a forward FFT on the samples in jingle's mix buffer,
|
|
// which contains the mix of both the left and right channels of the file
|
|
fft.forward( jingle.mix );
|
|
|
|
for(int i = 0; i < fft.specSize(); i++)
|
|
{
|
|
// draw the line for frequency band i, scaling it up a bit so we can see it
|
|
line( i, height, i, height - fft.getBand(i)*8 );
|
|
}
|
|
}
|