Steam Controller второго поколения получил неожиданный мод: энтузиаст Pixel1011 заставил хаптику трекпадов работать как стереодинамики. Его инструмент Steam Haptics Player передаёт на контроллер аудио через HID-команды, а по проводу тянет 16-битный PCM с частотой 8 кГц.
Звучит как типичная инженерная забава на вечер, но тут есть занятная техника. В Steam Controller нет штатного динамика. Под трекпадами стоят линейные актуаторы, которые обычно отвечают за тактильную отдачу. Pixel1011 подал на них аудиосигнал напрямую, в обход Steam Input.
Как вибромоторы стали динамиками
Steam Haptics Player обращается к контроллеру через низкоуровневые команды HID с помощью HIDAPI, поэтому звук идёт не через обычный аудиотракт ПК. Программа берёт аудиофайл, перегоняет его через FFmpeg, режет PCM-поток на небольшие фрагменты и отправляет эти пакеты прошивке контроллера.
Дальше всё упирается в физику. Звук — это вибрации, а хаптические актуаторы как раз умеют быстро вибрировать. Контроллер получает сырые данные и заставляет моторы колебаться так, чтобы пользователь слышал музыку.
Valve сама когда-то играла с этой идеей. В контроллере нашли пасхалку: при падении с определённой высоты он мог случайно воспроизвести знаменитый крик Вильгельма. Новый проект делает похожий трюк не разово, а с любым аудиофайлом.
Провод звучит заметно лучше радиоканала
Главное ограничение проекта — пропускная способность канала, потому что Steam Controller не проектировали как беспроводную колонку. По проводу Pixel1011 передаёт 16-битный PCM 8 кГц, а через беспроводной модуль приходится ужиматься до 8-битного μ-law 8 кГц.
- Проводное подключение: 16 бит, 8 кГц, PCM
- Беспроводное подключение: 8 бит, 8 кГц, μ-law
- Обработка файлов: перекодирование через FFmpeg перед отправкой на контроллер
Проводной режим звучит неожиданно полно для пары хаптических моторов. В демонстрации Pixel1011 включил Want You Gone из финальных титров Portal 2. По записи слышно не только середину, но и ощутимый низ, хотя контроллер лежит на полотенце на плоской поверхности.
С беспроводным режимом всё грубее. Звук трещит, щёлкает и местами обрывается. Pixel1011 использует μ-law-компрессию: она даёт динамический диапазон, близкий к 14-битному аудио, но хранит поток в 8-битном размере. Даже так беспроводной модуль не всегда справляется.
Проект выглядит особенно забавно на фоне открытого подхода Valve к железу. Сообщество уже заставляло хаптические моторы двигать контроллер по столу и даже экспериментировало с автоматической зарядкой. Теперь те же узлы превратили в импровизированную акустику.
Steam Haptics Player уже выложен на GitHub для Steam Controller второго поколения. Pixel1011 не приводит замеры влияния на батарею, поэтому автономность при воспроизведении музыки пока остаётся неизвестной.