用 ShawzinBot 在《星际战甲》中让沙温琴演奏 MIDI:15 分钟上手手册
【免费下载链接】ShawzinBotConvert a MIDI input to a series of key presses for the Shawzin项目地址: https://gitcode.com/gh_mirrors/sh/ShawzinBot
ShawzinBot 是一款面向《星际战甲》(Warframe)内乐器"沙温琴"(Shawzin)的 MIDI 演奏工具:你给它一个 MIDI 文件或接上一把 MIDI 键盘,它会把每一个音符事件转换成对应的按键序列发给游戏。把游戏窗口切到前台,沙温琴就会替你弹完整首歌,而你不用记任何一个按键组合。
它能替你做掉哪件事
沙温琴的一个音需要同时决定音阶、把位(fret)和弦序,手动演奏基本靠肌肉记忆,看谱跟弹更是难上加难。ShawzinBot 把这件事拆掉了:你只需要提供音高和时间信息,按键逻辑全部由程序代劳。
两个最常见的用法:
- 你手里有一首现成的
.mid文件,想在游戏里放给朋友听。加载文件、点播放,剩下的交给它。 - 你手边有 MIDI 键盘或合成器,想在游戏里直播时现场弹奏。从设备下拉框里选上设备,直接在键盘上弹就行。
环境准备与部署
- 系统:Windows,已安装 .NET Framework 4.7.2 或更高版本
- 无需安装,程序目录整体移动也不影响运行
获取源码并运行主程序:
git clone https://gitcode.com/gh_mirrors/sh/ShawzinBot克隆后进入ShawzinBot目录,双击ShawzinBot.exe即可。第一次运行前记住一条硬约束:游戏内设置的音阶必须和程序界面顶部显示的音阶一致(默认是 Chromatic 全音阶),否则弹出来会整体跑调。
能力拆解:从输入到按键
输入端:文件与设备两种来源
程序基于 DryWetMIDI 库读取标准 MIDI 文件(SMF,.mid/.midi),同时通过该库的设备接口枚举系统中的 MIDI 输入,包括实体 MIDI 键盘、合成器和虚拟 MIDI 通道。界面左侧的下拉框负责选择来源,右侧的刷新按钮用于重新枚举设备。
映射层:一个音符被拆成四个维度
沙温琴的每个音由四个要素决定,映射表里每个音符 ID 对应一组{音阶, 把位, 弦序, 颤音}数值,例如 C3 映射为0,0,1,0。可演奏范围是 C3 到 D#5,超出范围的音符有两种处理方式:开启"Transpose notes"(默认开启)时把越界音符移入可演奏区,关闭时直接丢弃。音阶切换通过连按 Tab 键完成,程序会记录当前音阶位置并只补按必要的次数。完整映射逻辑见 ShawzinBot/ActionManager.cs。
输出端:只在游戏窗口激活时按键
按键通过模拟 Windows 键盘消息(WM_KEYDOWN / WM_KEYUP)发出。程序在每次发送前检查 Warframe 窗口是否处于焦点,不在焦点就暂停回放,所以它不会"顺手"操作你正在使用的其他窗口,也不涉及内存读写,属于纯粹的键盘输入模拟。
实操演示
播放一个 MIDI 文件
- 双击
ShawzinBot.exe启动,左上角按钮打开文件选择框,选中一个.mid文件。 - 界面会列出文件中的所有轨道,默认勾选第一条轨道。多轨文件(比如主旋律和伴奏分开)时,在 "MIDI Tracks" 下拉框里只勾你想让游戏演奏的那条。
- 进游戏把沙温琴的音阶设置成与界面顶部 "Scale: ..." 显示一致,通常保持默认的 Chromatic 即可。
- 点播放,然后 Alt+Tab 切回游戏窗口。焦点检测通过后回放自动开始;中途切出游戏,程序会暂停,防止音阶状态错乱。
- 速度下拉框提供 0.25x 到 2x 的步进,曲子太快对不上节奏时降到 0.75x 试试。
连接 MIDI 设备
在左上设备下拉框选中你的 MIDI 键盘,没有看到设备就点下拉框右侧的刷新按钮重新枚举。无需加载任何文件,在键盘上按下的每个音会实时映射进游戏,适合直播时的即兴演奏。
其余能力一句话带过:勾选 "Play MIDI through speakers" 可以通过系统扬声器试听原曲,方便调轨前预览;颤音(Whammy)效果由独立复选框控制。
效果不达预期时的排查路径
游戏里一点声音都没有。先确认 Warframe 窗口是否在最前且获得焦点——这是唯一的前置条件。程序只向游戏窗口发送按键,焦点不在游戏上时所有音符都会被丢弃。
某些音区(偏高或偏低的部分)突然没声。这些音符超出了 C3–D#5 的映射范围。检查 "Transpose notes" 是否处于开启状态;若已开启仍觉得移调后的听感不对,可以关掉它,让越界音符直接缺席,曲子的骨架通常还是完整的。
和弦按下去只剩一个音、或者听感发"糊"。这是沙温琴乐器本身的限制,同时按下多个键时游戏内表现不正常,并非程序 bug。做法是在 MIDI 编辑器里把同时发声的音符错开几毫秒,逐音触发。
整首曲子听起来不对味、像跑调。九成是音阶不匹配。对比界面顶部的 "Scale: ..." 与游戏内沙温琴的音阶设置,改成一致再播放。
设备下拉框里没有我的键盘。点刷新按钮;仍找不到时确认设备的 MIDI 驱动正常,并在系统其他软件中验证该设备能否正常发送音符。
进阶与二次开发入口
- 想改"某个音对应哪些键":改 ShawzinBot/ActionManager.cs 里的
shawzinNotes映射表(音符 ID → 四元组)以及把位、弦序、特殊键三张字典。这是全项目最核心的配置点。 - 想调整播放行为:速度档位、轨道勾选逻辑、设备枚举与事件分发都在 ShawzinBot/ViewModels/MainViewModel.cs;轨道、设备、速度三个界面模型的定义在 ShawzinBot/Models/ 目录下。
收束
ShawzinBot 本质上是一台把 MIDI 翻译成你键盘语言的翻译器,你的全部工作量只剩下"把游戏窗口切到前面"。
下一步可以做的三件事:
- 找一首你熟悉的
.mid文件,按上面的步骤跑通第一次完整播放。 - 把游戏内沙温琴音阶核对到与界面显示一致,再重播一次确认音准。
- 把速度分别切到 0.75x 和 1.25x 各听一遍,选定你最常用的回放倍速。
【免费下载链接】ShawzinBotConvert a MIDI input to a series of key presses for the Shawzin项目地址: https://gitcode.com/gh_mirrors/sh/ShawzinBot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考