Энтузиаст превратил тактильные моторы Steam Controller в динамик, способный играть музыку через USB и по беспроводной связи
Проект Steam Haptics Player обходит Steam Input и передаёт звук напрямую в контроллер через HID-команды, используя FFmpeg для сжатия аудио
Качество звука по проводу достигает 16-бит при 8 кГц и звучит на удивление сбалансированно, в то время как беспроводной режим ограничен 8-битным μ-law и страдает от треска
Исходный код и инструкции опубликованы на GitHub, позволяя любому владельцу контроллера воспроизвести свои аудиофайлы, но с оговоркой о неизвестном влиянии на батарею
Steam Controller второго поколения от Valve давно стал культовым устройством в среде моддеров благодаря открытому подходу компании к собственному железу. Энтузиасты уже заставляли контроллер самостоятельно перемещаться по столу для подзарядки и собирали для него собственные открытые «шайбы»-приёмники. Разработчик под ником Pixel1011 пошёл ещё дальше: его проект Steam Haptics Player превращает встроенные тактильные моторы контроллера в полноценный стереодинамик, способный воспроизводить музыку — как по проводу, так и по беспроводной связи.
Источник изображения - tomshardware.com
Для понимания сути проекта важно учитывать, что в Steam Controller изначально нет никакого динамика: под каждой тачпад-поверхностью установлены два линейных актуатора, которые вибрируют, создавая тактильную обратную связь при игре. Более ранние моддинг-проекты уже использовали эти компоненты, чтобы заставить контроллер вибрировать заданным образом, — а сама Valve в своё время встроила в устройство секретную пасхалку: при падении с определённой высоты моторы случайным образом воспроизводят знаменитый крик Вильгельма.
Как это работает
Pixel1011 обнаружил, что тактильными моторами можно напрямую управлять с помощью низкоуровневых HID-команд (Human Interface Device) через библиотеку HIDAPI. Именно на этом принципе построен Steam Haptics Player: программа берёт аудиофайл, понижает его частоту дискретизации с помощью FFmpeg, разбивает получившийся PCM-поток на пакеты и отправляет их напрямую в контроллер, минуя высокоуровневое ПО вроде Steam Input. Прошивка устройства получает эти сырые данные и передаёт их на моторы, которые начинают вибрировать — так и рождается звук.
Главной проблемой в этой самодельной схеме стала пропускная способность, особенно при беспроводной передаче: приёмник-«шайба» изначально не рассчитан на трансляцию аудиоданных по радиоканалу. Поэтому звук приходится сильно сжимать, а итоговое качество упирается в физические ограничения моторов: 8 бит при 8 кГц (компандирование μ-law) для беспроводного режима и 16 бит при 8 кГц PCM для проводного подключения.
Как это звучит на практике
Даже при таком скромном по современным меркам качестве результат получился на удивление громким и сбалансированным — звук легко можно принять за работу настоящего динамика. В демонстрационном видео Pixel1011 воспроизводит на контроллере композицию «Want You Gone» из титров Portal 2, и качество звучания можно оценить самостоятельно. Удивительнее всего то, что в звуке присутствует ощутимый низкочастотный диапазон — этого обычно не ожидаешь от такой кустарной конструкции, даже с учётом того, что контроллер для лучшего резонанса кладут на полотенце на ровной поверхности.
По беспроводной связи качество звука заметно уступает проводному варианту: звук потрескивает, щёлкает и порой обрывается из-за жёстких ограничений пропускной способности радиоканала. Для этого режима Pixel1011 применил 8-битное компандирование μ-law, которое фактически обеспечивает динамический диапазон, сопоставимый с 14-битным звуком, при этом сохраняя объём данных на уровне обычного 8-битного потока. Даже с таким сжатием «шайба» работает на пределе возможностей, но сам факт того, что беспроводная передача музыки вообще заработала, впечатляет — и оставляет пространство для дальнейших улучшений.
Как попробовать самому
Повторить эксперимент может любой владелец Steam Controller второго поколения — программа работает практически с любым аудиофайлом в любом формате. Для этого нужно скачать архив из репозитория проекта на GitHub, установить FFmpeg (если он ещё не стоит в системе — он нужен для перекодирования аудио) и запустить программу через PowerShell из папки с исходниками. Подробная инструкция доступна прямо на странице проекта, однако о том, как эта нагрузка сказывается на времени автономной работы контроллера, пока ничего не известно. Так что не стоит слишком увлекаться и заливать на тактильные моторы весь свой плейлист из Spotify.
















