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.
No need to donate, though is greatly appreciated!
I also made Steam Controller Battery Monitor, since there currently isn't a convenient way to view the controller's exact battery percentage.
Download the latest build here!
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.exe [AUDIO_FILE] - Profit!
OR
- (skip if already installed) Install FFmpeg with
winget install ffmpegin powershell - Drag an audio file onto the executable.
- Right click inside the folder
- Click "Open in Terminal"
- (skip if already installed) Install FFmpeg with a package manager of your choice
- Install libhid
- Debian/Ubuntu:
sudo apt install libhidapi-dev - Arch:
sudo pacman -S hidapi
- Debian/Ubuntu:
- Type
chmod +x steam-haptics-playerto make the program executable - Run the program with
./steam-haptics-player [AUDIO_FILE] - Profit!
Usage: steam-haptics-singer.exe <file path>
- Try pressing the controller (while upright) down into a solid object, it will make the sound much louder
- ffmpeg not found
- Install
ffmpegand ensure it is on yourPATH(winget install ffmpegon Windows).
- Install
- if anything else fails:
- Try restart the program and controller, use another audio file to test,
- Try connect the steam controller directly via USB and then try again.
- No controller found on linux
- Try running with sudo, if that works, you may need an appropriate udev rule for /dev/hidraw* devices
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.4.1] Fix for windows to actually show µ symbol instead of mojibake Support for SteamOS and Steam Machine's internal puck
[v1.4.0] (Thanks @iczero for your knowledge!), Add support for (and use) 16bit 8khz audio on wired, Use 8 bit µlaw for puck instead, for better audio quality, Simplify pcm setup immensely, Removed -s option as pcm setup is much faster
[v1.3.1] Compile statically (so i dont have to ship dll files)
[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!
- volume control
- looping music
I spent a lot 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:
