This is a creative MIDI delay that physically models incoming notes based on their velocity, and retriggers them as though they were bouncing with gravity. It also outputs panning data, so notes sound like they’re bouncing from one side of a mix to the other. This effect tends to produce a few distinct echoes before softening into a quiet trill. It can be helpful for breaking out of quantized time or adding organic feeling to a piece.
NOTE: To reduce processor load, this effect only sends MIDI Note On messages. For instruments that expect MIDI Note Off messages, chain this through my “Dedupe” script (patchstorage.com/dedupe).
Unlike my original gravity delay (patchstorage.com/gravity-delay), this effect has a single delay bus. Smooth panning wouldn’t work with multiple delays per note. If you need to simulate a multi-delay bus, you can always add multiple instances of this effect in your host.
Another big difference between this and the original effect is that each note is isolated to its own channel for the entire bounce duration. This ensures one note’s panning data doesn’t interfere with another’s. Notes are assigned to random channels, so you’ll need to monitor the first N channels – N being whatever value you set for N CHANNELS.
By default, panning messages are sent via MIDI CC10 on the note’s corresponding channel. To send a different CC number for each channel instead (CC46 – 61), click the SHIFT button. The current CC mode is always visible in the title.
The delay has 4 additional toggle settings:
• ACTIVE: Enables the delay; bypassed if off.
• SEND VELOCITY: Sends the physically modelled velocity alongside corresponding notes. If this toggle is off, the initial note velocity is sent with each retrigger.
• REVERSE: Imagine playing a video of a bouncing ball backwards; the delay starts out quiet and tightly spaced, then grows louder and sparser.
• MIRROR: Adds a mirror tail to your delay.
Here are their effects visualized:
STANDARD ACTIVE DELAY: █ █ █ █ █ █████
w/ VELOCITY: █ ▇ ▆ ▅ ▄ ▃▂▂▁▁
w/ REVERSE: █████ █ █ █ █ █
w/ REVERSE+VELOCITY: ▁▁▂▂▃ ▄ ▅ ▆ ▇ █
w/ MIRROR: █ █ █ █ █ █████████ █ █ █ █ █
w/ MIRROR+VELOCITY: █ ▇ ▆ ▅ ▄ ▃▂▂▁▁▁▂▂▃ ▄ ▅ ▆ ▇ █
w/ MIRROR+REVERSE: █████ █ █ █ █ █ █ █ █ █ █████
w/ MIRROR+REVERSE+VELOCITY: ▁▁▂▂▃ ▄ ▅ ▆ ▇ █ ▇ ▆ ▅ ▄ ▃▂▂▁▁
There are also a few knob settings:
• GRAVITY: Acceleration due to gravity in the physical model. Lower values cause longer gaps between bounces.
• FRICTION: How much velocity is lost at each bounce. Lower values cause the delay tail to last longer.
• CC START: Panning data is sent from MIDI CC 10, on the same MIDI channel as its corresponding note. The CC START value is sent on the initial bounce. It then smoothly transitions to CC END over the note bounce’s duration. If CC START is lower than CC END, it will pan from left to right. Otherwise it will pan from right to left.
• CC END: See above.
• 🔝BOUNCES: Caps the number of MIDI Note On messages sent per note in. Use this if CPU is spiking, or if your synth is flooded with incoming notes.
• +RANDOM: Increases gravity, friction, or CC start/end settings by a random amount per note, up to the selected value. For instance, if FRICTION is set to 7 and its corresponding +RANDOM knob is set to 4, the resulting range will be 7 to 11. To make each new note bounce from a random panning position to a random panning position, set both CC START and CC END to 0 and set their corresponding +RANDOM knobs to 127.
• N CHANNELS: To ensure one note’s panning doesn’t interfere with another’s, each note is placed on its own channel until completing its final bounce. Incoming notes are placed on available channels randomly. N CHANNELS sets the number of available channels, which in effect sets the effect’s polyphony.
Here are their effects visualized:
LOW GRAVITY: █ ▇ ▆ ▅ ▄ ▃ ▂ ▂ ▁▁
HIGH GRAVITY: █ ▇ ▆▅▄▃▂▁
LOW FRICTION: █ █ ▇ ▇ ▆ ▆ ▅ ▅ ▄ ▄ ▃▃▂▂▂▁▁▁▁
HIGH FRICTION: █ ▅ ▃▂▂▁▁
Feel free to leave questions, comments, and bug reports at patchstorage.com/panning-gravity-delay. You can find more of my work at rileyjshaw.com.
• v1.0.0: Initial release.