RHYTHM GAME / 音乐 · 音游
霓虹音游(NEON PULSE)
参考 Phigros 玩法的浏览器音游,点开就能玩。音乐全部由内置合成器实时生成(无版权问题),谱面从音乐事件表派生——所以画面和声音是同一份数据的两个投影,音画同步是结构性保证,不存在对轴问题。零依赖、零构建。
玩法
- 2K – 12K 任意键数,键位为 Phigros 式家用布局(
S D F J K L等),按曲目难度自己选 - 点按 / 长按 / 双押:长按条按住到消失为止,同一时刻多个 note 就是双押(两根手指同时按)
ESC/P暂停继续,R重开本曲;暂停菜单里可开自动演示预览谱面- 切到后台自动暂停,回来不会攒一堆 MISS
判定
| 判定 | 分数权重 | 标准窗口 |
|---|---|---|
| PERFECT | 100% | ±45ms |
| GREAT | 65% | ±90ms |
| GOOD | 30% | ±135ms |
| MISS | 0% | 断连击 |
设置里可切 严格 / 标准 / 宽松 三档窗口,满分 1,000,000 分。生命值归零判 Failed(可在设置里关掉)。成绩按 歌曲 + 难度 + 键数 分别记录。
内置曲目
| 曲目 | BPM | 调式 | 风格 |
|---|---|---|---|
| Neon Drive 霓虹夜驰 | 128 | A 自然小调 | Synthwave |
| Crystal Rain 水晶雨落 | 138 | C 大调 | 明快流行 |
| Void Runner 虚空疾行 | 148 | E 弗里几亚 | Dark / DnB |
每首约 66–76 秒,结构为 intro → verse → build → drop → break → drop2 → outro。
谱面生成
难度控制三件事:底鼓落点、参与的乐器、密度上限。
| EASY | NORMAL | HARD | |
|---|---|---|---|
| 底鼓 | 1、3 拍 | 1、3 拍 | 每拍 |
| 参与乐器 | 底鼓/军鼓/主旋律/琶音(稀疏) | + 踩镲(四分)/琶音(四分) | + 踩镲(八分)/琶音(八分) |
| 双押比例 | 18% | 22% | 32% |
| 密度上限 | 5 note/s | 6 note/s | 7.8 note/s |
密度上限是硬保证:网格固定在十六分音符上,靠最小间隔限不住,所以额外加了一层滑动窗口——任何 1 秒窗口内不超过上限,超了就丢掉窗口里优先级最低的那个 note(双押整组一起删)。轨道分配用贪心打分:避免刚用过的轨道、优先左右手交替,多押以中心为基准向外对称展开。
导入自己的歌
设置页 → 导入本地音频,自动扒谱:
- 下混单声道 → 512 采样窗的 RMS 包络 → 正向差分得到「新颖度」信号
- 节拍检测:归一化自相关 tempogram + 对数高斯先验(120BPM)找基线周期,再在 0.5×/1×/2× 三个倍频候选里用「拍点网格信息量」决胜
- 自适应阈值找起音点,量化到十六分网格;能量持续则转成长按
支持浏览器能解码的格式(mp3 / wav / ogg / m4a 等)。导入的曲目只存在于当前标签页,刷新后需重新导入。
延迟校准
设置 → 开始延迟校准 → 跟着节拍敲 20 次空格,会算出平均偏移和离散度并写入设置。以 AudioContext.currentTime 为基准记录敲击与已调度节拍的时间差,包含了音频输出延迟,补偿的是你实际感知到的延迟。觉得偏早/偏晚也可以直接拖滑块。
触屏
手机 / 平板直接用手指点轨道就能玩:
- 判定区域是屏幕高度 22% 以下整条轨道,上方留白防误触
- 判定用
PointerEvent.timeStamp(硬件时间戳)而非事件处理时刻,触屏判定不吃「一帧」的亏 - 竖屏判定线压到 70%(拇指舒适区),横屏 58%,平板 62%;场地宽度、按键高度、note 尺寸、HUD 字号同步变化
- 只认「主指针是触摸」的设备,触屏笔记本仍走桌面布局
- 点按目标 ≥ 44px,
env(safe-area-inset-*)避让刘海与 home indicator
触摸输入延迟一般比键盘大,觉得判定偏可以先跑一次延迟校准,或把判定窗口调成宽松。
技术实现
- 纯静态 — 原生 HTML/CSS/JavaScript,无依赖、无构建,零版权风险
- 作曲 — 给定调式、和弦进行和段落结构,用固定种子 PRNG 生成一整张音符事件表(时间/时值/音高/力度)
- 合成 — 事件表交给前瞻调度器(25ms 轮询、280ms 预排),Web Audio 振荡器 + 合成器包络实时发声,主总线接压缩器 + 生成式混响 + 反馈延迟
- 谱面 — 从同一张事件表派生(见上)
- 渲染 — Canvas 场地 / note / 特效 / 背景,下落速度 0.4×–2.2×,背景亮度与泛光可调(低配可关)
- 状态持久化 — 设置与成绩存 localStorage