【前端实战】基于 Vue 3 + Tone.js 构建在线钢琴学习平台

本文涉及的产品
全域智能运维平台 STAROps 免费试用,10000 积分
简介: 本文介绍基于Vue 3与Tone.js打造的零门槛在线钢琴学习平台,支持键盘演奏、曲目播放/高亮、本地存储与JSON导入导出,纯前端实现、跨平台响应式,星空主题界面美观易用。开源免费,即开即练。

背景

钢琴是"乐器之王",但传统学习存在门槛高、成本高、反馈慢等问题。本文介绍如何借助 Web 技术,构建一个零门槛的在线钢琴学习平台。

在线体验:https://www.ytecn.com/lab/piano
源码下载:https://gitee.com/ytecnsong/piano
豫唐·星空钢琴.png

技术选型

类别 方案
框架 Vue 3 (Composition API)
构建 Vite
音频 Tone.js
存储 localStorage
主题 纯 CSS 星空主题

为什么选 Tone.js?

Web Audio API 功能强大但 API 复杂,Tone.js 对其进行了高级封装,支持多音 polyphony、音符 scheduling、效果器链等专业功能,代码更简洁。

核心实现

1. 音频引擎

import * as Tone from 'tone'

export const audioEngine = {
   
  synth: null,

  async init() {
   
    await Tone.start()
    this.synth = new Tone.PolySynth(Tone.Synth).toDestination()
    this.synth.volume.value = -6
  },

  playNote(note, duration = '8n') {
   
    if (this.synth) {
   
      this.synth.triggerAttackRelease(note, duration)
    }
  }
}

注意Tone.start() 必须用户触发后调用,这是浏览器自动播放策略要求。

2. 键盘映射

钢琴三个八度,共36个音,黑白键共88个但这里简化为36个:

const LOW_MAPPING = {
    'z': 'C3', 'x': 'D3', 'c': 'E3', 'v': 'F3', 'b': 'G3', 'n': 'A3', 'm': 'B3' }
const MID_MAPPING = {
    'a': 'C4', 's': 'D4', 'd': 'E4', 'f': 'F4', 'g': 'G4', 'h': 'A4', 'j': 'B4' }
const HIGH_MAPPING = {
    'q': 'C5', 'w': 'D5', 'e': 'E5', 'r': 'F5', 't': 'G5', 'y': 'A5', 'u': 'B5' }

黑键映射到字母上方数字键:1#=C#4 2#=D#4 5#=F#5 6#=G#5 7#=A#5

3. 曲目播放与高亮

曲目数据结构:

{
   
  id: 'twinkle',
  name: '小星星',
  notes: [
    {
    note: 'C4', duration: 1 },
    {
    note: 'C4', duration: 1 },
    // ...
  ]
}

播放时逐音符触发,配合 CSS 高亮当前键:

function playSong(song, onNote) {
   
  let i = 0
  const timer = setInterval(() => {
   
    if (i >= song.notes.length) {
   
      clearInterval(timer)
      return
    }
    const {
    note } = song.notes[i]
    audioEngine.playNote(note)
    onNote(i) // 高亮回调
    i++
  }, 500)
}

4. 数据持久化

用户曲目存 localStorage,支持导入导出 JSON:

const STORAGE_KEY = 'yutang-piano-songs'

export function saveSongs(songs) {
   
  localStorage.setItem(STORAGE_KEY, JSON.stringify(songs))
}

export function exportSong(song) {
   
  const blob = new Blob([JSON.stringify(song, null, 2)], {
    type: 'application/json' })
  const url = URL.createObjectURL(blob)
  const a = document.createElement('a')
  a.download = `${
     song.name}.json`
  a.href = url
  a.click()
}

项目结构

yutang-piano/
├── index.html
├── vite.config.js
└── src/
    ├── main.js
    ├── App.vue
    ├── song-manager.js
    ├── audio-engine.js
    └── components/
        ├── SplashScreen.vue
        ├── PianoKeyboard.vue
        ├── SongPanel.vue
        ├── SongEditor.vue
        └── VolumeControl.vue

技术亮点

  1. 零后端:所有数据存 localStorage,可扩展为 IndexedDB 或云存储
  2. 跨平台:浏览器即用,PC/平板/手机均可
  3. 响应式:Composition API 管理状态,逻辑清晰
  4. 可嵌入:iframe 可嵌入现有教育平台

未来方向

  • MIDI 输入支持
  • 多音色切换
  • 录音回放
  • 云端曲库同步

关于作者

汤阴县豫唐网络科技有限公司,专注教育类 Web 产品开发。

相关资源

相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
2天前
|
人工智能 运维 安全
阿里云百炼平台详解:官网入口链接、免费AI大模型领取及常见问题解答FAQ
在生成式人工智能技术全面落地的当下,各类大模型已经深度融入内容创作、视觉设计、视频制作、软件开发、企业智能服务等诸多领域。对于个人创作者、独立开发者以及中小微企业而言,如何低成本、安全、便捷地使用成熟大模型服务,成为开展AI相关工作的核心诉求。阿里云百炼作为阿里云推出的一站式大模型服务平台,整合了文本、图像、视频、多模态等全品类大模型,同时配套低代码智能体开发、应用部署、全链路安全管控等能力,能够满足从个人临时使用、原型开发到企业级规模化落地的各类需求。
176 3
|
2天前
|
人工智能 安全 决策智能
欢迎报名丨2026 Agentic AICon—智能体基础设施与 AgentOps 专场,邀您参会
6 月 5 日上海,2026 Agentic AICon「智能体基础设施与 AgentOps」专场,聚焦 Agent 规模化落地的基础设施层,覆盖从构建、部署到规模化运行的全生命周期,为企业智能体工程化落地提供完整路径。
|
2天前
|
数据采集 人工智能 监控
医疗AI智能体:整体效能评估可视化:从原理到实践的10大核心量化指标体系.130
本文系统阐述医疗AI智能体的量化评估体系,强调其行业特殊性——关乎生命健康、强合规要求、用户多元、闭环严苛。提出覆盖技术(幻觉率、准确率、响应时间、召回率)与业务(满意度、审核通过率、问诊完成率、交互时长)的8大核心指标,配套数据采集、计算、监控、迭代闭环流程及可落地代码实现,为临床合规落地提供客观依据。
175 9
|
Kubernetes Cloud Native 数据可视化
【云原生】Rancher部署k8s集群流程—2023.03
【云原生】Rancher部署k8s集群流程—2023.03
1958 0
|
28天前
|
安全 小程序 Linux
开源!在 Linux 内核里跑 Lua-LSM 小程序,是什么样的体验?
不需要任何编译工具链,不需要安装额外软件。
|
30天前
|
JSON 安全 API
openapi swagger skills
本技能专为生成、审查与优化OpenAPI/Swagger文档而设计,遵循API优先原则,支持OpenAPI 3.1(默认)、3.0.x及Swagger 2.0。涵盖路径设计、HTTP语义、参数/响应/安全定义、错误模型、分页、异步任务等18项规范,确保文档准确、一致、可读、工具友好,适用于设计评审、文档生成、契约对齐与测试等场景。(239字)
195 3
|
1月前
|
缓存 druid Java
[010][数据模块]多数据源管理器在 Hibernate 多租户中的应用
本文介绍基于`DataSourceRoutingManager`的Hibernate数据库级多租户方案:通过动态路由与连接池模板复制(支持HikariCP/DBCP2/Druid),实现租户专属数据源的懒加载、缓存与无缝集成,配置简洁、扩展性强,已落地多个SaaS生产项目。(239字)
89 2
|
1月前
|
机器学习/深度学习 人工智能 自动驾驶
「独家」AI视觉防御被彻底颠覆?无需训练、实时检测对抗样本,还能量化防御副作用的开源引擎问世
AI视觉存在致命盲区——对抗攻击:微小扰动即可导致误判。现有防御方案或依赖GPU、或破坏图像细节、或不可解释。本系统零训练、纯CPU运行,首创ORB特征保真度量化,支持实时检测、可解释诊断与相位自校正净化。
177 1
|
1月前
|
存储 安全 数据安全/隐私保护
服务器数据恢复—某品牌EQ PS6100存储不可用,如何恢复虚拟机文件记录?
某品牌EQ PS6100是一款面向中端市场的企业级存储设备,广泛适用于中小型企业及大型企业分支机构。该机型具备较强的容错能力与安全性能,但任何存储设备都无法做到绝对万无一失,硬件故障、异常掉线或误操作仍可能导致数据丢失。
|
1月前
|
人工智能 运维 监控
「郑州市科技系统人工智能素养培训」暨「龙虾引擎——AI 原生应用开发实战营·郑州站」精彩回顾 & PPT 下载
关注「阿里云云原生」公众号,后台回复:0421,免费获得郑州站讲师 PPT 合辑。