CrazyCritic89/SteamHapticsSinger

GitHub: CrazyCritic89/SteamHapticsSinger

这是一个通过 Steam 控制器和 Steam Deck 播放 MIDI 音乐文件的触觉反馈工具。

Stars: 180 | Forks: 7

# Steam 触觉歌手 本项目旨在延续 SteamControllerSinger(从 [Roboron3042 的分支](https://github.com/Roboron3042/SteamControllerSinger) fork 而来,最初由 [Pila](https://gitlab.com/Pilatomic/SteamControllerSinger) 开发),通过修复问题、增加功能,并最值得注意地支持 Steam Deck 和 Steam Controller (2026)。 我创建了一个小型 [Discord 服务器](https://discord.gg/TWpvAxX5GW),方便感兴趣的人分享 MIDI 文件和获取更新。 ## 如何使用 1. 打开您的 Steam Controller (2015 或 2026) 或 Steam Deck 2. 将 MIDI 文件拖放到 steam-haptics-singer 可执行文件上 3. 如果出现提示,请按 Enter 键 4. 享受吧! ### 在哪里可以找到 MIDI 歌曲? 准备好播放的歌曲可以在原作者的 [个人收藏](https://mega.nz/#F!BWpEWKzB!r7WPw5bZ_domN4pk-FJsjg) 中找到(正如他所称)。或者,您可以尝试播放一个 MIDI 文件看看效果(大多数时候效果可能不理想)。 ### 从命令提示符使用: ``` Usage: steam-haptics-singer [-p] [-y] [-d DEBUG_LEVEL] [-i INTERVAL] MIDI_FILE -i INTERVAL Player sleep interval (in microseconds). Lower generally means better song fidelity, but higher cpu usage, and at some point going lower won't improve any more. Default value is 10000 -d DEBUG_LEVEL Libusb debug level. Default is 0, no debug output. max is 4, max verbosity output -p Repeat song, plays again after ending -e Direct velocity to gain control, the MIDI file will set the gain" -t (Steam Controller 2026 Only) Limit to only two channels" -s (Steam Controller 2026 Only) Swap rumble and trackpad channels" ``` ### MIDI 文件提示: MIDI 文件可能需要使用如 [MidiEditor](https://www.midieditor.org/) 这样的软件进行编辑,以便通过 Steam 触觉歌手正确播放,请遵循以下提示: * MIDI 通道 0 上的音符通过右侧触觉/震动播放 * MIDI 通道 1 上的音符通过左侧触觉/震动播放 * MIDI 通道 2 上的音符通过右侧触觉播放(仅限 Steam Controller 2026) * MIDI 通道 3 上的音符通过左侧触觉播放(仅限 Steam Controller 2026) * 其他通道上的音符将被忽略 * **避免同一通道上同时有多个音符激活**,因为触觉执行器一次只能播放一个音符。 ## 编译 您需要 libusb(-dev) 和 pkgconf。如果您已经安装了它们,只需输入 `make`。 建议在容器中编译此项目,例如 [steam-runtime](https://github.com/ValveSoftware/steam-runtime?tab=readme-ov-file#building-in-the-runtime) 或 [holo-docker](https://github.com/SteamDeckHomebrew/holo-docker),以便软件包与 Steam Deck 兼容。 如果选择 steam-runtime 方式,请确保使用 sniper,因为 scout 已经过时。 ### 指南: ``` git clone -b master https://github.com/CrazyCritic89/SteamHapticsSinger.git cd SteamHapticsSinger podman run --rm -v ./:/src -it registry.gitlab.steamos.cloud/steamrt/sniper/sdk bash cd src make exit ``` ## 更新日志 [v1.11.1] * Steam Controller (2026) 现在默认使用震动播放前两个通道 * 移除了 -t 和 -b 参数 * 添加了 -s 参数以交换震动和触控板通道(感谢 @Pixel1011 提出的想法) * 添加了 -t 参数以限制为仅两个通道(可与 -s 联合使用) * 修复了 -d 参数 * 在播放显示中将“震动”重命名为“触觉”(临时) * 错误信息现在显示名称而非数值 [v1.11] * 为 Steam Controller (2026) 添加了背面震动触觉支持 * 通道计数现在是一个单独的变量,允许更改,但仍然不是完全动态的,因为除 2 或 4 以外的任何值都会导致问题 * Note on 现在之前会发送 note off。这特别解决了 Steam Controller (2026) 的问题,即没有间断的音符序列可能会音准漂移,并且更重要的是,防止了在使用背面震动触觉时控制器重启 * 添加了直接力度(velocity)到增益(gain)控制,允许 MIDI 控制触觉反馈的强度。要使 MIDI 文件自动解析为直接力度,请在文件名中添加“dv”。否则,您可以使用 -e 参数 * 为 Steam Controller (2026) 添加了 -t 参数,仅使用触控板以防止 MIDI 文件中仍有上层通道音符时的播放问题 * 为 Steam Controller (2026) 添加了 -b 参数,将前两个通道映射到背面震动触觉 [v1.10.2] * 添加了 Steam Puck 支持 * Steam Dongle 能连接但仍然无法工作 * Steam Controller (2026) 上的触觉反馈已交换,以匹配 2015 版和 Steam Deck * 增益/音量现在恢复到中等水平,因为最高设置可能导致损坏 (#11),需要进一步测试 * 在 Windows 上使用 Puck 连接时,由于 Puck 会重新连接,显示重新连接控制器消息 [v1.10.1] * 添加了有线 Steam Controller (2026) 支持,通过 Puck 和蓝牙的无线支持仍在开发中 * 原始 Steam Controller 已重命名为 Steam Controller (2015) * 控制器现在在代码中有自己的类型 * 暂时移除了 legacy 参数 * 音符现在以全音量播放(新的 Steam Controller 除外,以防止失真) [v1.10] * 实现了针对 Steam Deck 的特定触觉命令。现在歌曲可以在其上正确播放。 * 更新了 midifile 库 * 音符停止现在将频率设置为 0 * 移除了回收期(reclaim period),不再需要且曾导致问题 * 通过 -y 切换 legacy 命令 * 重复歌曲的切换从 -r 更改为 -p * 调试级别参数从 -l 改回 -d * 更新了使用说明以显示更多信息 * 自然音现在中间有连字符(C5 -> C-5) [My v1.9 Build :> (EXCLUSIVE)] * 糟糕地添加了 Deck 支持。没有改进。 [v1.8] * 用户现在可以通过 -c 选项定义回收期。 [v1.7] * 修复了播放几秒后音乐停止的问题 [v1.6] * 修复了播放算法中的主要错误 [v1.5] * 将调试级别参数从 -d 改为 -l * 添加了 -r 参数以启用演示模式 * 增强了参数解析 * 不再依赖 Steam Controller 的持续时间 * 更新了音符显示 * 现在中断进程时(按 Ctrl+C)会停止播放 [v1.4] * 修复了 MIDI 库中的一个错误,当 ON 事件和之前的 OFF 事件具有相同的时间点时,会导致音符持续时间为零 [v1.3] * 添加了 -iINTERVAL 参数 * 添加了 -dDEBUG_LEVEL 参数 [v1.2] * 修复了在播放时断开控制器连接会卡在“Command error”的问题。现在会继续播放(即使持续失败) * 移除了现已弃用的 20ms 音符持续时间减少
标签:libusb, MIDI处理, MIDI文件支持, Steam Deck, Steam控制器, USB通信, 客户端加密, 振动控制, 振动音乐, 游戏硬件, 游戏辅助, 硬件控制, 触觉反馈, 请求拦截, 软件工具, 音乐播放, 音频工程