One of the first things I programmed in C
A Max MSP audio external. Chaotic Triangle Wave Oscillator Bank with Waveshaping, FM, ++
AUTHOR: Daniel Bennett (email@example.com) DATE: 24/01/2015 DESCRIPTION: Multiple interacting Peter Blasser style "Bounds and Bounce" triangle oscillators. Overview: - Imaginary balls moving along vector (s,s) with s defined by user per ball - Y component reverses sign when the cursor reaches bound. - lower bound of ball n is location of ball n-1 upper bound of ball n is location of ball n+1 - At fixed bounds (-1..1) behaviour for a single voice instance is as normal, crude (non bandlimited ) triangle oscillator. for want of a more meaningful value, rate input scaled as the frequency of the fixed bounds (-1...1) case. Extensions to Peter Blasser approach: - voice-to-voice Frequency modulation - variable slope on triangle - waveshaping to pseudo-sinusoud and hyperbolic sine Variable slope has far more effect on character of the oscillator than one might expect, impacting not only on timbre as per classical subtractive synthesis methods, but also on pitch and microrhythmic signature. Works on Max 6 & higher, 32 and 64 bit. Version: 0.3 DevNotes: Having made the PTR calcs optional (mode), triangle symmetry calcs are probably the highest single overhead remaining. I tried moving these outside of the audio loop but found that the constantly changing width neccessitates checking that gradient is within limits & conditionally recalculating on a sample-by-sample basis; so the potential gains here are minimal (@ optimisation -O3), & cost in code complexity is considerable. However, if anyone finds an elegant solution to improving efficiency of the calcs I'd be really interested to see. Probably (for x86 processors) int truncation is worth optimising?