Maybe the Teensy Audio Library should just be an extension of FAUST?


Well-known member
As I delve more into FAUST, I can't help but notice that their library is -extensive-. Anti-aliased oscillators, all types of filters, resonating bodies, compressors, fm synthesis, advanced math functions, reverbs, MIDI support, etc. I feel like I can make anything and all of the hard work has been done already.

I also keep seeing posts where people are asking for functions similar to these for the Teensy Audio Library which is presumably making more work for PJRC. I know the FAUST people have already done their best to get FAUST running on the TEENSY so there's some familiarity there. But I honestly wonder if the Teensy Audio Library just inherited all of the FAUST functions and became an extension of that, fully integrated, if that would cut down on the work required for PJRC and also give teensy users a more extensive audio library at the same time.

The FAUST programming language is basically pseudo-graphical, with lines and splitters being drawn ASCII style. It would really lend itself to being manipulated in the same style as the Teensy System Design Tool, with connections being drawn in a GUI.

If Teensy Audio Library just inherited all of the FAUST functions, we'd end up with a more powerful audio design tool and maybe less work for PJRC in the future not needing to catch up to FAUST's feature list.

Just a thought, carry on :)
The Teensy Audio library is tailored to run efficiently on particular ARM microcontrollers, using limited resources and directly interfacing DMA hardware. Faust is not that. There might well be a way to interwork with Faust generated code though. However I note Faust talks floating point to the outside world, and most of the Teensy's supported by the Audio Library don't have hardware floating point... Problem.
Ah, that's useful.

Ironically though the example they use is providing a band-limited waveform to the Audio Library, but it happens I added that functionality a few years ago and without needing floating point hardware so it supports all the Teensy's out of the box...
... trying to follow along with this...
Seems like the Teensy Audio Library would be a "hardware abstraction layer" for Faust, then?
I know that's a naive question. Main thing is a cross-platform library needs to not care about timers/interrupts or hardware-specific memory sizes or numerics.
It needs to have some kind of abstract class that can be implemented to use device-specific conventions, like the Teensy's interrupts and ::update() method and memory allocation.
A cross-platform library has to not care so much who is executing the DSP loop and has to have macros to convert data types easily.

In other words, especially in the world of embedded development, most developers pride themselves on the clever optimizations they put in their I/O and loops, and this is exactly what a cross-platform library needs to be lax with. Putting abstraction in the right place is the art of getting this adopted.