I'm pretty sure E.FFT doesn't call into CMSIS... The issue is that it has to deal with all different kinds of input data, and JavaScript's default number type is float64 so that's what the FFT uses - however the floating point hardware can't handle float64 at all. It means everything is happening in software - plus there's the format conversion too.
I'm honestly not sure if anyone would notice if it changed to Float32 though - and that would be possible to accelerate and would be pretty fast.
I'm not sure how realistic using CMSIS would be but even a normal integer FFT should be pretty speedy.
However, I think ultimately you're going to end up a bit disappointed trying to do audio in JavaScript with Espruino. As noted on the Waveform page (http://www.espruino.com/Waveform) you're limited to around 10k samples/sec for input - the Waveform's trying to prioritise flexibility over outright performance (eg allowing polyphonic sound and multiple concurrent inputs).
You could use the hardware directly with DMA buffers though - either with C code or by poking registers with JavaScript - but it's not going to be super easy.
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.
I'm pretty sure E.FFT doesn't call into CMSIS... The issue is that it has to deal with all different kinds of input data, and JavaScript's default number type is float64 so that's what the FFT uses - however the floating point hardware can't handle float64 at all. It means everything is happening in software - plus there's the format conversion too.
I'm honestly not sure if anyone would notice if it changed to Float32 though - and that would be possible to accelerate and would be pretty fast.
One option is to use the inline C code with an integer FFT: http://www.espruino.com/InlineC
I'm not sure how realistic using CMSIS would be but even a normal integer FFT should be pretty speedy.
However, I think ultimately you're going to end up a bit disappointed trying to do audio in JavaScript with Espruino. As noted on the Waveform page (http://www.espruino.com/Waveform) you're limited to around 10k samples/sec for input - the Waveform's trying to prioritise flexibility over outright performance (eg allowing polyphonic sound and multiple concurrent inputs).
You could use the hardware directly with DMA buffers though - either with C code or by poking registers with JavaScript - but it's not going to be super easy.