【Hello AI 科技致善】🎹 从键盘到心间:我用 SOLO 做了个面向乡村儿童的音乐启蒙工具

:musical_note: 正如爱因斯坦所体会的,音乐与科学之间有着紧密联系。在他看来,音乐不仅仅是一种艺术形式,更是一种能够激发灵感和创造力的源泉。许多伟大的科学家都热爱音乐,这并非偶然。

做这个项目的初衷很简单:我一直认为,孩子的成长不止是学习文化课,素质教育同样重要。培养一个爱好,可以陪伴孩子一生。音乐、美术、体育……这些看似无用的东西,其实有大用。它们能让孩子学会热爱生活,能在他们遇到挫折时提供慰藉,能成为他们一辈子的朋友。

我希望这个小小的钢琴,能成为乡村孩子们音乐梦想的起点。哪怕他们未来不成为音乐家,哪怕只是偶尔弹一首喜欢的歌,这段音乐的体验也会在他们心里种下一颗热爱生活的种子。这就够了。

以下是项目的详细介绍:

一、摘要

面向乡村小学儿童和音乐教师,在音乐课堂教学中提供「网页虚拟钢琴 + 示范曲播放 + 轻松弹引导」的完整音乐学习体验,让没有钢琴的乡村孩子也能感受音乐的美好。

目前通过真实测试验证,内置 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使用截图:

太牛了吧 :+1:

1 个赞

谢谢 18 :face_blowing_a_kiss:

这个挺好玩的,UI也很好

2 个赞

钢琴应该有一些开源的素材音效,比Web Audio API合成的效果好,可以试试。

2 个赞

好的 我去看看

1 个赞

谢谢哇 :grinning_face:

1 个赞