Skip to content

v2.0.2 · MIDI 设备接入、修复部分曲子缺音

Choose a tag to compare

@ChickenD233 ChickenD233 released this 13 Sep 05:21
· 5 commits to main since this release

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 就正常。

原因:音符在时间上重叠时,调度器为了让后一个音准时按下,把前一个音的抬起时刻
一路提前到"按下"的同一时刻。前一个音变成零时长按键:按下和抬起落在同一帧,
游戏按帧采样时一帧都读不到,整段音被吃掉。

改法:音符之间用"槽位"排开,不再靠缩短前音让位。

  1. 与前音重叠(含同刻起音)的音顺延到前音之后,时值不变。
  2. 每次按下至少跨过一个帧点(帧长 + 1ms 余量)。
  3. 修饰键提前量如果必然把本音推后,整段跟着后移,时值不变。

验证:

  • 示例 1~4 加密集打击乐轨,三个输入档位:漏音 0。
  • 合成极端谱面(同刻起音、长音重叠、同键 10ms/30ms 重触发、1/2~1/16 音符、
    首尾相接、八度来回切):零时长按键 0,同键粘连 0。
  • 与 v2.0.1 的调度器逐事件比对:正常谱面 15 组按键时刻完全一致。正常曲子的时序没有变化。

其它

「时序诊断」多报一项:时值被压到下限的音数。正常曲子是 0。
不是 0 就说明这首谱挤得比该档位允许的最快速度还快,换「稳健」档或降速。

下载

HarpAutoPlayer-win-x64.zip。解压后双击 HarpAutoPlayer.exe。
单文件,不需要安装 .NET。