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

简介: 本文介绍基于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实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
13天前
|
数据采集 算法 量子技术
大模型应用:隐私优先的大模型应用:同态加密与大模型结合的完整实践.101
本文深入浅出解析“同态加密+大模型”技术:以全同态加密(FHE)为核心,实现敏感数据(如金融、医疗信息)在密文状态下完成大模型推理,全程不暴露明文,兼顾隐私与智能。涵盖原理、流程、数学基础及Python简易实现。
189 6
|
12天前
|
人工智能 运维 架构师
我在 AIP 智能体平台踩过的坑,都在这篇企业 AI 落地经验里了
软件架构师罗小东分享企业AI落地实战经验:聚焦AIP智能体平台建设中的真实坑点与解法——涵盖智能体全生命周期管理、多源知识库语义检索、MCP工具集成及多模型中立架构设计,强调“解决问题”而非堆砌功能。(239字)
|
14天前
|
人工智能 缓存 安全
阿里云百炼Token Plan 标准坐席25,000 Credits 能用多少token或者调用次数?
阿里百炼Token Plan标准坐席198元/月,提供25,000 Credits额度(非固定Token数或调用次数)。支持多模型、全模态(文本/视觉/图像生成),动态计费,兼顾灵活与安全,适合轻度AI辅助团队。
|
27天前
|
网络协议 算法 数据可视化
工业机器人基础:五大核心坐标系
在真实的机械臂调试现场,“换个夹爪就撞机”或“工装偏移2厘米导致几百个点位全废”是极易踩坑的工程痛点。其核心原因往往在于开发者未能彻底理清底层控制中的空间转换逻辑。本文剥离了冗长的纯数学推导,从实际工程应用的视角出发,系统梳理了工业机器人的**五大核心坐标系(大地、基、关节、工具、工件)**及其空间变换链路(TF Tree)。通过真实的调试场景,深入拆解 TCP 标定、姿态重定位与离线编程背后的物理映射原理。无论你是操作示教器的现场工程师,还是编写底层运动规划算法的开发者,本文都将为你构建清晰、实用的机器人空间几何基石。
346 1
|
15天前
|
JSON API PHP
韩国股票实时数据 KOSPI(主板)和 KOSDAQ(创业板)的实时行情、K 线及指数数据
StockTV API全面支持韩国股市,覆盖KOSPI主板(exchangeId=60)与KOSDAQ创业板(110),提供实时行情、K线、指数等数据。需配置countryId=11及API密钥,支持HTTP/WS双协议,含PHP对接示例与关键注意事项。
|
4天前
|
人工智能 架构师 测试技术
AI编程王炸组合:顶级三剑客 OpenSpec 定方向,Superpowers定纪律,Harness定协同
AI编程王炸组合:顶级三剑客 OpenSpec 定方向,Superpowers定纪律,Harness定协同
|
5天前
|
人工智能 数据可视化 网络安全
阿里云/本地一键部署OpenClaw(Clawdbot)教程
OpenClaw(原Clawdbot)作为轻量级AI自动化代理工具,2026年版本在部署灵活性上实现重大升级,既支持本地私有化部署(满足数据隐私、内网使用需求),也适配阿里云一键部署方案(兼顾便捷性与云端稳定性)。本文将完整拆解两种部署方式的核心流程,从环境准备、安装配置到功能验证,包含实操代码命令与避坑技巧,无论你是需要本地私有化部署的企业用户,还是追求零门槛的个人用户,都能快速完成OpenClaw的落地使用。
229 1
|
16天前
|
人工智能 自然语言处理 安全
Open Claw 2.6.4 Windows 一键部署完整教程(技术分享)
OpenClaw(昵称“小龙虾”)是2026年热门开源AI智能体,GitHub星标超28万。支持本地运行、零代码操作、跨平台部署,可理解自然语言指令,自动完成文件管理、数据处理、浏览器自动化等任务,一键安装,隐私安全。
|
21天前
|
监控 前端开发 中间件
【开源剪映小助手】调试与故障排除
本指南面向capcut-mate开发者,系统梳理Python后端(FastAPI)、Electron桌面端与React前端的调试方法,涵盖日志分析、IPC通信、异常处理、性能优化及常见故障排查,助力高效定位与解决运行时问题。(239字)
110 10