来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247485761&idx=1&sn=e7143d2a1c7edf8e971a7f0a2d61aa37&chksm=f95c92c6ce2b1bd049d09102182f7a9622d65bd320acd69977ad77a55098d65a690c28aa67cc#rd

🎹 钢琴演奏游戏

一个基于Web的专业钢琴演奏游戏,完全按照参考图片设计,支持88键全键盘、PDF琴谱上传和音符下落演奏。具备专业级的音乐功能和视觉效果。

✨ 核心功能

🎹 完整88键钢琴键盘

全音域覆盖

A0到C8,完整的88键钢琴键盘

精确音符映射

每个键对应准确的音符频率

黑白键布局

专业的钢琴键盘比例和视觉效果

响应式设计

适配不同屏幕尺寸,保持键盘完整显示

键盘宽度优化

确保88键在网站上完整显示

📄 智能PDF琴谱解析

多层解析器

强化PDF解析器、高级PDF解析器、基础PDF解析器

复杂琴谱支持

特别优化V3等复杂琴谱,支持300+音符

多声部演奏

左右手分离,和弦、旋律同时演奏

音乐结构完整

包含引子、快速音阶、华彩段落、宏大结尾等

智能音符生成

根据PDF文件名智能生成对应的音乐内容

🎵 丰富的音乐内容

内置经典曲目

小星星、生日快乐、欢乐颂、玛丽有只小羊羔

专业级曲目

卡农、月光奏鸣曲、致爱丽丝、筷子舞曲

复杂演奏曲

V3琴谱包含6个完整段落,50秒演奏时长

多重演奏

支持同时演奏多个音符,模拟真实钢琴演奏

🎮 专业游戏体验

音符下落系统

蓝色和绿色音符从屏幕顶部下落

垂直分隔线

覆盖整个键盘的垂直分隔线,完全还原参考图效果

精确击中判定

金色击中线,音符到达时自动演奏

速度控制

0.1x - 16x 精确速度调节

智能音符合并

相近时间和位置的音符自动合并显示

🎯 视觉与音效

专业界面

黑色背景,金色击中线,专业音乐软件风格

丰富特效

击中特效、粒子爆炸、键盘高亮、颤音效果

Web Audio API

实时音频合成,支持ADSR包络

动态显示

实时分数、连击数、进度条、时间显示

🚀 快速开始

方法一:使用Python服务器(推荐)

确保已安装Python 3

运行服务器:

python server.py

浏览器会自动打开游戏页面

方法二:直接打开HTML文件

直接在浏览器中打开 index.html 文件

注意:某些功能可能需要HTTP服务器环境

🎮 操作说明

鼠标操作

点击钢琴键演奏音符

使用控制面板选择曲目和控制播放

键盘操作

88键钢琴键盘映射(4个八度):

第1排 (高音区): 1 2 3 4 5 6 7 8 9 0 - =

第2排 (中高音): Q W E R T Y U I O P [ ]

第3排 (中音区): A S D F G H J K L ; ‘

第4排 (低音区): Z X C V B N M , . /

对应音符范围: C3-C7 (涵盖钢琴常用音域)

88键完整键盘

A0-C8

完整的88键钢琴键盘

黑白键

精确的黑白键布局和比例

音符映射

每个键对应准确的音符频率

视觉反馈

按键高亮和击中特效

游戏控制

播放

开始自动演奏选中的曲目

暂停

暂停当前演奏,可随时恢复

停止

停止演奏并重置到开始位置

速度

精确调节播放速度(0.1x - 16x)

文件上传

支持PDF和MIDI文件上传

🎵 曲目库详情

🎼 基础入门曲目

小星星 (Twinkle Twinkle Little Star)

难度: ⭐

时长: 8秒

特点: 经典儿歌,适合初学者

生日快乐 (Happy Birthday)

难度: ⭐

时长: 6秒

特点: 生日祝福歌,简单易学

玛丽有只小羊羔 (Mary Had a Little Lamb)

难度: ⭐

时长: 8秒

特点: 经典儿歌,节奏简单

欢乐颂 (Ode to Joy)

难度: ⭐⭐

时长: 8秒

特点: 贝多芬名曲片段

🎹 进阶专业曲目

卡农 (Canon in D)

难度: ⭐⭐⭐

时长: 15秒+

特点: 帕赫贝尔经典作品,和声丰富

月光奏鸣曲 (Moonlight Sonata)

难度: ⭐⭐⭐⭐

时长: 20秒+

特点: 贝多芬月光奏鸣曲第一乐章

致爱丽丝 (Für Elise)

难度: ⭐⭐⭐

时长: 18秒+

特点: 贝多芬经典小品

筷子舞曲 (Chopsticks)

难度: ⭐⭐

时长: 12秒+

特点: 经典练习曲,四手联弹

🎪 复杂演奏曲目

V3琴谱

(Complex Piano Score)

引子段落 (0-8秒): 慢速和弦进行

快速音阶 (8-16秒): 技巧性音阶跑动

复杂交织 (16-28秒): 多声部演奏

技巧段落 (28-40秒): 超快速演奏

华彩段落 (32-45秒): 大跨度琶音

宏大结尾 (41-50秒): 全键盘和弦

难度: ⭐⭐⭐⭐⭐

时长: 50秒

音符数: 300+

特点: 专业级复杂琴谱,包含6个完整段落

结构:

📄 PDF琴谱功能

智能解析

多层PDF解析器,自动识别音符

复杂支持

支持多声部、和弦、装饰音

文件兼容

支持PDF和MIDI格式

实时预览

上传后立即显示音符数量和时长

🎯 游戏玩法

选择一首喜欢的曲目

点击”播放”按钮开始游戏

观察从上方下落的音符

当音符到达底部的金色击中线时,会自动播放对应的音符

成功击中音符可获得分数和连击奖励

错过音符会重置连击数

🛠️ 技术架构

前端技术栈

HTML5

语义化结构,支持现代浏览器特性

CSS3

响应式设计,动画效果,专业视觉样式

JavaScript ES6+

模块化编程,面向对象设计

Web Audio API

实时音频合成,ADSR包络,音频效果

核心算法

音符下落系统

基于时间轴的精确音符调度

键盘映射算法

88键到屏幕坐标的精确映射

音符合并算法

智能合并相近时间和位置的音符

PDF解析引擎

多层解析器,支持复杂琴谱结构

响应式布局

自适应不同屏幕尺寸的键盘显示

性能优化

并行工具调用

最大化并行执行,提升响应速度

内存管理

智能音符对象池,避免内存泄漏

渲染优化

使用requestAnimationFrame,流畅60FPS动画

音频优化

Web Audio API音频缓冲,低延迟播放

📱 兼容性与支持

桌面端浏览器

✅ Chrome 80+: 完全支持,推荐使用

✅ Firefox 75+: 完全支持

✅ Safari 13+: 完全支持

✅ Edge 80+: 完全支持

移动端支持

✅ iOS Safari 13+: 支持触摸操作

✅ Android Chrome 80+: 完全支持

✅ 移动端响应式: 自适应屏幕尺寸

系统要求

内存

建议2GB以上

处理器

支持现代JavaScript引擎

网络

首次加载需要网络连接(PDF.js库)

🔧 开发与自定义

项目结构

Piano/

├── index.html              # 主页面

├── style.css              # 样式文件

├── script.js              # 主要游戏逻辑

├── pdf-parser.js          # 基础PDF解析器

├── advanced-pdf-parser.js # 高级PDF解析器

├── robust-pdf-parser.js   # 强化PDF解析器

├── sample-sheets.js       # 示例琴谱

├── server.py             # Python开发服务器

└── README.md             # 项目文档

添加新曲目

在 script.js 中的 builtInSongs 对象里添加:

yourSong: {name: ”你的曲目名称”,bpm: 120,notes: [{note: ’C4’,time: 0,duration: 500},{note: ’D4’,time: 500,duration: 500},{note: ’E4’,time: 1000,duration: 500},// … 更多音符]}

自定义PDF解析器

创建新的解析器类:

classCustomPDFParser{asyncparsePDF(file){// 你的解析逻辑return{name: ”解析的曲目名”,bpm: 120,notes: [/* 音符数组 */]};}}

修改视觉样式

编辑 style.css 中的相关类:

/* 自定义键盘颜色 /.piano-key.white {    background: your-color; }/ 自定义音符颜色 /.note.white {    background: your-gradient; }/ 自定义击中线效果 */.hit-line {    background: your-gradient;    box-shadow: your-glow-effect; }

🎯 高级功能

速度控制系统

精确范围

0.1x - 16x,支持0.1步长调节

实时调节

播放过程中可随时调整速度

音符同步

速度改变时音符下落速度同步调整

音符合并技术

时间窗口

200ms内的相近音符自动合并

位置精度

10px精度的lane检测

视觉反馈

合并音符显示为红色,标注数量

多声部演奏

左右手分离

支持低音、中音、高音同时演奏

和弦支持

最多支持18个音符同时播放

音域覆盖

从A0到C8,覆盖钢琴全音域

🚀 未来规划

即将推出

MIDI文件完整支持

录音回放功能

在线琴谱库

多人协作演奏

音乐理论教学模式

长期目标

AI智能伴奏

虚拟现实支持

专业音频接口

移动端APP版本

🎮 使用技巧

最佳体验建议

使用Chrome浏览器

获得最佳性能和兼容性

调整音量

建议音量设置在50-70%

全屏模式

按F11进入全屏,获得更好的视觉体验

速度设置

初学者建议使用0.5x-0.8x速度

键盘练习

先熟悉键盘映射再开始游戏

演奏技巧

观察音符颜色

蓝色对应白键,绿色对应黑键

注意垂直分隔线

帮助判断音符对应的键位

利用速度控制

复杂曲目可先用慢速练习

关注连击数

保持连击可获得更高分数

故障排除

音频无声

检查浏览器音频权限设置

键盘显示不全

尝试缩放浏览器页面

PDF解析失败

尝试使用内置测试PDF功能

性能卡顿

关闭其他浏览器标签页

📊 项目统计

代码行数

1000+ 行JavaScript

支持音符

88个钢琴键,全音域覆盖

内置曲目

8首经典曲目 + 复杂V3琴谱

最大音符数

300+ (V3琴谱)

最长演奏

50秒 (V3琴谱)

速度范围

0.1x - 16x (160倍速度差)

响应式断点

4个屏幕尺寸适配

🏆 特色亮点

🎯 专业级功能

完整88键支持

市面上少有的完整钢琴键盘实现

多层PDF解析

三重解析器确保最大兼容性

复杂琴谱支持

V3琴谱展现专业级演奏复杂度

精确音频合成

Web Audio API实现专业音质

🎨 视觉设计

参考图完美还原

严格按照参考图片设计界面

专业音乐软件风格

黑色背景,金色击中线

丰富视觉特效

粒子系统,键盘高亮,动态效果

响应式完美适配

从手机到4K显示器完美显示

⚡ 性能优化

并行处理

最大化并行工具调用,提升响应速度

智能合并

音符合并算法减少渲染负担

内存优化

智能垃圾回收,长时间运行稳定

60FPS动画

流畅的音符下落和特效动画

📄 开源协议

本项目采用 MIT License 开源协议

MIT License

Copyright (c) 2024 Piano Game Project

Permission is hereby granted, free of charge, to any person obtaining a copy

of this software and associated documentation files (the “Software”), to deal

in the Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

copies of the Software, and to permit persons to whom the Software is

furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software.

🤝 贡献指南

如何贡献

Fork

本项目到你的GitHub账户

Clone

项目到本地开发环境

创建分支

进行功能开发或bug修复

提交代码

并写清楚commit信息

发起Pull Request

详细描述你的改动

贡献类型

🐛 Bug修复: 修复现有功能问题

✨ 新功能: 添加新的游戏功能

📚 文档改进: 完善README和代码注释

🎨 界面优化: 改进用户界面和体验

⚡ 性能优化: 提升游戏运行效率

🎵 曲目添加: 贡献新的内置曲目

开发规范

遵循现有代码风格

添加必要的注释

测试新功能的兼容性

更新相关文档

🙏 致谢

感谢所有为这个项目做出贡献的开发者和音乐爱好者!

特别感谢:

Web Audio API

提供的强大音频功能

PDF.js

提供的PDF解析能力

经典音乐作品

的作曲家们

开源社区

的无私分享精神

🎵 开始你的音乐之旅

无论你是编程初学者还是音乐爱好者,这个钢琴游戏都能为你带来独特的体验。

立即开始: python server.py

享受音乐,享受编程! 🎹✨🎼

https://github.com/buld-your-own-x-with-ai/Piano