soundbytes octagon

Soundbytes proudly presents the Octagon. A new Synth based on the priciples of the finite element method.


  • Overwiew
  • Description of modules and controllers
  • Version history
  • Some notes on the theory behind the routing matrix

(c) andreas sumerauer 2012


The Soundbytes octagon uses a mathematical modell of 8 vibrating masses. these can be interconnected by any number of springs to achive multiple degree of freedom systems.
Does that sound intimidating? Never mind. I think I have provided a user panel that makes it easy to come to terms with the synth.

A short walkthrough:

The panel has two main sections, on the left there is the Master section, Here is where all the global settings are made. The right part with the mixer like layout allows you to tweak the settings for each of the 8 particles.


  • [Level] - volume control
  • [Release] - Volume Amplitude release


Settings for the Continous Controller

  • [CC Select] - Selects the controller source. Choices are Breath, Modulation wheel, Aftertouch. Panel lets You set the controller amount using level wheel alone(without Midi CC Input) while Off sets the CC level to zero.
  • [Level] - Controller level adjustment.


Controls the properties of the bow. It does not always sound like one. That is why I have called it the NoBo.

  • [Glide],[Grip] - Friction comes in two flavours. Grip for a body that is not moving, Glide for a moving body. The grip Coefficient is always higher than the Glide one.(starting a motion needs a greater force than maintainig it.)
  • [Thres],[Width] - Threshold(of speed difference between particle and surface or between particle and bow)that switches between glide and grip. With defines the width of the crossfade region.


Bow properties.

  • [Speed] - Bow Speed.
  • [CC Amt] - CC amount. CC Amt set to hard left: CC has no influence Speed is fixed to the panel value. Hard right: Speed = knob setting * CC
  • [Pressure] - Bow pressure.
  • [Noise] - Noise Amount in Bow pressure.
  • [Negative] - use for negative Friction force. (use very carefully to avoid overflow)


An excitation that sounds like scratching with a rough material. Use it to give some edge to Your sounds. Sand is controled by the CC parameter. You can use a similar effect with the Exci envelope by setting the Noise Level to maximum.

  • [Amount] - Sand amount
  • [Color] - The 'Grain' of the sand.
  • [on] - can be switched off to save CPU power.


Excitation envelope (Envelopes are triggered on NoteOn)


In case You don't want to use a CC for bowing.


Global Damping - Amount of damping that is common to all particles.


Structural Damping. The algorithm is very crude. I just needed something to get rid of overload. Can also be used for a strange sound effects.


Tweak the spring elasticity to tune the presets

Particle Parameters:

Routing Matrix:

This is the heart of the synth. These buttons define which particles are connected through a spring. It works very similar to a patch bay. The buttons in the upper row are meant for connections to the ground.
IMPORTANT: A least one of these has to be pressed - otherwise Your creation will simply fly away when hit. (that can also be fun - but You won't hear to much ;-) The Buttons below are for interconnecting the particles. Particles to the right have less buttons because there can be only one spring between two elements. So if You want to connect 8 > 2 then think 2 > 8 instead. Look up the second column and hit the last button there.
Here are the first three Columns:

   [1]      [2]      [3]
[5] [5] [5] ...
[2] [6] [6] [6]
[3] [7] [3] [7] [7] ...
[4] [8] [4] [8] [4] [8]

particles that have no connection to the ground or to other elements are muted by default. You should still switch unused particles off manually to save CPU power. (use [on] buttons below the Routing Matrix)

How to use the routing Matrix:

Best to use pen and paper here.

  • Draw 8 spots
  • Write the numbers 1...8 next to the spots
  • draw lines between the spots You want to have connected.
  • Now look at the first spot. For each line that goes to another spot hit the respective button in the routing matrix. When the particle is connected to the ground hit the button in the first row.
  • Now do the same for particles 2 ...7 and You're done (why not 2..8 ? -try it. You'll see...)
    The settings in the Screenshot correspond to the pattern in the example above.


  • [Loosen] - This control gradually disconnects the particles.
  • [Weirdize] - This Button does does funny things with particle eight. The effect is a bit chaotic (but not too much). Be careful when many particles are connected to number eight. Start with a high damping factor and gradually reduce it to avoid overflow.

Particle Controls:

  • [Tap] - There is a volume sliders for each particle. The Range is -1...1 to allow for phase switched input.
  • [Pan] - Panorama Position of each tap.
  • [Bo/B-/Fri/Off] - Friction control.
    • Bo - Particle is bowed,
    • B- - Particle is bowed but in opposite direction
    • Fri - Fricton (bowSpeed=0)
    • off - No Friction.
  • [Init] - This value controls Excitation Envelope amount (and also impulse intensity)
  • [Local Damp] - The Local Damping value is added to the global setting.
  • [Mass] - The Particle Mass can be tweaked here. This has a direct impact on the frequencies of the overtones. Matters are however a bit complex. To get predictable results You'd most probably have to solve some integrals first.


A simple impulse generator is available for testing purposes. It has it's own panel.

  • [Level] - sets imulse level
  • [trigger] - sends the impulse to the synth
  • [OnGate] - if selected an impulse is generated with every Note On message
  • [OnReset] - Generates an impulse on Synth reset (F2)

Version History:

Octagon Beta1
First public release
Octagon Beta1d

  • Octagon is now Polyphonic. You need a fast CPU to run it though. Future versions will be switchable between Mono- and Poliphonic.
  • Added an Amplitude Envelope (necessary in a polyphonic environment). There is only one parameter: [Release]
  • New 'Sandpaper' excitation added. Controls are [Amount],[Color] and an [on] switch.
  • unused Particles can now be switched off. This saves CPU power and enables higher poliphony for presets that don't utilize all eight particles.
  • added a [color] control for the Noise that is mixed to the bow excitation
  • added a [Weirdize] button to the routing matrix. It does strange things with particle eight. It was first a routing bug but I liked it so much that I implemented it as a feature. Be careful when using it. The feature will introduce energy into the system. sometimes so much that the synth will stop with a bang. (Don't be worried. There is a rather effective overload safeguard.) You will then have to reset the synth engine (F2) to enable sound output again.
Octagon Beta1d+
  • added a [loosen] control to the routing matrix. This gradually disconnects the particles.
  • renamed the local elasticity control to Mass. This is more in accordance with the idea behind the model. The new parameter behaves a bit differently. it is 1/elasticity. Introduced an [1/M] Button so that the knobs can be used both ways.
  • Added negative Bow direction. (useful if You want to bow at different points in opposite directions)
  • Added a first preliminary set of 23 Presets.
Octagon R1
  • reworked the panel layout.
  • replaced the Bow algorithm
  • fixed some minor bugs
  • improved the disconnection algorithm for the Loosen control.

Some Notes on the theory behind the routing Matrix:

A Spring between two Particles is stretched or compressed according to the current distance between the connected points. (when switched on) So the Springforce between Particle three and five for example can be calculated as:

(x3 - x5)* K active on particle 5 or
(x5 - x3)* K on particle 3

(All the springs have an equal elasticity K. I am also assuming small Amplitudes. This is why I can use the linear approximation here.)
On the other hand Particle 3 connected to the ground will be subject to a spring force:

-x3 * K

So the sum of all the spring forces on a certain particle is

((xa + xb + ... + xn) - (NumberOfSprings * xitself)) * K

Note that -xitself is contributed by each external spring.
The routing Matrix calculates the two necessary values:

Sum of external xses and
Number of springs for each particle.

Look into any of the submacros within the routing Matrix. (Buttons1 - Buttons8) You will see that the Top button only contributes to SpringNum while the other buttons also add the input from the respective particle to the Wave parameter. (which is actually the Sum of Xses)
The Values of buttons only present at earlier Particle columns are fed into the Sum through the Macro Input object while the x and SpringNum values are leaving the macro to be used for the calculation of the later particles.
(a huge number of connections to get right. Luckily one went wrong and that resulted in the Weirdize button)

© andreas sumerauer 2012  contact information -