Releases: ChickenD233/harmonica-auto-player
Release list
v2.0.4 · 修复输入法自检(中文微软拼音 + Shift 切英文)
v2.0.4 · 修复输入法自检(中文微软拼音 + Shift 切英文)
修复:输入法自检仍然误报
2.0.3 改了判定逻辑,但读状态的位判断写错了。
IME_CMODE_ALPHANUMERIC 这个常量本身就是 0x0000,所以
(conversion & IME_CMODE_ALPHANUMERIC) == IME_CMODE_ALPHANUMERIC // 永远为真等于根本没判过"中文还是英文"。
正确的判据是 IME_CMODE_NATIVE 位:微软拼音中文态读出来是 0x0401(带 NATIVE 位),
英文态是 0x0000。
换了一个更可靠的读取来源
改成读默认输入法窗口(ImmGetDefaultIMEWnd)。
直接问游戏窗口往往读不到 —— 它不一定处理 WM_IME_CONTROL。
而系统为这个窗口建的输入法窗口能如实回答开关与转换模式。
本机实测的前后对比:
前台窗口 : 开=0 转换模式=0x0000 ← 读不到,这就是以前误判的原因
默认输入法窗口: 开=1 转换模式=0x0401 ← 中文态,答得清清楚楚
判定表
| 默认输入法窗口状态 | 结果 |
|---|---|
| 输入法关着 | 通过 |
开 + 0x0000(英文/半角) |
通过,显示「英文输入状态,按键直达」 |
开 + 0x0401(中文) |
不通过,提示按 Shift 切英文 |
开 + 全角/片假名(0x0411 / 0x0419 / 0x0409) |
不通过 |
| 读不到 | 只提醒(灰点),不报错(红叉) |
读不到时改成提醒而不是不通过:误报不通过会拦住本来能用的配置。
验证
- 判定用例全通过:IME 窗口中文态
0x0401/ 英文态0x0000/ 全角假名 / 输入法关着 /
全读不到等分支,加上简中繁中日文韩文 × 各种开关组合。 - 本机实测:简体中文布局 + 输入法中文态 → 正确判为不通过(提示按 Shift 切英文)。
切到英文态时该窗口读数为0x0000→ 判为通过。 - 缺音修复、MIDI 设备、试听跟随的回归全部重跑:漏音 0、零时长按键 0、
与 v2.0.1 基线 15 组时序完全一致。
如果你那边还是不对
跑一次仓库根目录的 ime-probe.ps1(只读,不改任何设置),把输出发回来。
它会同时打印前台窗口和默认输入法窗口两条路径的开关与转换模式,
英文态和中文态各跑一次即可定位。
v2.0.3 · 修复试听画面不跟随、输入法自检误报
v2.0.3 · 修复试听画面不跟随、输入法自检误报
修复:试听时卷帘画面跟不上声音
现象:声音正常往前走,卷帘的画面却不跟着走,播放头很快跑出可视范围。
进度条右边的时间数字和声音是对得上的 —— 问题只在画面。
原因:卷帘的自动跟随只在 Roll.IsPlaying = true 时才生效,
而这个标志只在演奏分支里设置过,试听分支从来没设。所以试听时视口一次都不滚动。
改法:试听开始设 IsPlaying = true,停止时按当前是否在演奏复位。
附带对齐。 卷帘的时间轴比谱面末音长一点(末尾留了右键加音的余量),
而试听时钟走的是谱面时间。两者原来按同一个比例画,播放头会带约 2% 的偏差,
越到后面越明显。现在试听开始时按「谱面末音 ÷ 卷帘总长」换算一次,播放头与音符严格对齐。
修复:输入法自检误报
现象:键盘布局是中文、但按 Shift 切到英文时,自检打叉。其实这个状态按键是直达游戏的。
原因:旧实现只看键盘布局的 LANGID,是中文/日文就一律判不通过。
但「布局」和「输入法当前是中文还是英文」是两件事。
改法:布局是中日韩时,再读输入法的真实状态。
| 状态 | 结果 |
|---|---|
| 输入法关着 | 通过(英文直通) |
| 输入法开着但英文/半角模式 | 通过,并显示「简体中文布局已切英文模式,按键直达」 |
| 输入法开着且中文/假名状态 | 不通过,提示按 Shift 或 Ctrl+空格 切英文 |
| 读不到状态 | 仍然提醒确认,但不假装知道结果 |
开关状态用 WM_IME_CONTROL / IMC_GETOPENSTATUS 跨进程查询(最可靠,不依赖本进程的输入法上下文),
失败再退回 ImmGetContext。
验证
- 输入法判定:38 项用例全通过。覆盖简中/繁中/日文/韩文 ×(开+英文模式 / 关 / 开+中文模式 /
读不到转换模式 / 读不到开关状态),以及英文布局。 - 本机实测:布局 0x0804(简体中文)+ 英文模式 → 通过,界面显示绿灯与新文案。
- 缺音修复与 MIDI 设备接入的回归全部重跑:漏音 0、零时长按键 0、与 v2.0.1 基线 15 组时序完全一致。
下载
HarpAutoPlayer-win-x64.zip。解压后双击 HarpAutoPlayer.exe。单文件,不需要安装 .NET。
v2.0.2 · MIDI 设备接入、修复部分曲子缺音
v2.0.2 · MIDI 设备接入、修复部分曲子缺音
新增:MIDI 设备接入(#4)
接上 MIDI 键盘或打击垫,按键直接吹进游戏,不用先做谱。
- 选项区最上面一行「MIDI 设备实时演奏」。勾上 → 选设备 → 切到游戏开始弹。
- 基准八度决定设备上哪个八度是口琴的中音 do。「自动贴合音域」默认开。
- 「力度下限」默认 1(不过滤)。设备有抖动或触后噪声时往上加。
- 状态文字实时显示最近一个音映射成了什么。停止时日志给出统计。
- 音高:基准八度的 do..si →
Z X C V B N M。高一个八度按右键,低一个八度按左键,
升半音按中键。最高到高高音#do。 - 口琴是单音。同一根键上后来的音优先,前一个音被换掉。
- 默认关闭。不勾选时程序完全不碰 MIDI 设备。
修复:2.0.1 部分曲子会缺音
现象:听着像"按键按快了,少几个音"。同刻起音、音尾压住下一个音头、密集打击乐轨最容易见到。
换回 2.0.0 就正常。
原因:音符在时间上重叠时,调度器为了让后一个音准时按下,把前一个音的抬起时刻
一路提前到"按下"的同一时刻。前一个音变成零时长按键:按下和抬起落在同一帧,
游戏按帧采样时一帧都读不到,整段音被吃掉。
改法:音符之间用"槽位"排开,不再靠缩短前音让位。
- 与前音重叠(含同刻起音)的音顺延到前音之后,时值不变。
- 每次按下至少跨过一个帧点(帧长 + 1ms 余量)。
- 修饰键提前量如果必然把本音推后,整段跟着后移,时值不变。
验证:
- 示例 1~4 加密集打击乐轨,三个输入档位:漏音 0。
- 合成极端谱面(同刻起音、长音重叠、同键 10ms/30ms 重触发、1/2~1/16 音符、
首尾相接、八度来回切):零时长按键 0,同键粘连 0。 - 与 v2.0.1 的调度器逐事件比对:正常谱面 15 组按键时刻完全一致。正常曲子的时序没有变化。
其它
「时序诊断」多报一项:时值被压到下限的音数。正常曲子是 0。
不是 0 就说明这首谱挤得比该档位允许的最快速度还快,换「稳健」档或降速。
下载
HarpAutoPlayer-win-x64.zip。解压后双击 HarpAutoPlayer.exe。
单文件,不需要安装 .NET。
v2.0.1 · 修复设置不保存、F5/F7 快进后退、卷帘显示
v2.0.1
修两个问题。第二个影响更大。
修复:设置从来没保存过,「快速上手」每次都弹
现象:速度、移调、热键、输入兼容全都不记忆。每次启动都弹「快速上手」。
原因:发布开了裁剪(PublishTrimmed)。反射式 JSON 序列化依赖的元数据被裁掉,
运行时抛异常。而 Save 与 Load 原先都静默吞掉异常,所以一点提示都没有。
发布日志里早就有警告,只是我没当回事:
Persist/AppConfig.cs(52,41): warning IL2026: Using member
'System.Text.Json.JsonSerializer.Serialize<TValue>(TValue, JsonSerializerOptions)'
which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming.
改动:设置读写改用源生成的 JSON 上下文(JsonSerializerContext)。
编译期产出读写代码,不依赖反射,裁剪下也正常。
另外把两处静默 catch 改为写日志,以后再出问题能查到。
验证:用与发布完全一致的裁剪构建连跑两次。
| 浮层可见 | FirstRunDone | settings.json | |
|---|---|---|---|
| 第 1 次,点「知道了」 | 是 | 否 → 保存后 是 | 已写入 |
| 第 2 次 | 否 | 是 | 已存在 |
发布时的 AppConfig 相关裁剪警告:2 条 → 0 条。
「快速上手」的文字同时精简。三段各一句话,注意事项压成一行。
原来占满一屏,现在是一张小卡。
修复:F5 与 F7 不是相对移动
按 F7 总是跳到 5 秒。按 F5 总是回到开头。
原因:取当前位置时只在「正在演奏」的分支里读引擎时钟。
double cur = playing ? eng!.ElapsedSeconds : _previewSeconds;其余情况读 _previewSeconds。刚打开歌曲时它是 0。
所以 0+5 得 5 秒,0−5 被夹到 0。
改动:播放位置改为只有一个来源。试听中读试听时钟。演奏中读引擎时钟。
空闲时读起始位置,并且每次定位都同步更新它。
实测(未播放,歌曲长 21 秒):
前进 5 秒:10.0 → 15.0 s
后退 5 秒:15.0 → 10.0 s
后退 5 秒:10.0 → 5.0 s
前进 5 秒:5.0 → 10.0 s
后退 999 秒:10.0 → 0.0 s 正确夹在开头
日志现在写明前后位置,方便你自己核对。
请在 Windows 上确认
- 首次启动应弹「快速上手」。点「知道了」。再启动一次,不应再弹。
- 改速度、移调、热键,关掉程序,再打开。设置应保持。
- 空闲时按 F7 几次。位置每次加 5 秒。按 F5 每次减 5 秒,到 0 停住。
- 播放中、试听中也按 F5 / F7。应从当前位置加减 5 秒。
修复:卷帘左键栏只剩 C4-C5,正在响的音符不显示
现象:声音正常,但卷帘看不到音符,左键栏只有一个八度(正好 C4 到 C5)。
原因:一个声部都没勾选时,刷新流程会清空卷帘。而演奏引擎在开始播放时
已经把音符复制走了,所以声音继续,画面却空了。
左键栏的 C4-C5 是「音符列表为空」时的兜底区间,正好一个八度,所以看起来像音域变了。
改动:
- 已载入文件但没勾选声部时,不再清空卷帘,保留上一次的内容,并在日志写明。
只有「根本没载入文件」才清空。 - 音符为空时,左键栏沿用上一次的音域,不再退回固定的 C4-C5。
如果又出现这个现象,请在 %LOCALAPPDATA%\HarpAutoPlayer\play.log 里
找「没有任何声部被勾选」这一行,并把当时的操作顺序告诉我。
修复:可见音域只有一个八度
现象:左键栏只显示一个八度(例如 C4 到 C5),超出范围的音符看不到。
原因:可见音域只保证「比谱面实际音高宽一个八度」。窄音域的曲子因此只显示一个八度。
而口琴能吹三个八度,于是可吹范围内的其它音高全在画面外,没法选中、没法拖过去改。
改动:可见音域的最小跨度改为 4 个八度(47 个半音),按谱面实际音高居中展开。
超出可吹范围的音符照旧用浅灰色画出来。现在它们一定在画面内,可以选中、拖动、删除。
实测:
| 文件 | 可见音域 | 跨度 |
|---|---|---|
| 示例3-铃儿响叮当 | A#2–A6 | 4 个八度 |
| 【车万】寄世界于偶像 | F1–E5 | 4 个八度 |
| 河北墨麒麟 | D#0–D#3 | 4 个八度 |
v2.0.0 · 内置 MIDI 编辑器与试听
v2.0.0
这一版加入内置 MIDI 编辑器。你可以先改谱,再演奏。
新增:MIDI 编辑器(卷帘)
| 操作 | 作用 |
|---|---|
| 标尺点 / 拖 | 定位播放位置 |
| 点左侧琴键 | 选中该音高的全部音符。按住拖动可连选多个音高 |
| 拖音符中部 | 移动。多选时整组一起动。左右改时间,上下改音高 |
| 拖音符任一端 | 改长度。左端改头,右端改尾。音高不变 |
| 空白处拖 | 框选多个音符 |
| 空白处单击 | 定位,并清空选择 |
| 双击空白 | 加一个音。按住继续拖可一次定好长度 |
| 右键 | 删音。按住拖动可连续擦除 |
| Delete | 删除选中的音 |
| Ctrl+A / Esc | 全选 / 清空选择 |
| 方向键 | 微调。左右按吸附步长,上下按半音。按住 Shift 加速 |
| Ctrl+Z / Ctrl+Y | 撤销 / 重做。保留当前缩放位置 |
| 滚轮 | 以光标为锚点缩放 |
| Shift+滚轮 / 中键拖动 | 左右平移 |
| 缩小 / 放大 / 全曲 | 工具栏按钮。右边显示当前缩放百分比 |
| 帮助 | 展开 / 收起右侧操作说明。默认收起 |
- 时间标尺按文件的拍号与速度画小节线与小节号。拍线太密时自动退回秒级刻度。
- 琴键栏在卷帘左侧。白键黑键有底色,只标 C 的音名。
- 跟随播放:播放时卷帘跟着播放头走。手动平移后自动关掉。
- 导出 MIDI:把改动后的谱面写成标准 MIDI 文件。
- 撤销按手势记录。整组拖动 8 个音,撤销时只算一步。
新增:试听
- 「试听」是「停止」右边一个同样大的独立按钮。点了就放声音,再点一下停止。
- 它和演奏完全分开:不发送按键,不走倒计时,不会最小化窗口。
- 声音由 Windows 自带的 MIDI 合成器发出。不需要安装音频软件。
- 播放中随时可以拖进度条或卷帘定位。松手就从新位置接着放。
- 设备不可用时按钮自动变灰。日志写明原因。
删除
- 「自动提取主旋律」,「人声旋律提取」和「呼吸休止」。加了midi可视化,直接在上面改。软件实在是做不到一个通用的压缩音频和提取主旋律的方法🐖。
位置调整
- 「去除开头空拍」移到右栏「演奏参数」那一行。
- 左栏底部的小选项卡片删除。轨道列表占满左侧高度。
- 顶部两张卡片合并成一张:状态在上,曲目信息在下。
- 默认窗口高度 780 改为 860,给卷帘留出编辑高度。最小高度仍是 760。
修复
- 短音符拖不动。 抓取带原为固定 6 像素。音符最小绘制宽度是 2.5 像素。
窄于 6 像素的音符整条都落在抓取带里。它只能改长度,不能移动。
现在抓取带取 min(6px, 音符宽度的 30%)。 - 拖动时乱飘,不跟鼠标方向。 原因是每帧都把整段位移重复叠加一次。
现在手势开始时记录原位基准。每次移动都从基准重算。 - 吸附吸的是光标,不是音符边。 抓住音符中间拖动时,音符边落在格外。
现在让音符的头或尾落在格子上。取需要修正更小的那一端。 - 放大到某一段改谱后,按 Ctrl+Z 弹回全曲。 现在撤销与重做保留缩放位置。
- 试听吞音严重。 旧实现用 80 毫秒的定时器采样当前正在响的音,
比采样间隔短的音会整颗跳过。现在改为事件调度,先排出每个音的起止时刻,
定时器每次把到点的事件一次补齐发出。 - 进度条播放时左右抖动。 原因是它右边的时间与定位音标签长度一直变,
把进度条反复挤宽挤窄。两个标签改为固定宽度。 - 部分音符错误显示为灰色。 编辑改动音高后,颜色仍按旧集合计算。
现在编辑提交后也刷新这个集合。 - 小窗口下卷帘排版崩坏,缩放按钮显示不全。 原因有三个:工具栏不换行、
走带行横向压字、最小高度不足。全部修复。
升级说明
- 老设置文件可以继续用。已删除选项对应的字段会被忽略,不影响其它设置。
- 改动较大,所以版本号从 1.1.1 直接跳到 2.0.0。Ψ( ̄∀ ̄)Ψ
请在 Windows 上确认
- 导入一首完整的歌。卷帘是否从第 0 秒起就有音符,并且一直铺到歌曲后段。
- 放大到某一段,拖动音符。音符是否跟手,不飘。
- 按 Ctrl+Z / Ctrl+Y。缩放位置是否保持。
- 点「试听」。声音是否连续,不吞音。播放中拖进度条,松手是否从新位置接着放。
- 把窗口拖到最小尺寸。缩放按钮是否完整可见。
v1.1.0
下载
解压后双击 HarpAutoPlayer.exe,会弹 UAC,选「是」。自带 .NET 运行时,不需要安装任何东西。
本版更新(相对 v1.0.9)
- 新增内置 MIDI 卷帘:横轴是时间,绿条=可演奏、灰条=超出音域。点或拖动即定位
- 载入后即可定位:进度条不再要等播放才能拖;定位处直接显示当前的音(音名 + 简谱 + 要按的键)
- 播放从你调好的位置开始,不用先从头听一遍
- 新增快进 / 后退热键:默认 F5 后退、F7 前进,按一下走 5 秒,可改键
- 体积减少 59%:下载 37.9 → 15.5 MiB,解压后 90 → 21 MiB,功能不变
- 界面美化:统一配色与设计令牌,卡片分层,新增空状态引导
- 文案精简:界面提示、日志、注释、README、更新说明合计压掉 30%
新增快进 / 后退热键
| 键 | 动作 |
|---|---|
| F6 | 空闲=开始。播放中=暂停。暂停中=继续。倒计时中=取消 |
| F5 | 后退 5 秒 |
| F7 | 前进 5 秒 |
按一下走 5 秒。三个键都能改,也能关掉。
注意:播放中跳转可能让游戏侧口琴卡音。修饰键与音键的状态会残留,游戏收不到成对的按下与抬起。遇到卡音,按「停止」,再重新播放。最稳的用法是播放前定位。
注意
- 游戏用窗口化,不要用全屏独占
- 输入法切英文;人物原地站好再开始
- 首次启动慢 0.5–1 秒(单文件要把原生库解压到
%TEMP%) - 压缩过的单文件 exe 可能被杀软误报,请先扫描
- 在线对局使用自动输入有封号风险,自行斟酌
文件校验(SHA-256)
26391a93e0ee34b006d86a344db681f6719aa6fb13d98e187baf22414346e6a4
为什么能小这么多
应用自己的代码只占 1.3 MiB,其余是 .NET 运行时与 Avalonia 图形栈。本次开启 IL 裁剪(PublishTrimmed=partial)删掉用不到的类库,再开单文件压缩。详见仓库里的 HarpAutoPlayer-体积分析报告.md。
口琴自动演奏器 v1.0.9
==================================================
口琴自动演奏器(《三角洲行动》)
更新说明 v1.0.9(2026-09-12)
【本版更新(相对 v1.0.8)】
-
强制以管理员身份启动
程序清单改为 requireAdministrator,双击后会弹出 UAC 提示,同意即可。
模拟按键受 Windows 的 UIPI 限制:若游戏以管理员运行而本程序不是,
按键会被系统直接拦截。强制提权可消除这一整类"发不进游戏"的问题。
(代价:每次启动都会有一次 UAC 确认。) -
检查管理员权限与输入法
界面单独一行显示两项结果,通过打勾、未通过打叉,启动后即可查看:
· 管理员:本程序是否以管理员身份运行;
· 输入法:当前前台窗口是否为中文/日文等 IME(会截走按键)。 -
新增「导出按键表」
把当前曲目导出为按键时序文件,内容与程序实际演奏完全一致:
· 罗技 G HUB 脚本(.lua)—— 可直接粘贴进 G HUB 的脚本编辑器;
· 通用 CSV(.csv)—— 时刻、按下/抬起、目标键。
导出时会按当前速度换算时刻,并沿用当前「输入兼容」档位的时序参数。说明:雷蛇 Synapse 的宏文件是私有格式、没有公开规范,因此不提供
"一键导入"文件;雷蛇用户请使用 CSV,或配合 Synapse 的宏录制功能。提醒:使用鼠标宏或脚本自动输入同样可能触发游戏反作弊判定,
相关风险请自行评估。 -
界面调整
右侧选项区原本把十余个控件塞在一个自动换行的面板里,改为按用途分成三行:
演奏参数 / 兼容性与导出 / 其它选项。
导出按键表改为按钮内置菜单(罗技 G HUB / CSV),不再单独占用一个下拉框;
修正了该按钮在没有开始播放时不可用的问题(现在选中声轨即可导出)。
自检结果不再混在日志里,改为独立的"播放前自检"一行:通过打勾、未通过打叉,
右侧带「刷新」按钮(切换输入法后点一下即可重新检测)。
【历史版本速览】
v1.0.8:主旋律提取改为「声部分离 + 旋律声部识别」,修复伴奏声部高于主旋律时
取音错误的问题;新增启动时检查更新。
v1.0.7:修复游戏内漏音。原实现将修饰键与音键在同一帧内发出,音键会被丢弃;
改为按物理帧保留间隔,并新增「输入兼容」档位与播放时序诊断。
v1.0.6:新增「播放后自动最小化窗口」(默认开;关掉后播放时窗口保持原样)。
v1.0.5:修复部分 MIDI 的“调号”等元事件含非法参数(如 scale=255)时无法载入的问题。
v1.0.4:热键统一为单个控制键 F6(空闲开始/播放暂停/暂停继续/倒计时取消);
暂停时可直接打开新 MIDI 换歌。
v1.0.3:自动推荐主旋律轨(★标记,打击乐轨禁用、列表加时长);
首次启动引导;播放/暂停二合一按钮;倒计时大字提醒。
v1.0.2:新增「去除开头空拍」(默认开):自动剪掉 MIDI 开头的整段休止。
v1.0.1:新增「人声旋律提取」,适用于伴奏与主唱混在同一声道的歌曲。
【使用提示】
- 完整使用说明与注意事项见项目 README:
https://github.com/ChickenD233/harmonica-auto-player - 本工具仅供学习与个人使用;在在线对局中使用自动输入存在封号风险,请自行斟酌。
口琴自动演奏器 v1.0.8
==================================================
口琴自动演奏器(《三角洲行动》)
更新说明 v1.0.8(2026-09-12)
【本版更新(相对 v1.0.7)】
-
主旋律提取算法改进
由「同刻多音取最高」改为「声部分离 + 旋律声部识别」:
先按音高与时间连续性把音符归入各声部,再按级进比例、时值、音区、
音域宽度、音符密度判定旋律声部。修复伴奏声部高于主旋律时取音错误的问题。
选项「同刻多音取最高」更名为「自动提取主旋律」。 -
新增检查更新
启动时后台查询最新版本,有新版本在界面顶部提示,点击打开下载页。
提示条上点右键可跳过该版本(下个新版本仍会提示)。
【历史版本速览】
v1.0.7:修复游戏内漏音。原实现将修饰键与音键在同一帧内发出,音键会被丢弃;
改为按物理帧保留间隔,并新增「输入兼容」档位与播放时序诊断。
v1.0.6:新增「播放后自动最小化窗口」(默认开;关掉后播放时窗口保持原样)。
v1.0.5:修复部分 MIDI 的“调号”等元事件含非法参数(如 scale=255)时无法载入的问题。
v1.0.4:热键统一为单个控制键 F6(空闲开始/播放暂停/暂停继续/倒计时取消);
暂停时可直接打开新 MIDI 换歌。
v1.0.3:自动推荐主旋律轨(★标记,打击乐轨禁用、列表加时长);
首次启动引导;播放/暂停二合一按钮;倒计时大字提醒。
v1.0.2:新增「去除开头空拍」(默认开):自动剪掉 MIDI 开头的整段休止。
v1.0.1:新增「人声旋律提取」,适用于伴奏与主唱混在同一声道的歌曲。
【使用提示】
- 完整使用说明与注意事项见项目 README:
https://github.com/ChickenD233/harmonica-auto-player - 本工具仅供学习与个人使用;在在线对局中使用自动输入存在封号风险,请自行斟酌。
口琴自动演奏器 v1.0.7
==================================================
口琴自动演奏器(《三角洲行动》)
更新说明 v1.0.7(2026-09-11)
【本版更新(相对 v1.0.6)】修复游戏内漏音
原因:游戏按键是按帧读取的(60fps 一帧约 16.7ms)。旧版把「松开前一个音 +
鼠标八度键 + 中键(升半音) + 本音按下」全挤在约 20ms 内发出,音键排在最后;
这一簇被折进同一帧时,音键就被吃掉了 —— 这是漏音的主要原因。
- 修饰键改为状态机:只发真实变化,顺序固定(先松开、再按下),不再挤成一簇;
- 最小间隔按物理帧给足:修饰键提前 ≥1 帧(40ms)、音键按住 ≥1 帧(45ms)、
同键重触发 ≥1 帧(45ms,旧版仅 12ms); - 最小间隔不再随播放速度被压缩(旧版加快速度会把 12ms 压到 2.4ms,必然粘连);
- 修正提前量被速度放大(旧版 5 倍速下会膨胀到 125ms,画面与声音错位);
- 换歌 / 拖进度条后强制释放并复位修饰键状态,避免音高错乱;
- 极快段落改为自适应,避免旧版把音往后推到丢音。
新增:
· 「输入兼容」档位:稳健(30fps / 卡顿,仍漏音就选它)、
标准(60fps 推荐)、极限(高帧率)。
· 播放结束时日志输出时序诊断,可直接看出还有没有漏音风险。
注意:本软件只保证「原地不动演奏」不漏音;按住 W/A/S/D 边走边弹仍会漏音。
【历史版本速览】
v1.0.6:新增「播放后自动最小化窗口」(默认开;关掉后播放时窗口保持原样,
适合放到副屏观察进度)。
v1.0.5:修复部分 MIDI 的“调号”等元事件带非法参数(如 scale=255)
导致整首无法载入的问题,改为自动纠正后继续载入。
v1.0.4:热键统一为单个控制键 F6(空闲开始/播放暂停/暂停继续/倒计时取消);
暂停时可直接打开新 MIDI 换歌。
v1.0.3:自动推荐主旋律轨(★标记,打击乐轨禁用、列表加时长);
首次启动“快速上手”引导;播放/暂停二合一按钮;倒计时大字提醒。
v1.0.2:新增「去除开头空拍」(默认开):自动剪掉 MIDI 开头的整段休止。
v1.0.1:新增「人声旋律提取」(人声音区+顶音+连续性,适合伴奏混同轨的歌曲)。
【使用提示】
- 完整使用说明与注意事项见项目 README:
https://github.com/ChickenD233/harmonica-auto-player - 第一次启动时程序内也有“快速上手”引导。
- 本工具仅供学习与个人使用;在在线对局中使用自动输入存在封号风险,请自行斟酌。
口琴自动演奏器 v1.0.6
v1.0.6 新增(来自 issue #1 的建议,感谢 @Tartarus-Z 反馈):
- 选项区新增勾选框「播放后自动最小化窗口」(默认勾选)
- 勾选:开始播放后窗口自动最小化到任务栏(与旧版行为一致)
- 不勾选:播放时窗口保持原样,适合把程序放到副屏观察播放进度/当前音符
- 关闭该选项时,日志会提醒“请点一下游戏画面让游戏获得焦点”,避免按键发到本程序窗口
- zip 内含「更新说明.txt」;单文件 exe(自包含,无需 .NET)