Skip to content

Commit 625eb54

Browse files
committed
Adding RFFT example.
1 parent 8c4ba49 commit 625eb54

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

examples/rfft.html

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<html>
2+
<head>
3+
<script language="javascript" src="js/processing.js"></script>
4+
<script language="javascript" src="js/init.js"></script>
5+
<script language="javascript" src="../dsp.js"></script>
6+
</head>
7+
<body>
8+
<style>
9+
body { background: black; margin:0; padding:0;}
10+
</style>
11+
12+
<script>
13+
var frameBufferSize = 4096;
14+
var bufferSize = frameBufferSize/2;
15+
16+
var signal = new Float32Array(bufferSize);
17+
var peak = new Float32Array(bufferSize);
18+
19+
var fft = new RFFT(bufferSize, 44100);
20+
21+
function loadedMetaData(event) {
22+
var audio = document.getElementById('input');
23+
audio.mozFrameBufferLength = frameBufferSize;
24+
audio.addEventListener("MozAudioAvailable", audioAvailable, false);
25+
}
26+
27+
function audioAvailable(event) {
28+
// deinterleave and mix down to mono
29+
signal = DSP.getChannel(DSP.MIX, event.frameBuffer);
30+
31+
// perform forward transform
32+
fft.forward(signal);
33+
34+
// calculate peak values
35+
for ( var i = 0; i < bufferSize; i++ ) {
36+
fft.spectrum[i] *= -1 * Math.log((fft.bufferSize/2 - i) * (0.5/fft.bufferSize/2)) * fft.bufferSize; // equalize, attenuates low freqs and boosts highs
37+
38+
if ( peak[i] < fft.spectrum[i] ) {
39+
peak[i] = fft.spectrum[i];
40+
} else {
41+
peak[i] *= 0.99; // peak slowly falls until a new peak is found
42+
}
43+
}
44+
}
45+
</script>
46+
47+
<script target="#fft" type="application/processing">
48+
void setup() {
49+
size(1400, 600);
50+
colorMode(HSB, 360, 100, 100);
51+
strokeWeight(3);
52+
frameRate(60);
53+
//strokeCap(SQUARE);
54+
}
55+
56+
void draw() {
57+
background(0);
58+
//fill(0, 60);
59+
//rect(0, 0, width, height);
60+
for ( int i = 0; i < fft.spectrum.length/2; i += 3 ) {
61+
if (3 * i > width) { break; }
62+
var magnitude = fft.spectrum[i];
63+
64+
// draw magnitudes
65+
stroke((i) % 360, 60, constrain(magnitude * 6, 20, 100));
66+
line(3*i, height, 3*i, height - magnitude * 16);
67+
68+
// draw peak indicators
69+
stroke((i) % 360, 60, constrain(magnitude * 100, 50, 100));
70+
line(3*i, height - peak[i] * 16 - 1, 3*i, height - peak[i] * 16);
71+
}
72+
/*
73+
if (frameCount % 100 == 0 ) {
74+
println(FRAME_RATE);
75+
}
76+
*/
77+
}
78+
</script>
79+
80+
<audio id="input" src="audio/corban-peddle.ogg" controls="true" onloadedmetadata="loadedMetaData(event);"></audio><br />
81+
82+
<div><canvas id="fft"></canvas></div>
83+
</body>
84+
</html>

0 commit comments

Comments
 (0)