正如爱因斯坦所体会的,音乐与科学之间有着紧密联系。在他看来,音乐不仅仅是一种艺术形式,更是一种能够激发灵感和创造力的源泉。许多伟大的科学家都热爱音乐,这并非偶然。
做这个项目的初衷很简单:我一直认为,孩子的成长不止是学习文化课,素质教育同样重要。培养一个爱好,可以陪伴孩子一生。音乐、美术、体育……这些看似无用的东西,其实有大用。它们能让孩子学会热爱生活,能在他们遇到挫折时提供慰藉,能成为他们一辈子的朋友。
我希望这个小小的钢琴,能成为乡村孩子们音乐梦想的起点。哪怕他们未来不成为音乐家,哪怕只是偶尔弹一首喜欢的歌,这段音乐的体验也会在他们心里种下一颗热爱生活的种子。这就够了。
以下是项目的详细介绍:
一、摘要
面向乡村小学儿童和音乐教师,在音乐课堂教学中提供「网页虚拟钢琴 + 示范曲播放 + 轻松弹引导」的完整音乐学习体验,让没有钢琴的乡村孩子也能感受音乐的美好。
目前通过真实测试验证,内置 10 首经典儿歌和民谣(小星星、两只老虎、粉刷匠、小毛驴等),支持电脑键盘弹奏,整个应用是纯前端的 PWA,打开浏览器就能用,无需安装。
二、真实场景与需求
目标人群:乡村小学儿童和音乐教师。很多乡村学校没有像样的音乐器材,孩子们音乐课只能听老师唱歌,几乎没有亲手触碰乐器的机会。
痛点描述:想象一个场景,一位乡村音乐老师想教孩子们唱《小星星》,但教室里只有一台旧电子琴,而且孩子们轮流摸一下都要等半天。老师想让每个孩子都试试弹奏,但根本做不到。
具体来说,困难发生在课堂教学环节,音乐教育需要动手,需要让孩子们亲自去按琴键、感受音高,但钢琴太贵,学校买不起;电子琴数量太少,孩子们轮不上。这导致很多乡村孩子对音乐的认知只停留在听的阶段,从来没有玩的体验。
现有做法:
现在乡村音乐课一般这么干:
- 老师唱歌,孩子跟着哼:最常见,但孩子没有参与感
- 用教室里有限的电子琴:只能让少数孩子试试,大部分孩子还是旁观者
- 直接播放音乐视频:孩子就是个观众,没有互动
核心问题是:乐器资源稀缺,孩子没有亲手弹奏的机会。不是孩子们不喜欢音乐,是他们从来没有机会亲手体验。
三、作品介绍
「小小钢琴」是一个纯前端的网页应用(PWA),不需要后端服务器,打开浏览器就能用,甚至可以离线使用。
核心功能有三个:
1. 虚拟钢琴:用电脑键盘就能弹奏,支持八度切换,琴键上有唱名(do/re/mi)和字母(C/D/E)两种标注方式
2. 示范曲库:内置 10 首经典儿歌和民谣,点击就能听,播放时琴键会同步高亮,孩子可以看着学习
3. 轻松弹模式:这是最贴心的功能,琴键会闪烁提示下一个该按的键,孩子按对了才往下走,没有时间压力,像玩游戏一样就能弹出一首完整的歌
此外还有一些童趣设计:
- 天空渐变背景:柔和的薄荷绿到淡蓝色,让孩子放松
- 童趣装饰:CSS 绘制的云朵、浮动音符、闪烁星星、小彩虹,营造轻松氛围
- 琴键彩虹色:每个琴键底部都有彩色条纹,好看又好认
- 响应式适配:电脑、平板、手机都能用
技术栈也很简单:原生 HTML + CSS + JavaScript,使用 Tone.js 音频库,是一个标准的 PWA 应用(Service Worker + manifest.json),支持离线使用和添加到主屏幕。
四、用 SOLO 实现的过程
1、怎么拆解任务的
我的思路是从核心功能开始,一步步迭代打磨。
【第一阶段】先让钢琴响起来
- 先用 SOLO 搭了一个最简单的钢琴界面,白键黑键排列
- 对接 Tone.js 音频库,让按键能发出声音
- 绑定键盘事件,让电脑键盘对应琴键
- 这一步的目标很简单:证明网页钢琴是可行的
【第二阶段】加上示范曲
- SOLO帮我设计了一个曲目数据结构,把《小星星》《两只老虎》等经典儿歌的音符序列都写进去了
- SOLO帮我写了自动播放逻辑,播放时同步高亮琴键
- SOLO帮我做了一个曲目轮播面板,方便孩子选择歌曲
- 这一步的目标:让孩子能听、能看,建立初步的音乐认知
【第三阶段】加入轻松弹引导
- 这是最有教育价值的功能。设计思路是:降低门槛,让孩子有成就感
- 琴键闪烁提示下一个该按的键,琴键上方显示”按 Z“的提示气泡
- 按对了才往下走,按错了没反应,让孩子自由尝试
- 弹完一首歌给三颗星的奖励,增强成就感
- 这一步的目标:让孩子真正玩起来,感受创作的乐趣
【第四阶段】打磨童趣体验
- 这一步花的时间最多,也是 SOLO 最能发挥价值的地方
- 从橙红色风格改成柔和天空渐变,加上云朵、音符、星星、彩虹等装饰
- 优化琴键彩色条纹,让它更鲜艳更好看
- 调整按钮样式,改成药丸形,更适合孩子点击
- 修复了无数个小细节:装饰挡住琴键、移动端布局错位、提示气泡位置不对……
2、用了 SOLO 哪些能力
- 代码编写:几乎所有代码都是通过对话让 SOLO 写的,我只负责描述需求和指出问题
- Bug 排查:遇到问题时,SOLO 能直接读代码、定位问题、给出修复方案。比如装饰元素挡住琴键点击这个问题,SOLO 读了一遍 CSS,发现是 z-index 的问题,还提醒我给装饰元素加 `pointer-events: none`
- UI 调整:我直接把设计稿丢给SOLO,使用/plan模式,SOLO 5分钟左右就帮我把UI都调整完了。这种快速迭代在传统开发模式下很难做到
- 快速试错:一开始我想加很多功能(录音、瀑布流、排行榜),后来发现太复杂了。SOLO 帮我快速砍掉这些功能,聚焦在「弹奏 + 示范 + 轻松弹」三个核心上
3、关键操作过程
最关键的是 轻松弹模式 的设计。一开始的想法是:让孩子跟着节奏弹,按错了就停止。但 SOLO 提醒我:这样对孩子太苛刻了,应该改成 按对了才往下走,没有时间压力。
于是我们重新设计:
1. 琴键闪烁提示下一个该按的键
2. 琴键上方显示 按 Z 的提示气泡
3. 孩子按对了,播放声音,自动跳到下一个
4. 按错了,没有任何反应,让孩子继续试
5. 弹完一首歌,给提示奖励
这个调整很重要,它把学习变成了游戏,孩子没有压力,只有成就感。
4、踩过的坑
1. 装饰元素挡住琴键点击:一开始把背景装饰的 z-index 设得太低,被 app 层完全遮住了;后来调高了,又挡住了琴键点击。最后 SOLO 提醒我给装饰元素加 `pointer-events: none`,完美解决
2. 移动端布局错位:琴键在手机上要么偏左要么偏右,试了好几种方案。最后用 flex 布局 + margin auto 居中,加上响应式调整琴键高度
3. Tone.js 网络加载失败:一开始用 CDN 加载 Tone.js,有时候会失败。后来把 Tone.js 下载到本地,直接引用本地文件,稳定多了
4. 轻松弹模式琴键不高亮:一开始没处理好音符和琴键的对应关系,SOLO 帮我梳理了八度偏移的逻辑,写了一个从音符名到琴键 id 的映射
5. 琴键标注被遮挡:黑键上的标注经常被白键挡住,SOLO 帮我调整了 z-index 和位置,确保所有标注都清晰可见
五、成果展示
在线体验地址:https://kid-piano.vercel.app/
代码库地址: GitHub - sarahxu0205/kid-piano: 一个「网页虚拟钢琴 + 示范曲播放 + 轻松弹引导」的音乐学习体验小工具 · GitHub
项目文件结构:
```
kid-piano/
├── index.html # 主页面
├── css/
│ └── style.css # 全局样式(童趣风格)
├── js/
│ ├── lib/
│ │ └── Tone.js # 音频库(本地化)
│ ├── constants.js # 常量配置(音符映射、琴键颜色)
│ ├── audio-engine.js # 音频引擎
│ ├── piano-ui.js # 钢琴 UI 渲染
│ ├── keyboard-handler.js # 键盘事件处理
│ ├── demo-songs.js # 示范曲库(10 首歌)
│ ├── guide-mode.js # 轻松弹引导模式
│ └── app.js # 应用主控
├── sw.js # Service Worker(离线支持)
└── manifest.json # PWA 配置
```
核心功能展示:
1. 启动页:天空渐变背景 + 钢琴图标 + "开始弹奏"按钮
2. 虚拟钢琴:3 个八度的琴键,底部彩虹条纹,支持唱名/字母标注切换
3. 示范曲面板:10 首歌曲轮播,支持播放/轻松弹/停止
4. 轻松弹模式:琴键闪烁提示 + 按键提示气泡 + 完成评分
5. 童趣装饰:云朵、浮动音符、闪烁星星、小彩虹
技术亮点:
- 纯前端 PWA,支持离线使用
- 本地化 Tone.js,不依赖 CDN
- 模块化代码结构,易于扩展
- 响应式设计,适配各种屏幕
六、验证方式与下一步
已完成的验证
1. 键盘弹奏测试:用电脑键盘弹奏,每个琴键都能正常发声,按键反馈流畅
2. 示范曲播放测试:10 首歌曲都能正常播放,琴键同步高亮正确
3. 轻松弹模式测试:跟着提示弹奏,能完整弹完一首歌,按错不影响,弹完有评分
4. 八度切换测试:能正常切换音高,琴键正确重建
5. 标注模式切换测试:能在唱名/字母/无标注之间切换
6. 移动端适配测试:在手机和平板上都能正常显示和操作
7. 离线使用测试:断网后还能打开应用,所有功能正常
七、下一步计划
1. 真实课堂试用:找音乐老师实际使用,收集反馈,重点观察:
- 孩子是否喜欢这种方式
- 轻松弹模式是否真的能让孩子学会弹奏
- 界面是否足够简单,不需要培训就能用
2. 增加更多歌曲:目前是 10 首歌,希望能增加到 20-30 首,涵盖更多经典儿歌和民歌
3. 录音回放功能:让孩子能录下自己弹的歌,回放听听,增强成就感
4. 音准训练功能:加入一些听音辨音的小游戏,帮助孩子建立音准概念
希望这个小小的钢琴,能给乡村孩子们的音乐课带来一点点不一样的色彩。音乐是美好的,每个孩子都值得拥有感受它的机会。
最后,附SOLO使用截图:





