You are reading a single comment by @Gordon and its replies. Click here to read the full conversation.
  • 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.

About

Avatar for Gordon @Gordon started