我最近在 Google Play 上发布了一款基于语音控制的游戏,名为 Pitch Pilot(其中您的发音频率是模拟飞行控制器的动态),并且我写了一篇详细的技术过程分解。
我想使用 Web 技术(React + Vite + Capacitor)来构建它,以便加快迭代速度,但这也带来了与 Unity 或 Godot 相比的独特挑战。
以下是我们解决的快速概述:
- 低延迟的音调检测: 我们使用 Web Audio API,并优化了用于歌声的自相关算法。将搜索范围限制在 50Hz-2000Hz 之间,并在噪声门上下放,让延迟降低到 15ms 以内,剩下足够的 CPU 预算来运行 60fps 游戏循环。
- 声音校准:由于音符范围在男高音和女高音之间有很大差异,游戏在首次启动时运行一段范围校准。它捕获了您的舒适的低音高音并动态地将它们映射到屏幕的垂直坐标。
- 关闭反馈环:传统的耳部训练是多选项的。我们绘制了一个实时 Y 轴迹线 polyline 后面显示了玩家的声音相对于目标门限的确切位置,让他们可以在短语期间微调。
- 性能 & GC: 在低端 Android 手机上渲染向量网格并管理 JS 上的音频缓冲区意味着垃圾回收暂停会破坏游戏。我们必须实现严格的对象池和结构布局优化以防止帧掉落。
完整的写作,包括代码逻辑和布局细节,可以在以下地址找到:https://pitchpilotgame.com/blog/how-pitch-pilot-was-made/
如果你曾经使用过 JS/Capacitor 堆栈来构建游戏或在移动设备上进行实时音频分析,我很想与你交流优化经验。
评论 (0)