Universal Controller MIDI

Mapping & customization

Set up haptic feedback

Route incoming MIDI from your DAW back into the DualSense haptics and adaptive triggers. Feel the kick drum through L2 in real time.

Updated

Haptic feedback closes the loop: instead of only sending MIDI out, the bridge listens to MIDI coming back in from your DAW and translates notes or CCs into vibrations, rumble, or adaptive-trigger resistance. Feel the kick through L2, feel the snare through the left grip, feel a sidechain pump as a slow squeeze on R2. It's the feature people don't know they want until they try it.

Sony spent serious money building this hardware for games. We get to abuse it as a MIDI playback engine — which, frankly, is a more interesting use than yet another shooter rumble.

What you need

A DualSense controller (the haptic engine and adaptive triggers are DualSense-only — the DualShock 4 has rumble motors but no fine haptics). Your DAW also needs to send MIDI back to the bridge's virtual input port — see IAC port setup.

Switch to the Haptics tab

The Haptics tab lives next to Mapping. It lists three output surfaces:

  • Rumble — coarse left/right motor vibration. Cheap and universal.
  • Haptic — the DualSense's voice-coil actuator. High resolution, can play arbitrary waveforms.
  • Adaptive triggers — L2 and R2 resistance profiles (constant, weapon, vibration).
  • Lightbar — RGB strip across the touchpad. Bonus visual feedback channel.

Trigger from incoming MIDI

Each haptic effect listens for a MIDI event. The classic "feel the kick" patch is Note 36 on channel 10 firing the adaptive trigger vibration profile.

{
  "haptics": {
    "input": {
      "port": "Universal Controller MIDI In",
      "channel": 10
    },
    "rules": [
      {
        "match": { "note": 36 },
        "action": { "type": "trigger", "side": "L2", "profile": "vibration",
                    "frequency": 50, "strength": 200, "ms": 80 }
      },
      {
        "match": { "note": 38 },
        "action": { "type": "haptic", "waveform": "thump", "ms": 60 }
      },
      {
        "match": { "cc": 11 },
        "action": { "type": "trigger", "side": "R2", "profile": "constant",
                    "strength": "cc.value" }
      }
    ]
  }
}

Haptic effect reference

Common effect names you can drop into the waveform or profile field. These are tuned for music — they don't match the gun-rumble patterns shipped with PS5 games:

Effect nameSurfaceFrequency / FeelBest for
thumpHaptic actuator40 Hz, single pulseKick drums
snapHaptic actuator200 Hz, sharp transientSnares, claps
tickHaptic actuator800 Hz, micro tapHi-hats, ticks
buzzRumble motorContinuous low rumbleBass drops, sub layers
vibrationAdaptive triggerTunable 30–200 HzSub-kick pulses
constantAdaptive triggerStatic resistanceCC-mapped pressure
weaponAdaptive triggerClick-then-giveOne-shot snap accents

Routing CC values into strength

You can pipe an incoming CC's value straight into the haptic strength using the string "cc.value". CC 11 (expression) is a natural source — louder play = stronger haptic.

{
  "haptics": {
    "rules": [
      {
        "match": { "cc": 11 },
        "action": { "type": "rumble", "motor": "both",
                    "strength": "cc.value", "smoothMs": 50 }
      },
      {
        "match": { "note": 36, "velocityMin": 90 },
        "action": { "type": "trigger", "side": "L2", "profile": "vibration",
                    "frequency": 40, "strength": "note.velocity", "ms": 80 }
      }
    ]
  }
}

velocityMin filters out ghost notes — only kicks louder than velocity 90 fire the trigger. Stops your hand getting beaten up during a busy fill.

Common scenarios

Real haptic patches worth stealing:

  • Feel the kick: Note 36 ch.10 → L2 vibration 50 Hz, 80 ms. The original demo and still the best.
  • Sidechain squeeze: CC 1 from a Volume Shaper-style plugin → R2 constant resistance scaled to "cc.value". Resistance pumps with the sidechain.
  • Snare slap on the grip: Note 38 → haptic snap 60 ms. Different surface from kick, so they don't blur together.
  • Hi-hat pattern as lightbar pulse: Note 42 → lightbar flash white 50 ms. Bonus visual click track.
  • Tempo BPM rumble: Clock-tick (CC 102) → rumble 30 ms each beat. Internal metronome via grip.

Save and test

Save the Haptics config. In your DAW, send a Note 36 from the bridge's MIDI input port. The L2 trigger should pulse on each hit. If nothing happens, confirm the DAW is sending TO the bridge's MIDI Input, not its Output.

What's next

Full effect catalogue: adaptive trigger effects deep dive. Save the whole config to a preset via save and load presets.

Edit this page on GitHub Updated
ESC

Type to search.