软件讲解

自动演奏程序:读 MIDI 曲库,编译成按键动作,再用 Windows 的 SendInput 发给屏幕上的口琴。纯 Python 标杆库写成,零第三方依赖。

(广告)本文由「青木文摘」编辑整理,转载请注明出处。广告

歌曲阐述

第一次打开时,程序会在 exe 旁边自动建一个「曲库」文件夹,并放进一首示范曲(小星星), 所以双击之后马上就有东西可弹。想弹别的曲子:进「内置社区分享库」页搜索取下, 或者把自己的 .mid 文件丢进那个「曲库」文件夹里。

Windows 或许会弹"未知刊出者"的警告(这是没有采购代码加密标记证书的逃不掉结局,点"仍要运行" 即可);少数杀毒应用会误报 PyInstaller 整体交付的程序,需要加允许清单。

软件能力

图形界面

双击 run.bat 打开(用 pythonw 启动,不弹黑框)。左侧是浮岛式侧边栏,

页面包括演奏、收着、热键、内置社区拿出来库、日志和设好。

演奏页:曲库列表、当前曲目、当前音与要按的键、可拖动的位置条(拖到哪就从哪起初弹)、

播放控制、跳过前奏、循环、连奏防断音、速度滑条、倒计时、演奏预览

存档页(Soundpad 式两栏):左栏存起来列表,右栏曲子。存档只存在 hca.json 里,

不挪动曲库文件;一首曲子可以进多个码住;双击曲目径直起初演奏

热键页:任意条数的「组合键 ↔ 曲目」,现按现录,按下马上倒在另一边演奏

内置社区分发库页:搜索 B 站三角洲口琴谱社区,列拿到量/赞一下,取下后转成 MIDI 存入曲库

曲库管理

命名、分类、批量抹掉、一次性入夹。归类就是曲库下的子文件夹(旧版和游戏只读一层,

看不到子文件夹里的曲子,正好当仓库用;本程序两层扫描,照例可选可弹)。

清掉永远走体系回收站(hca/trash.py 用 SHFileOperationW + FOF_ALLOWUNDO),可还原。

内置直连的 MIDI 下载站

程序里那个「内置社区分享库」页就是内置直连的谱面下载站,不经过我们自己的任何服务器, 也不要求你注个号或配置:打开就能搜、能拉取。

这个方向是单向的:只获取,不提交。 你本地曲库里的曲子不会被传上去 —— 整个任务里 只有 hca/bili.py 会联网,它只发五类请求:拿游客身份的两个 POST(发请求体是空的), 以及搜索、统计、获取三个 GET。没有 PUT,没有multipart,没有任何文件上传。

资讯站:B 站《三角洲行动》口琴谱社区(https://www.bilibili.com/toy/deltaforce/index.html)

程序直连的通道:https://111.229.198.119/v1(这个地址是从社区页前端 JS 里取到的, 证书是签给域名的,因此用户端要带 Origin/Referer 头,实眼下 hca/bili.py)

怎么用:要紧词留空则按全新浏览,支援翻页;列表带获取量和给个好评数。 选一首或几首点拉取,程序把它转成 MIDI 存进你的曲库,重名自动加 (2)(3)

获取到的是 raw deflate 瘦身的 DFHS v1 二进制谱(格式已逆向,解码器也在 hca/bili.py), 转出来的 MIDI 是 format 0,和本地曲库里其他文件一样能径直弹。

需要阐述的是:这个站是玩家投稿的社区曲库,不是严格意义上的开源乐谱站(比如 Mutopia、 MuseScore 那类)。它的价值是谱面本身就是为口琴改编的,拿来就能弹;代价是成色参差 —— 有些是音频自动扒的劣质谱(判定办法见「扒谱水平体检」一节)。

开源地址:https://github.com/xkrmand-web/delta-harmonica

自动化能省下大量重复劳动