Mapping & customization
Map a trigger to a CC
Bind L2 or R2 to a MIDI CC for pressure-sensitive expression. The DualSense triggers are 8-bit analog — perfect for expression, dynamics, or filter sweeps.
Updated
The trigger-to-CC mapping gives you a pressure-sensitive expression pedal under your fingertip. L2 and R2 on the DualSense are analog (0–255 internally, scaled to 0–127 for MIDI), so they're ideal for CC 11 expression, volume swells, and filter pressure. It's the closest thing to a Yamaha BC controller breath sensor you'll find without buying one.
Triggers also pair beautifully with the haptic engine — squeeze harder, feel the kick drum harder. We'll cover the CC binding here and link to the haptic side at the end.
What you need
A controller with analog triggers — DualSense, DualShock 4, Xbox Wireless, or any modern Bluetooth gamepad. Old DualShock 1 / SNES-style pads only see triggers as digital buttons, so this mapping won't work there. The bridge will grey out the CC option for digital-only triggers.
Open the editor and pick a trigger
Click L2 or R2 in the controller diagram on the Mapping tab. The binding panel opens with the trigger's current target. Default ships as Note Velocity, swap it to CC for continuous output.
Pick the CC
Set Type to CC and pick a number. The CCs that pair best with a pressure-sensitive analog input:
| CC # | Target | Feel |
|---|---|---|
| 1 | Mod wheel | Squeeze to add vibrato — instant breath-controller vibe. |
| 2 | Breath | Some EWI emulations key off this specifically. |
| 7 | Channel volume | Squeeze = louder. Good for swells, bad for fast hits. |
| 11 | Expression | Standard for play-harder-get-louder. The default choice. |
| 64 | Sustain pedal | Hold past 64 = sustain on. Below 64 = off. |
| 74 | Filter cutoff | Squeeze to open the filter for accents. |
{
"triggers": {
"L2": { "type": "cc", "cc": 11, "channel": 1, "range": [0, 127], "curve": "exponential" },
"R2": { "type": "cc", "cc": 1, "channel": 1, "range": [0, 127], "curve": "linear" }
}
} Set the rest position
Triggers idle at 0 when you're not touching them. If you want a default expression value (e.g. CC 11 at 80 when untouched, going up to 127 on full press), set range: [80, 127]. The bridge linearly scales the trigger's analog reading into that window.
{
"triggers": {
"L2": {
"type": "cc",
"cc": 11,
"channel": 1,
"range": [80, 127],
"curve": "exponential",
"deadzone": 5
}
}
} The deadzone field is in raw 0–255 units (so 5 = ~2% of full travel). Trigger springs aren't perfectly calibrated, and a deadzone of 5 stops phantom CC traffic when you've barely brushed the trigger.
Performance examples
Real-world trigger patches that don't suck:
- Sax-style expression: L2 → CC 11 exponential, paired with a held face-button note. Squeeze for swells, release for hard cutoffs. Closest thing to a wind controller you'll get without spending real money.
- Sustain pedal on R2: R2 → CC 64 with range
[0, 127]. Half-press = half-pedal sustain on plugins that support it (Pianoteq, Garritan). - Filter pressure attack: L2 → CC 74 with range
[20, 110]exponential. Lead synth opens up only when you mash. Pair with a face-button melody. - Two-handed mix: L2 → CC 11 on channel 1 (lead), R2 → CC 11 on channel 2 (pad). Crossfade between two instruments by squeezing alternately.
- Wah pedal sim: R2 → CC 21 (free assign) mapped via plugin to filter cutoff on a guitar amp sim. Squeeze for the auto-wah snap.
Save and test
Save, then squeeze the trigger slowly. The MIDI monitor should stream a smooth ramp from 0 to 127. If it jumps in chunks, the controller's calibration is off — re-run calibration.
What's next
To set up adaptive trigger resistance on top of CC output, jump to adaptive trigger effects deep dive. To wire incoming kick drums back into trigger haptics, see haptic feedback.