
모더, 커스텀 HID 도구를 사용하여 Steam Controller 트랙패드 햅틱을 스테레오 스피커로 변신시켜 — 유선 연결을 통해 놀라울
요약
모더 Pixel1011이 Steam Controller의 햅틱 모터를 활용해 음악을 재생하는 스테레오 스피커로 변신시키는 프로젝트를 공개했습니다. HIDAPI를 통해 저수준 명령어로 모터를 제어하여 오디오 데이터를 직접 전송하는 방식입니다.
핵심 포인트
- Steam Controller의 햅틱 모터를 스피커로 활용하는 DIY 프로젝트
- HIDAPI를 사용하여 상위 소프트웨어를 우회하고 모터를 직접 제어
- 유선 연결 시 16-bit 8kHz PCM, 무선 시 8-bit 8kHz μ-law 지원
- 하드웨어의 개방성을 활용한 창의적인 커뮤니티 모딩 사례
Valve의 2세대 Steam Controller는 하드웨어에 대한 회사의 개방적인 접근 방식 덕분에 커뮤니티에서 큰 인기를 끌었습니다. 모더(Modders)들은 이미 내부의 햅틱 모터(haptic motors)를 사용하여 책상 위를 이동하게 하거나 자동으로 충전되도록 만들었으며, 다른 이들은 자신만의 오픈 소스 퍽(open-source pucks)을 제작하기도 했습니다. 이제 _Pixel1011_의 새로운 프로젝트인 "Steam Haptics Player"는 이 모터들을 유선 및 무선 모두에서 음악을 재생할 수 있는 스테레오 스피커로 변신시킬 수 있습니다.
배경을 설명하자면, Steam Controller에는 스피커가 없습니다. 대신 각 트랙패드 아래에 햅틱 피드백(haptic feedback)을 제공하기 위해 진동하는 두 개의 리니어 액추에이터(linear actuators)가 있습니다. 이전 프로젝트들은 이러한 구성 요소들을 활용하여 컨트롤러가 특정 방식으로 진동하게 만들었습니다. 진동은 소리의 기초이기 때문에, Valve 자체적으로도 특정 높이에서 떨어뜨렸을 때 무작위로 Wilhelm scream(빌헬름 비명) 소리가 나도록 컨트롤러에 비밀 이스터 에그(easter egg)를 심어두기도 했습니다.
Pixel1011은 HIDAPI를 사용하여 내부의 햅틱 모터(haptic motors)를 저수준 HID (Human Interface Device, 휴먼 인터페이스 디바이스) 기능 명령어로 제어할 수 있다는 사실을 발견했습니다. 이에 따라 Steam Haptics Player는 오디오 파일을 가져와 FFmpeg를 통해 다운샘플링(downsample)하고, 이를 PCM 스트림의 청크(chunk)로 분할한 뒤, Steam Input과 같은 상위 수준의 소프트웨어를 우회하여 해당 패킷들을 컨트롤러로 직접 전송합니다. 그러면 컨트롤러의 펌웨어(firmware)가 이 로우 데이터(raw data)를 모터에 공급하고, 그 시점에서 모터가 진동하며 소리를 만들어냅니다.
이 과정의 DIY(Do-It-Yourself) 특성 때문에 대역폭(bandwidth) 문제가 발생하며, 특히 컨트롤러(puck)가 무선 신호를 통해 오디오 데이터를 전송하도록 설계되지 않았기 때문에 무선 연결 시에는 더욱 그렇습니다. 이는 오디오를 압축해야 함을 의미하며, 모터가 전송할 수 있는 전체 품질에는 한계가 있습니다. 즉, 무선 연결 시에는 8-bit 8kHz (μ-law)로, 유선 연결 시에는 16-bit 8kHz PCM으로 전송됩니다.
그럼에도 불구하고, 16-bit 오디오는 마치 스피커에서 나오는 것처럼 느껴질 정도로 놀라울 만큼 크고 균형 잡힌 결과물을 만들어내기에 충분합니다. 영상 시작 부분에서는 Pixel1011이 _Portal 2_의 엔딩 크레딧 곡인 "Want You Gone"을 재생하는 모습이 나오는데, 그 품질을 직접 확인할 수 있습니다. 최상의 성능을 내기 위해 평평한 표면 위의 수건 위에 올려두었다 하더라도, 이와 같은 임시방편(jerry-rigged) 설정에서 전혀 기대할 수 없었던 진정한 저음(low-end)이 느껴집니다.
무선 오디오 품질은 이에 비해 조악합니다. 대역폭 제한으로 인해 지직거리는 소리(crackles and pops)가 나거나 중간에 끊기기도 합니다. Pixel1011은 여기서 8-bit mu-law 컴팬딩(companding)을 사용하고 있는데, 이는 8-bit 스트림의 바이트 크기를 유지하면서도 실제로는 14-bit 오디오와 유사한 다이내믹 레인지(dynamic range)를 제공합니다. 이러한 압축을 통해서도 컨트롤러는 힘겨워하고 있지만, 이것이 가능하다는 사실 자체가 매우 인상적이며, 향후 개선의 여지도 있을 것입니다.
여러분도 2세대 Steam Controller를 가지고 있다면, 거의 모든 형식의 오디오 파일을 사용하여 Steam Haptics Player를 직접 시도해 볼 수 있습니다. GitHub 리포지토리에서 아카이브를 다운로드하고, (아직 설치되어 있지 않다면 트랜스코딩 (transcoding)을 위해) FFmpeg를 설치한 뒤, 원래 디렉토리의 PowerShell 창을 통해 프로그램을 실행하면 됩니다. 자세한 단계는 링크된 GitHub 페이지에 나와 있지만, 이것이 컨트롤러의 배터리 수명에 어떤 영향을 미칠지는 알 수 없습니다. 다만, 이 햅틱 모터 (haptic motors)에 Spotify 플레이리스트를 너무 과하게 돌리지는 마세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Tom's Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기