{"id":15045,"date":"2026-08-08T12:01:19","date_gmt":"2026-08-08T12:01:19","guid":{"rendered":"https:\/\/news.theck1.no\/?p=15045"},"modified":"2026-08-08T12:01:19","modified_gmt":"2026-08-08T12:01:19","slug":"modder-turns-steam-controller-trackpad-haptics-into-stereo-speakers-with-custom-hid-tool-wired-connection-transmits-16-bit-audio-that-sounds-surprisingly-full","status":"publish","type":"post","link":"https:\/\/news.theck1.no\/?p=15045","title":{"rendered":"Modder turns Steam Controller trackpad haptics into stereo speakers with custom HID tool \u2014 Wired connection transmits 16-bit audio that sounds surprisingly full"},"content":{"rendered":"<div style=\"margin-bottom:1em; color:#666; font-size:0.9em;\">\n<strong> Hassam Nasir <\/strong><br \/>\n &bull;<br \/>\nAugust 8, 2026\n<\/div>\n<hr\/>\n<p><!--more--><\/p>\n<article>\n<p>Valve&#8217;s second-gen Steam Controller has been a major hit with the community thanks to the company&#8217;s open approach to its hardware. Modders have already used the haptic motors inside to <a href=\"https:\/\/www.tomshardware.com\/peripherals\/controllers-gamepads\/modded-steam-controller-can-automatically-charge-itself-like-a-robot-vacuum-enthusiast-creates-github-program-that-uses-the-vibration-motor-to-walk-it-back-to-its-docking-station\">move it across a desk<\/a> and charge automatically, while others have built their own <a href=\"https:\/\/www.tomshardware.com\/peripherals\/controllers-gamepads\/enthusiast-reverse-engineers-steam-controller-2-puck-creates-diy-openpuck-that-works-without-steam-input-custom-firmware-can-emulate-nintendo-playstation-and-xbox-controllers\">open-source pucks<\/a>. Now, a new project from <em>Pixel1011<\/em>,<em> <\/em>called &#8220;<a href=\"https:\/\/github.com\/Pixel1011\/SteamHapticsPlayer\" target=\"_blank\">Steam Haptics Player<\/a>,&#8221; can turn these motors into a stereo speaker capable of playing music both wired and wirelessly. <\/p>\n<div class=\"youtube-video\" data-nosnippet >\n<div class=\"video-aspect-box\"><\/div>\n<\/div>\n<p>For context, the Steam Controller doesn&#8217;t have a speaker; there are two linear actuators under each trackpad that vibrate to provide haptic feedback. Previous projects have leveraged these components to <a href=\"https:\/\/www.tomshardware.com\/peripherals\/controllers-gamepads\/web-app-drives-valves-new-steam-controller-across-the-floor-using-its-rumble-motors\">make the controller vibrate<\/a> in a certain way. Since vibrations are the basis of sound, Valve itself built a secret easter egg into the controller that randomly makes it do a Wilhelm scream when dropped from certain heights.<\/p>\n<p>Pixel 1011 discovered that the haptic motors inside can be targeted with low-level HID (Human Interface Device) feature commands using HIDAPI. As such, Steam Haptics Player takes an audio file, downsamples it through FFmpeg, splits it into chunks of a PCM stream, and sends those packets directly to the controller, bypassing high-level software like Steam Input. The controller&#8217;s firmware then feeds this raw data to the motors, at which point they vibrate to produce sound.<\/p>\n<p>Because of the DIY nature of this process, bandwidth is an issue, especially wirelessly, since the puck isn&#8217;t designed to carry audio data over its radio signal. This means the audio has to be compressed, and there&#8217;s a limit to the overall quality the motors can transmit \u2014 8-bit 8kHz (\u03bc-law) over the puck and 16-bit 8kHz PCM over a wire. <\/p>\n<p>Still, the 16-bit audio is enough to produce a surprisingly loud and balanced result that can deceive you as if it&#8217;s coming from a speaker. The video at the start features Pixel1011 playing the song &#8220;<em>Want You Gone<\/em>&#8221; from the end credits of <em>Portal 2, <\/em>and you can hear the quality for yourself. There&#8217;s a genuine low-end that you would never expect from a jerry-rigged setup like this, even if it&#8217;s sitting on top of a towel on a flat surface to give it its best chance. <\/p>\n<p>The wireless audio quality is rough in comparison; it crackles and pops and even cuts off in between because of the bandwidth limitations. <em>Pixel1011<\/em> is using 8-bit mu-law companding here, which actually offers dynamic range similar to 14-bit audio while keeping the byte footprint of an 8-bit stream. Even through this compression, the puck is struggling, but the fact that this is even possible is still very impressive, and perhaps there&#8217;s room for improvement down the line.<\/p>\n<div class=\"youtube-video\" data-nosnippet >\n<div class=\"video-aspect-box\"><\/div>\n<\/div>\n<p>You can try Steam Haptics Player yourself on your own second-gen Steam Controller with pretty much any audio file in any format. Just download the archive<a href=\"https:\/\/github.com\/Pixel1011\/SteamHapticsPlayer\" target=\"_blank\"> from the GitHub repo<\/a>, install FFmpeg (for transcoding, if you don&#8217;t have it already), and run the program via a PowerShell window in the original directory. Detailed steps are on the linked GitHub page, but we don&#8217;t know how this affects the controller&#8217;s battery life. Just don&#8217;t go all out with your Spotify playlist on these haptic motors. <\/p>\n<\/article>\n<p style=\"margin-top:1.5em;\"><a href=\"https:\/\/www.tomshardware.com\/peripherals\/controllers-gamepads\/modder-turns-steam-controller-trackpad-haptics-into-stereo-speakers-with-custom-hid-tool-wired-connection-transmits-16-bit-audio-that-sounds-surprisingly-full\" target=\"_blank\" rel=\"noopener\">Read the full article &rarr;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hassam Nasir &bull; August 8, 2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-15045","post","type-post","status-publish","format-standard","hentry","category-it-hardware"],"_links":{"self":[{"href":"https:\/\/news.theck1.no\/index.php?rest_route=\/wp\/v2\/posts\/15045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/news.theck1.no\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/news.theck1.no\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/news.theck1.no\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/news.theck1.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15045"}],"version-history":[{"count":0,"href":"https:\/\/news.theck1.no\/index.php?rest_route=\/wp\/v2\/posts\/15045\/revisions"}],"wp:attachment":[{"href":"https:\/\/news.theck1.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/news.theck1.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/news.theck1.no\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}