AR Piano - 双模式钢琴学习应用

iOS Swift ARKit Status

一个功能完整的 iOS 钢琴学习应用,支持 2D Synthesia 风格和 3D AR 增强现实双模式,具备专业的 ADSR 音频合成和独立音频控制。


📸 效果展示

2D 模式(Synthesia 风格)

2D Mode 下落音符配合触摸交互式钢琴键盘

AR 模式(3D 增强现实)

AR Mode 3D 钢琴与下落音符的增强现实体验

控制面板

Controls 三个独立音频控制:模式切换、MIDI 音频、触摸音频


✨ 核心特性

🎹 双模式系统

2D 模式(Synthesia 风格)

  • 全屏下落音符可视化
  • 触摸交互式钢琴键盘
  • 颜色编码音符(绿色=白键,蓝色=黑键)
  • 基于时长的动态音符高度
  • 类似 AI_Piano 桌面体验

AR 模式(3D 增强现实)

  • 基于 ARKit 的 3D 钢琴
  • 音符从空中降落到琴键上
  • 自动平面检测
  • 沉浸式增强现实体验

🎛️ 独立音频控制

🔵 模式切换

  • 即时切换 2D ↔ AR 模式
  • 图标随当前模式变化

🟣 MIDI 音频控制

  • 启用/禁用 MIDI 播放音频
  • 观看模式:仅视觉播放
  • 学习模式:跟随 MIDI 演奏

🟢 触摸音频控制

  • 启用/禁用手动按键音频
  • 练习模式:手动弹奏钢琴
  • 完整交互模式:MIDI 和触摸同时启用

🎵 专业音频系统

ADSR 包络合成

  • Attack(起音):10ms 平滑淡入
  • Decay(衰减):100ms 衰减到持续电平
  • Sustain(延音):70% 振幅保持
  • Release(释音):200ms 平滑淡出
  • 自然、类钢琴音质

🎼 MIDI 支持

  • 标准 MIDI 文件格式(0, 1)
  • 多轨解析
  • 速度变化支持
  • 60 键范围(C2-C7)
  • 内置示例歌曲

🎮 使用场景

模式 MIDI 音频 触摸音频 使用场景
2D 练习模式 - 手动演奏
AR/2D 观看模式 - 自动播放
2D 学习模式 - 跟随演奏
任意 静音视觉 - 无音频

🏗️ 架构设计

遵循最佳实践的清晰组件化设计:

  • MIDIPlayer: MIDI 文件解析和播放
  • AudioSynthesizer: ADSR 包络合成
  • PianoKeyboard: 3D AR 钢琴渲染
  • NoteVisualizer: 3D 下落音符
  • Piano2DView: 2D 钢琴与下落音符
  • GameCoordinator: 精简协调器(150 行)
  • DebugLogger: 可配置日志系统
  • GameConfiguration: 集中化参数配置

代码质量

  • 最大类体积减少 50%
  • 单一职责改进 80%
  • 控制台日志减少 95%
  • 完全可测试的组件
  • 专业 ADSR 音频合成

🔧 技术细节

性能优化

  • 60 FPS 渲染
  • 高效音符剔除
  • 最小内存占用
  • 流畅动画

音频系统

  • 基于 AVFoundation 的合成
  • 实时 ADSR 包络
  • 线程安全的声音管理
  • 无音频爆音或杂音

2D 模式特性

  • 动态音符高度(15-60px)
  • 基于时长的可视化
  • 时间戳去重
  • 正确的钢琴键盘布局

AR 模式特性

  • 平面检测
  • 3D 音符物理
  • 命中检测与视觉反馈
  • 命中时黄色高亮

📋 系统要求

  • iOS 15.0+
  • 支持 ARKit 的设备(iPhone 6s 或更新)
  • Xcode 15.0+
  • Swift 5

🚀 安装使用

  1. 克隆仓库
    git clone https://github.com/build-your-own-x-with-ai/AR_Piano.git
    cd AR_Piano
    
  2. 在 Xcode 中打开
    open AR_Piano.xcodeproj
    
  3. 在设备上构建并运行

🎯 与 AI_Piano 对比

功能 AI_Piano (C++) AR_Piano (Swift)
平台 桌面 (SDL2) iOS (ARKit)
显示 仅 2D 2D + AR 3D
下落音符 ✅(双模式)
触摸钢琴 ✅ 键盘 ✅ 触摸屏
PDF 查看器 ❌(未来)
AR 模式
ADSR 音频
架构 清晰 清晰(重构)

🔮 未来增强

  • 准确度评分(Perfect/Good/Miss)
  • 难度等级
  • 录制和回放
  • 多点触控和弦支持
  • 力度敏感
  • 自定义音色库
  • PDF 乐谱显示
  • 键盘标签(音符名称)
  • 排行榜

📚 相关文档


🎓 技术亮点

1. 组件化架构

从单一 1000+ 行类重构为多个专注的组件,每个组件职责单一、易于测试。

2. ADSR 音频合成

实现专业的 ADSR 包络合成器,提供自然的钢琴音质,无音频爆音。

3. 双模式设计

无缝切换 2D 和 AR 模式,保持状态一致性和流畅的用户体验。

4. 独立音频控制

三个独立的音频开关,支持多种学习和练习场景。

5. 性能优化

高效的音符剔除、时间戳去重和 60 FPS 渲染保证流畅体验。


💡 开发心得

架构重构

从 AI_Piano 的 C++ 桌面应用移植到 iOS 平台,不仅是语言和框架的转换,更是架构的重新思考。通过组件化设计,将原本的单一大类拆分为多个职责清晰的组件,大幅提升了代码的可维护性和可测试性。

音频系统

实现 ADSR 包络合成是一个有趣的挑战。通过精心调整 Attack、Decay、Sustain、Release 参数,最终实现了接近真实钢琴的音质。线程安全的声音管理确保了多音符同时播放时的稳定性。

双模式设计

2D 和 AR 模式的切换需要仔细处理状态管理。通过独立的音频控制和模式切换逻辑,实现了无缝的用户体验。2D 模式提供了类似 Synthesia 的学习体验,而 AR 模式则带来了沉浸式的 3D 体验。

性能优化

在移动设备上保持 60 FPS 需要精心的性能优化。通过高效的音符剔除、时间戳去重和动态高度计算,确保了流畅的视觉体验。


🔗 项目链接


📄 许可证

MIT License


📝 版本历史

v2.0 (2026-05-18)

  • 添加 2D/AR 模式切换
  • 独立的 MIDI 和触摸音频控制
  • 基于时长的动态音符高度
  • 修复重复音符问题
  • 修正钢琴键盘布局
  • ADSR 包络合成

v1.0 (2026-05-17)

  • 初始发布,支持 AR 模式
  • 组件化架构重构
  • MIDI 播放支持
  • 基础音频合成

使用 Swift、SwiftUI 和 ARKit 构建 ❤️