This project allows stereo audio to be streamed from a file to the haptics of a Steam controller (2026), practically allowing anything to be played on it's haptic motors.
Supported device: Steam Controller (2026). Other controllers are unsupported.
Requirements: FFmpeg on PATH
- When streaming audio via the Puck, you may encounter popping noises or other audio quality issues due to packet loss. Wired should normally be much cleaner.
- Open Powershell in the file directory where you have extracted the executable
- (skip if already installed) Install FFmpeg with
winget install ffmpeg - Run the program with
.\steam-haptics-player [AUDIO_FILE] - Profit!
OR
- (skip if already installed) Install FFmpeg with
winget install ffmpegin powershell - Drag an audio file onto the executable.
- This will not let you skip the setup portion of the program if it has already been run once, however it is the easier option
- Right click inside the folder
- Click "Open in Terminal"
- (skip if already installed) Install FFmpeg with a package manager of your choice
- Install libusb (with i believe either,
sudo apt install libhidapi-devorsudo pacman -S hidapi) - Type
chmod +x steam-haptics-singerto make the program executable - Run the program with
.\steam-haptics-player [AUDIO_FILE] - Profit!
Usage: play-pcm.exe [-s] <file path>
-s Skip running the setup phase (if you have already run it once and havent restarted your controller)
- Try pressing the controller down into a solid object (although not too hard), it will make the sound much louder
- No audio:
- Ensure you ran the setup phase (do not use
-s) at least once since the controller was last started.
- Ensure you ran the setup phase (do not use
- Garbled audio:
- Re-run without
-s. If issues persist, restart the controller and run setup again.
- Re-run without
- Loud static immediately on launch:
- Restart the controller and try again.
- ffmpeg not found
- Install
ffmpegand ensure it is on yourPATH(winget install ffmpegon Windows).
- Install
- if all else fails:
- Try connect the steam controller directly via USB and then try again.
Build (Linux / WSL)
sudo apt update
sudo apt install build-essential pkg-config libhidapi-dev ffmpeg
makeBuild (Windows, MSYS2 UCRT64)
pacman -Syu
pacman -S mingw-w64-ucrt-x86_64-gcc \
mingw-w64-ucrt-x86_64-hidapi \
mingw-w64-ucrt-x86_64-ffmpeg \
mingw-w64-ucrt-x86_64-make \
mingw-w64-ucrt-x86_64-pkgconf
make[v1.3.0] Added progress bar, reworked how files are loaded
[v1.2.0] Fixed controller detection with puck (Thanks @CrazyCritic89)
[v1.1.0] Linux support Checks for ffmpeg
[v1.0.0] Initial release!
I spent alot of time and effort reverse engineering the Steam controller's firmware to find the HID commands needed to do this so i would appreciate the stars very much!
I was also heavily inspired to do this by CrazyCritic89's SteamHapticsSinger. I suggest checking it out if you wish to play MIDI files on the steam controller! (they honestly can sound better than this at times)
If you do happen to make a video with this, please do link back to this github repo so others can try too :steamhappy: