来源: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