Programmed Warps’ factory testing GUI tool.
Inspected defective Warps from beta tester #1. Just a solder residue blob that got trapped between the pins of a potentiometer!
Rewrote from scratch Warps’ sample rate reduction code. The dirty secret is that if we were to judge by CPU use, Warps would primarily be a sample rate conversion module smile emoticon The DSP code works internally at four sample rates – 96kHz (native rate of the AD/DA, internal oscillator, digital VCA), 576kHz (cross-modulations, non-linear operations), 32kHz (filter-bank middle bands), and 8kHz (filter-bank lowest bands), and to do this, there are various polyphase FIR upsamplers/downsamplers ticking inside. I started a tedious process of fine-tuning the original “naive” resampling code by unrolling loops, reordering computations, trying various ways of storing the coefficients (arrays in flash or in RAM, in order or in polyphase decompositions) and found that the code was a mess to unroll by hand! I ended up using the same approach as in some of my other Mutable or-pre Mutable projects – code generators in the form of C++ templates unrolling, pre-computing and inlining at compile-time everything that can be pre-computed. The new upsampling/downsampling code was 60% faster and all gains were reinvested in increasing the length of the filters.
Optimized Warps’ filter bank code and used the CPU gains to add more bands (from 16 to 20).
Implemented several variations of Warps’ vocoder operations, including a nice “formant sweep” that warps/shifts/pinches the vector of gains from the analysis filter bank.
Did a bunch of performance optimisations to Warps’ code, in particular replacing lookup tables by the actual computations in a few places! All gains reinvested in faster reaction to CV changes.
Started working on Warps’ easter egg.