             lfoAngle = midiToAngle key
 
             # Amplitude starts with left hand velocity
-            wobbleAmp = Math.pow(note.velocity / 100, 3.0)
+            wobbleAmp = Math.pow(note.velocity / 100, 2.0) * 12.0
 
             # Scale based on particle fuzziness
-            wobbleAmp *= 100.0 / p.falloff
+            wobbleAmp /= p.falloff
 
             # Fade over time
             wobbleAmp /= 1 + age


        # One rainbow per octave
        hue = (p.note.key - 60 + 0.1) / 12.0
        p.color = OPC.hsv hue, 0.3, 0.8

        # Intensity mapped to velocity, nonlinear
        p.intensity = Math.pow(p.note.velocity / 100, 3.0) * 0.25 * brightness

        # Falloff gets sharper as the note gets higher
        p.falloff = 20 + (p.note.key - 60) * 20

        # Add influence of LFOs
        for key, note of lfoNotes

            x += wobbleAmp * Math.cos lfoAngle
            y += wobbleAmp * Math.sin lfoAngle

        # Update velocity; use the XZ plane
        p.velocity[0] += (x + origin[0] - p.point[0]) * gain
        p.velocity[2] += (y + origin[2] - p.point[2]) * gain

        # Fixed timestep physics
        for i in [1 .. numTimesteps]
            p.point[0] += p.velocity[0]
            p.point[1] += p.velocity[1]
            p.point[2] += p.velocity[2]

        p.life -= timeStep / particleLifetime

