Skip to content

Commit 378b36b

Browse files
author
global_name
committed
Day 106: 一款支持双模式的 iOS 钢琴学习应用:3D AR 可视化和 2D Synthesia 风格游戏。
Signed-off-by: global_name <global_email@email.com>
1 parent e983832 commit 378b36b

1 file changed

Lines changed: 281 additions & 0 deletions

File tree

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
---
2+
layout: post
3+
title: "Day 106: AR Piano - iOS 钢琴学习应用,支持 2D/AR 双模式"
4+
author: iosdevlog
5+
date: 2026-05-18 00:00:00 +0800
6+
category: [AI, iOS]
7+
tags: [ARKit, SwiftUI, MIDI, 音频合成, 钢琴, 增强现实, iOS开发]
8+
---
9+
10+
# AR Piano - 双模式钢琴学习应用
11+
12+
![iOS](https://img.shields.io/badge/Platform-iOS%2015.0%2B-blue)
13+
![Swift](https://img.shields.io/badge/Language-Swift%205-orange)
14+
![ARKit](https://img.shields.io/badge/Framework-ARKit-green)
15+
![Status](https://img.shields.io/badge/Status-v2.0-success)
16+
17+
一个功能完整的 iOS 钢琴学习应用,支持 2D Synthesia 风格和 3D AR 增强现实双模式,具备专业的 ADSR 音频合成和独立音频控制。
18+
19+
---
20+
21+
## 📸 效果展示
22+
23+
### 2D 模式(Synthesia 风格)
24+
![2D Mode](https://raw.githubusercontent.com/build-your-own-x-with-ai/AR_Piano/main/Screenshots/2d_mode.png)
25+
*下落音符配合触摸交互式钢琴键盘*
26+
27+
### AR 模式(3D 增强现实)
28+
![AR Mode](https://raw.githubusercontent.com/build-your-own-x-with-ai/AR_Piano/main/Screenshots/ar_mode.png)
29+
*3D 钢琴与下落音符的增强现实体验*
30+
31+
### 控制面板
32+
![Controls](https://raw.githubusercontent.com/build-your-own-x-with-ai/AR_Piano/main/Screenshots/controls.png)
33+
*三个独立音频控制:模式切换、MIDI 音频、触摸音频*
34+
35+
---
36+
37+
## ✨ 核心特性
38+
39+
### 🎹 双模式系统
40+
41+
**2D 模式(Synthesia 风格)**
42+
- 全屏下落音符可视化
43+
- 触摸交互式钢琴键盘
44+
- 颜色编码音符(绿色=白键,蓝色=黑键)
45+
- 基于时长的动态音符高度
46+
- 类似 AI_Piano 桌面体验
47+
48+
**AR 模式(3D 增强现实)**
49+
- 基于 ARKit 的 3D 钢琴
50+
- 音符从空中降落到琴键上
51+
- 自动平面检测
52+
- 沉浸式增强现实体验
53+
54+
### 🎛️ 独立音频控制
55+
56+
**🔵 模式切换**
57+
- 即时切换 2D ↔ AR 模式
58+
- 图标随当前模式变化
59+
60+
**🟣 MIDI 音频控制**
61+
- 启用/禁用 MIDI 播放音频
62+
- 观看模式:仅视觉播放
63+
- 学习模式:跟随 MIDI 演奏
64+
65+
**🟢 触摸音频控制**
66+
- 启用/禁用手动按键音频
67+
- 练习模式:手动弹奏钢琴
68+
- 完整交互模式:MIDI 和触摸同时启用
69+
70+
### 🎵 专业音频系统
71+
72+
**ADSR 包络合成**
73+
- Attack(起音):10ms 平滑淡入
74+
- Decay(衰减):100ms 衰减到持续电平
75+
- Sustain(延音):70% 振幅保持
76+
- Release(释音):200ms 平滑淡出
77+
- 自然、类钢琴音质
78+
79+
### 🎼 MIDI 支持
80+
81+
- 标准 MIDI 文件格式(0, 1)
82+
- 多轨解析
83+
- 速度变化支持
84+
- 60 键范围(C2-C7)
85+
- 内置示例歌曲
86+
87+
---
88+
89+
## 🎮 使用场景
90+
91+
| 模式 | MIDI 音频 | 触摸音频 | 使用场景 |
92+
|------|-----------|----------|----------|
93+
| 2D ||| **练习模式** - 手动演奏 |
94+
| AR/2D ||| **观看模式** - 自动播放 |
95+
| 2D ||| **学习模式** - 跟随演奏 |
96+
| 任意 ||| **静音视觉** - 无音频 |
97+
98+
---
99+
100+
## 🏗️ 架构设计
101+
102+
遵循最佳实践的清晰组件化设计:
103+
104+
- **MIDIPlayer**: MIDI 文件解析和播放
105+
- **AudioSynthesizer**: ADSR 包络合成
106+
- **PianoKeyboard**: 3D AR 钢琴渲染
107+
- **NoteVisualizer**: 3D 下落音符
108+
- **Piano2DView**: 2D 钢琴与下落音符
109+
- **GameCoordinator**: 精简协调器(150 行)
110+
- **DebugLogger**: 可配置日志系统
111+
- **GameConfiguration**: 集中化参数配置
112+
113+
### 代码质量
114+
115+
- 最大类体积减少 50%
116+
- 单一职责改进 80%
117+
- 控制台日志减少 95%
118+
- 完全可测试的组件
119+
- 专业 ADSR 音频合成
120+
121+
---
122+
123+
## 🔧 技术细节
124+
125+
### 性能优化
126+
- 60 FPS 渲染
127+
- 高效音符剔除
128+
- 最小内存占用
129+
- 流畅动画
130+
131+
### 音频系统
132+
- 基于 AVFoundation 的合成
133+
- 实时 ADSR 包络
134+
- 线程安全的声音管理
135+
- 无音频爆音或杂音
136+
137+
### 2D 模式特性
138+
- 动态音符高度(15-60px)
139+
- 基于时长的可视化
140+
- 时间戳去重
141+
- 正确的钢琴键盘布局
142+
143+
### AR 模式特性
144+
- 平面检测
145+
- 3D 音符物理
146+
- 命中检测与视觉反馈
147+
- 命中时黄色高亮
148+
149+
---
150+
151+
## 📋 系统要求
152+
153+
- iOS 15.0+
154+
- 支持 ARKit 的设备(iPhone 6s 或更新)
155+
- Xcode 15.0+
156+
- Swift 5
157+
158+
---
159+
160+
## 🚀 安装使用
161+
162+
1. 克隆仓库
163+
```bash
164+
git clone https://github.com/build-your-own-x-with-ai/AR_Piano.git
165+
cd AR_Piano
166+
```
167+
168+
2. 在 Xcode 中打开
169+
```bash
170+
open AR_Piano.xcodeproj
171+
```
172+
173+
3. 在设备上构建并运行
174+
175+
---
176+
177+
## 🎯 与 AI_Piano 对比
178+
179+
| 功能 | AI_Piano (C++) | AR_Piano (Swift) |
180+
|------|----------------|------------------|
181+
| 平台 | 桌面 (SDL2) | iOS (ARKit) |
182+
| 显示 | 仅 2D | 2D + AR 3D |
183+
| 下落音符 || ✅(双模式) |
184+
| 触摸钢琴 | ✅ 键盘 | ✅ 触摸屏 |
185+
| PDF 查看器 || ❌(未来) |
186+
| AR 模式 |||
187+
| ADSR 音频 |||
188+
| 架构 | 清晰 | 清晰(重构) |
189+
190+
---
191+
192+
## 🔮 未来增强
193+
194+
- [ ] 准确度评分(Perfect/Good/Miss)
195+
- [ ] 难度等级
196+
- [ ] 录制和回放
197+
- [ ] 多点触控和弦支持
198+
- [ ] 力度敏感
199+
- [ ] 自定义音色库
200+
- [ ] PDF 乐谱显示
201+
- [ ] 键盘标签(音符名称)
202+
- [ ] 排行榜
203+
204+
---
205+
206+
## 📚 相关文档
207+
208+
- [架构对比](https://github.com/build-your-own-x-with-ai/AR_Piano/blob/main/ARCHITECTURE_COMPARISON.md) - 与 AI_Piano 的设计分析
209+
- [重构总结](https://github.com/build-your-own-x-with-ai/AR_Piano/blob/main/REFACTORING_SUMMARY.md) - 实现细节
210+
- [2D/AR 模式指南](https://github.com/build-your-own-x-with-ai/AR_Piano/blob/main/2D_AR_MODE_GUIDE.md) - 模式切换指南
211+
- [完整功能总结](https://github.com/build-your-own-x-with-ai/AR_Piano/blob/main/COMPLETE_FEATURE_SUMMARY.md) - 完整参考
212+
213+
---
214+
215+
## 🎓 技术亮点
216+
217+
### 1. 组件化架构
218+
从单一 1000+ 行类重构为多个专注的组件,每个组件职责单一、易于测试。
219+
220+
### 2. ADSR 音频合成
221+
实现专业的 ADSR 包络合成器,提供自然的钢琴音质,无音频爆音。
222+
223+
### 3. 双模式设计
224+
无缝切换 2D 和 AR 模式,保持状态一致性和流畅的用户体验。
225+
226+
### 4. 独立音频控制
227+
三个独立的音频开关,支持多种学习和练习场景。
228+
229+
### 5. 性能优化
230+
高效的音符剔除、时间戳去重和 60 FPS 渲染保证流畅体验。
231+
232+
---
233+
234+
## 💡 开发心得
235+
236+
### 架构重构
237+
从 AI_Piano 的 C++ 桌面应用移植到 iOS 平台,不仅是语言和框架的转换,更是架构的重新思考。通过组件化设计,将原本的单一大类拆分为多个职责清晰的组件,大幅提升了代码的可维护性和可测试性。
238+
239+
### 音频系统
240+
实现 ADSR 包络合成是一个有趣的挑战。通过精心调整 Attack、Decay、Sustain、Release 参数,最终实现了接近真实钢琴的音质。线程安全的声音管理确保了多音符同时播放时的稳定性。
241+
242+
### 双模式设计
243+
2D 和 AR 模式的切换需要仔细处理状态管理。通过独立的音频控制和模式切换逻辑,实现了无缝的用户体验。2D 模式提供了类似 Synthesia 的学习体验,而 AR 模式则带来了沉浸式的 3D 体验。
244+
245+
### 性能优化
246+
在移动设备上保持 60 FPS 需要精心的性能优化。通过高效的音符剔除、时间戳去重和动态高度计算,确保了流畅的视觉体验。
247+
248+
---
249+
250+
## 🔗 项目链接
251+
252+
- **GitHub**: [https://github.com/build-your-own-x-with-ai/AR_Piano](https://github.com/build-your-own-x-with-ai/AR_Piano)
253+
- **参考项目**: [AI_Piano](https://github.com/build-your-own-x-with-ai/AI_Piano)
254+
255+
---
256+
257+
## 📄 许可证
258+
259+
MIT License
260+
261+
---
262+
263+
## 📝 版本历史
264+
265+
**v2.0** (2026-05-18)
266+
- 添加 2D/AR 模式切换
267+
- 独立的 MIDI 和触摸音频控制
268+
- 基于时长的动态音符高度
269+
- 修复重复音符问题
270+
- 修正钢琴键盘布局
271+
- ADSR 包络合成
272+
273+
**v1.0** (2026-05-17)
274+
- 初始发布,支持 AR 模式
275+
- 组件化架构重构
276+
- MIDI 播放支持
277+
- 基础音频合成
278+
279+
---
280+
281+
**使用 Swift、SwiftUI 和 ARKit 构建 ❤️**

0 commit comments

Comments
 (0)