Technical Architectural Comparison
Deep-Dive Source Code Audit & Hardware Analysis

Not another copy:
how emulators recreate HD Rumble

Switch HD Rumble is not ordinary motor vibration: it sends a low and a high frequency band, each with its own strength, changing several times per frame. Many PC emulators flatten this into two plain motor strengths. RenHDrum (powering Ryuhdr and Brontide) keeps all 4 parameters, packs 3 samples into every 15 ms packet, drives the DualSense's voice coils, and keeps rumble from delaying your buttons.

At a glance

Criteria Eden (Nightly) Ryubing (Canary-1.3.351) RenHDrum (Ryuhdr & Brontide)
Keeps pitch (low & high frequency) ✗ Drops pitch, keeps strength ◐ Yes, toggle off by default ✓ All 4 parameters
Vibration steps per 15 ms packet — n/a (plain rumble) ◐ 1, close packets dropped ✓ 3, peaks merged
DualSense HD haptics ✗ Plain rumble ✗ Not supported yet ✓ Voice coils: USB + Bluetooth (Brontide)
Bluetooth button safety ✗ Rumble queue can skip input — Not measured ✓ Rumble written after input

Audio illustration only: your speakers play a sound to help you imagine the difference. It is not the real vibration signal.

Quick glossary
HD Rumble
Switch rumble that carries two frequency bands, each with its own strength, so it can play pitch and texture.
AM / FM
Amplitude (how strong) and frequency (how high the pitch) of each band.
Packet (15 ms)
One rumble message to the controller. A real Switch packs 3 vibration steps into each.
Voice coil
The speaker-like actuators inside DualSense. They play a waveform, not just on/off strength.
SDL
The open-source library emulators use to talk to controllers.
Signal Flow Comparison

Three Paths from Game Telemetry to Your Hands

Stock Eden (Nightly) 4 params (low/high amp & freq)
sdl_driver.cpp (RumblePlay) Frequencies flattened to 2 amplitudes
SDL_RumbleGamepad (50 ms) Skips button input during queue
✗ Blunt buzz Pitch lost, BT lag
Ryubing (Canary-1.3.351) 4 params (low/high amp & freq)
NpadHdRumble.cs (Off by default) 1 sample / packet; drops rapid bursts
SDL_hid_write Direct Outside SDL schedule; Pro only
⚠ Partial HD Drops fast notes
RenHDrum (Ryuhdr & Brontide) 4 params (low/high amp & freq)
renhdrum.dll Core Engine 3 slots/15 ms • Crisp Notes +3 dB • Peak merge • DualSense: 48 kHz 4-ch audio
Patched SDL Driver Idle-gated no-queue • Write-after-input (B1) • BT level 3 (B3) • 150 ms keep-alive
✓ True HD Acoustic pitch, zero button lag
Architecture & Real-World Feel

Three Different Approaches

Directly comparing how each emulator processes rumble telemetry in code and what it feels like in your hands.

Eden Today

Eden (Nightly)

How it works:

A game's rumble sends two frequency bands (low and high), each with its own strength (strong and weak). Eden keeps the strength but drops low and high pitch before sending commands to the controller, like an ordinary rumble motor. DualSense controllers are handled the same way.

How it feels:

The controller buzzes, but musical notes and footsteps all feel the same, like an old rumble motor.

Ryubing Today

Ryubing (Canary-1.3.351)

How it works:

Has an HD Rumble toggle (must be turned on manually). It sends both low and high pitch to Switch Pro Controllers and Joy-Cons, but packs only one vibration step per packet and drops packets that arrive close together. DualSense HD haptics are not yet supported. (Project status: unclear).

How it feels:

Produces recognizable melodies, but lacks crisp short micro-textures; in our physical hardware tests, vibrations occasionally became erratic or ceased altogether.

RenHDrum Core

Ryuhdr & Brontide

How it works:

Keeps all 4 parameters. Packs 3 AM/FM samples into every 15 ms packet like a real Switch, merges peaks instead of dropping packets, and only writes rumble into free slots (on Bluetooth, right after the button report). DualSense drives its voice coils through 48 kHz 4-channel audio over USB.

How it feels:

On our real controllers, Ryuhdr 0.4.0.1 and Brontide 1.0.0 feel the same (one shared core, checked against Ryuhdr by golden tests). Musical notes stay distinct like on a Switch, and Bluetooth doesn't swallow button presses. [Our test]

✓

Built from Hardware Documentation, Not Copied

We did not copy the implementations of Eden or Ryubing: RenHDrum was developed independently from community hardware reverse-engineering specifications (switchbrew, dekuNukem) and validated by recording real gamepad acoustic audio to isolate accurate frequency codes.

Next-Generation Roadmap

Why SDL3 Matters

Brontide is our SDL3 testbed: the same unified base that will let RenHDrum reach new controllers.

Ryuhdr's SDL2 foundation has proven stable and resilient, but lacks driver infrastructure for next-generation hardware. SDL3 already includes driver foundations for emerging gamepads. By building Brontide on Eden with SDL3, we establish a shared, modern runtime. Today, Brontide delivers true HD Rumble for Nintendo Switch Pro Controllers and PlayStation DualSense gamepads; next-generation gamepads represent our forward-looking research roadmap.

Research

Switch 2 Pro & Joy-Con 2

SDL3 includes USB driver support and new 5-byte HD Rumble packets. Expanding support requires adding Bluetooth transport, unlocking frequency encoding in SDL, and validating on physical hardware.

Research

Steam Controller

SDL3 includes drivers for both 2015 and 2026 trackpad controllers. Because linear actuators handle one frequency at a time, RenHDrum's dual bands will blend into a single resonant tone.

Research

Xbox Controllers

Researching HD Rumble emulation on standard eccentric rotating mass (ERM) rumble motors. Experimental exploration, no timeline or ETA.

Planned

Your Controller Next?

Because RenHDrum and patched SDL3 form a shared architecture across Brontide and Ryu-HDRum, every new controller driver added to the core benefits multiple emulators at once.

Acknowledgments

Credit Where It's Due

Building upon open foundations with deep gratitude for upstream pioneers.

We hold deep respect and gratitude for the teams and developers behind the projects compared above. Ryubing took the pioneering first step of implementing genuine HD Rumble communication for the Ryujinx lineage (adapting MIZUSHIKI's JoyShockLibrary-plus-HDRumble). Likewise, Eden's codebase included early controller identification recognizing Pro Controllers and DualSense gamepads as HD-capable devices. Furthermore, SDL3 (Valve and community contributors) contributed modern drivers for next-generation hardware.

These efforts showed that players care about how rumble feels. RenHDrum, Brontide and Ryu-HDRum build on these foundations, adding packet pacing, DualSense haptics and Bluetooth input safety.

Note on Methodology: Based on the source code of Ryubing Canary-1.3.351, Eden nightly 989768aa46 of 19 Oct 2026, and SDL 3.4.8. Upstream codebases may change; please tell us if any technical description here becomes outdated. [Our test] designates observations from physical hardware testing on Switch Pro and DualSense controllers conducted by Three-Dola. Ryubing project status is unclear.

Source Transparency

Copied • Referenced • Our Own

A clear, accountable breakdown of every technical component: where it came from, its license, and what we built.

Component Source License What We Did
Brontide emulator core Eden (git.eden-emu.dev) GPL-3.0 Forked, added thin HD Rumble hook
Ryuhdr emulator core Ryujinx 1.1.1403 MIT Forked, added HD Rumble & DualSense
Amplitude & frequency LUT table dekuNukem (Nintendo Switch Reverse Engineering) Public documentation Referenced, rewritten
Bluetooth report 0x32 format SAxense (egormanga) MPL-2.0 Referenced report layout, written from scratch
DualSense USB audio haptics Nielk1 & DualSense VCM community Public documentation Referenced
SDL libsdl.org zlib Used with lightweight custom patches
RenHDrum core (DSP, scheduler, packet encoding) Three-Dola MIT OR Apache-2.0 Original work

If you see your work here and want it credited differently, open an issue: we will fix it.