Ok, FFT is now fixed, and will be in the 1v92 release.
When 1v92 is released you'll be able to use this (slightly cleaner & faster) code:
var w = new Waveform(512,{doubleBuffer:true,bits:16});
var a = new Uint16Array(512);
w.on("buffer", function(buf) {
a.set(buf);
E.FFT(a);
var m=0,n=-1;
for (var i=150;i<250;i++)if(a[i]>n)n=a[m=i];
console.log(m.toFixed(0)+"Hz @ "+n);
});
w.startInput(D2,512,{repeat:true});
The 'for' loop is intentionally quite tight - Espruino's execution speed isn't that fast so I'm trying to make it as quick as possible.
The @ xxx part that's printed is the volume of the most prominent frequency. If no frequency is playing then you'll get a random frequency shown, but with a lower volume.
Also, just a note: don't expect great battery life when using this. Realistically you'll need to use a bigger power source if you want to get more than a day's life out of it.
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Ok, FFT is now fixed, and will be in the 1v92 release.
When 1v92 is released you'll be able to use this (slightly cleaner & faster) code:
The 'for' loop is intentionally quite tight - Espruino's execution speed isn't that fast so I'm trying to make it as quick as possible.
The
@ xxx
part that's printed is the volume of the most prominent frequency. If no frequency is playing then you'll get a random frequency shown, but with a lower volume.Also, just a note: don't expect great battery life when using this. Realistically you'll need to use a bigger power source if you want to get more than a day's life out of it.