Core concepts
Adaptive triggers in plain English
The DualSense triggers can push back. Here's what adaptive triggers do, how Universal Controller MIDI drives them, and why they feel like a tactile compressor.
Updated
Adaptive triggers turn your fingers into a meter — a tactile mirror of whatever's happening in your DAW. They're motors inside the DualSense's L2 and R2 buttons that push back with programmable resistance, and Universal Controller MIDI is the only MIDI bridge that drives them in real time from incoming MIDI events.
What's actually in there
Each trigger has a tiny brushless motor driving a worm gear that resists travel. Sony exposes three primary modes through the controller firmware: continuous (constant force), section (force only over a defined travel range), and vibration (rapid pulses at a chosen Hz, 1–40).
Universal Controller MIDI talks to the trigger over USB HID at 100 Hz, which gives you ~10 ms of internal jitter — fast enough that the haptic feels glued to the audio event, not behind it.
{
"trigger": "L2",
"mode": "section",
"start": 40,
"end": 90,
"strength": 6
} The five effects you'll actually use
Sony's firmware exposes a handful of canonical effects. Each one has its own use case and its own physical feel — and picking the right effect for the source is the difference between "neat trick" and "I can't play without this":
| Effect | Mode | Feel | Best source |
|---|---|---|---|
| Constant push | continuous | Heavier trigger across full travel | Master compressor gain reduction |
| Section wall | section | Hits a wall at a set depth, gives if pushed harder | Sidechain duck threshold |
| Slow vibration | vibration 1–8 Hz | Pulse, like a heartbeat | LFO position / BPM-synced clock |
| Fast vibration | vibration 20–40 Hz | Buzz, like a guitar string | High-frequency content / hi-hats |
| Multi-zone | section ×3 | Three stepped walls at different depths | Three-band compressor |
| Click stop | section narrow | Tactile detent at one point | Quantised step trigger |
Why bother in a music app
A normal MIDI controller is a one-way street: your hands move, sound comes out. Adaptive triggers close the loop. The trigger gets harder to press when your kick fires, so you feel the beat through your finger.
Map a sidechain compressor's gain reduction to trigger vibration and you literally feel the duck. Map kick velocity to section-mode resistance and the trigger thumps with every hit. This is the killer feature.
How to set it up
The trigger effect is configured per-mapping in the editor. Pick a source (incoming MIDI event, controller axis, or DAW automation), pick a mode (continuous / section / vibration), set the strength, save. See the full walkthrough on setting up haptic feedback and the deep dive at adaptive trigger effects.
The full effect descriptor for the kick-feel example looks like this. source is the inbound MIDI event you're reacting to, response is the mapping from velocity to trigger strength:
{
"id": "kick-feel-r2",
"trigger": "R2",
"effect": {
"mode": "section",
"start": 30,
"end": 80,
"strength": 8,
"decay": 120
},
"source": {
"type": "midi-in",
"channel": 10,
"note": 36
},
"response": {
"velocityCurve": "linear",
"strengthScale": 1.0
}
} Compatibility
Adaptive triggers only exist on the DualSense (PS5 controller). DualShock 4 (PS4), Xbox, and Switch Pro controllers have no haptic motors in their triggers — those mappings degrade gracefully to standard CC output. Multi-controller setups with mixed hardware will simply skip the haptic on non-DualSense devices.
Common mistakes
- Maxing the strength. Strength 8/8 wears the motors and feels uncomfortable within minutes. 4–6 is the sweet spot for long sessions.
- Forgetting to set decay. Triggers that "stick" usually have no decay configured. Add 80–150 ms and they'll release between events.
- Running over Bluetooth. BT works for input, but haptic command throughput is ~30% of USB. The effect feels laggy and crunchy. Use a cable when haptics are on.
- Reacting to noisy sources. If you map vibration to a velocity-jittery source, the trigger buzzes erratically. Add a one-pole smoothing filter on the source, or quantise the input to 8 steps.
- Stacking too many effects per trigger. Only one effect is active per trigger at a time. Stacking in the editor doesn't sum — the last one to fire wins. Build a single composite effect instead.