## 🎼 你不需要学十年作曲,你只需要一个 JSON 文件

是的,你没看错。这个 Skill 让你用 JSON 写乐谱,一键生成 WAV 音频

纯 Python 标准库,零依赖,零配置。弦乐、木管、铜管、低音四种乐器,加法合成真实管弦音色。

---

## 🚀 快速开始

bash
python synth.py my_masterpiece.score.json -o my_masterpiece.wav

双击 my_masterpiece.wav,你写的音乐就响了。

---

## 🎹 乐谱格式(人类可读的 JSON)

json
{
"title": "我的第一首交响曲",
"tempo": 120,
"duration": 30,
"sample_rate": 22050,
"instruments": {
"strings": {"harmonics": [1.0,0.55,0.35,0.18,0.08], "sub": 0.15},
"bass": {"harmonics": [1.0,0.45,0.25,0.12], "sub": 0.35},
"woodwind":{"harmonics": [1.0,0.30,0.15], "sub": 0.08},
"brass": {"harmonics": [1.0,0.50,0.30,0.15,0.06], "sub": 0.10}
},
"score": [
{"t": 0, "dur": 2, "notes": ["D4","FS4","A4"], "inst": "strings", "vel": 0.5},
{"t": 2, "dur": 0.5, "notes": ["D5"], "inst": "strings", "vel": 0.8},
{"t": 2.5, "dur": 0.5, "notes": ["E5"], "inst": "woodwind","vel": 0.6},
{"t": 3, "dur": 1, "notes": ["D3","D4","FS4"], "inst": "bass", "vel": 0.7}
]
}

- t:开始时间(拍数)
- dur:持续时间(拍数)
- notes:音名数组(C4 = 中央 C, FS5 = 升高 F, R = 休止)
- inst:乐器(strings / bass / woodwind / brass)
- vel:力度 0~1

---

## 🎻 四种乐器音色

| 乐器 | 特点 | 适合 |
|------|------|------|
| strings | 明亮泛音 + 颤音,模拟小提琴组 | 旋律、主声部 |
| bass | 温暖低沉,强次谐波,模拟大提琴/低音提琴 | 和弦根音、低声部 |
| woodwind | 纯净少泛音,模拟木管组 | 对位旋律、点缀 |
| brass | 奇次泛音突出,模拟铜管组 | 高潮强调、和声支撑 |

---

## 🎬 已内置示例:费加罗的婚礼序曲

附带完整的莫扎特《费加罗的婚礼》K.492 序曲 32 秒精华版乐谱(figaro.score.json),包含:

> D - G - D - A7 → 急速上行主题 → Bm - Em - G - A7 发展部 → 全乐器齐奏高潮 → I-IV-ii-V7-I 辉煌终止式

立即试听:
bash
python synth.py figaro.score.json -o figaro.wav

---

## 🧠 原理

加法合成(Additive Synthesis)。每个音符 = 基频 + 6 个泛音 + 次谐波 + 颤音 + ADSR 包络。纯数学,纯 Python,纯 wave + math + struct 标准库。

没有 AI 参与运行时。 乐谱 → 音频,确定性转换。AI 只负责帮你写乐谱。

---

## 🤝 谁需要这个?

- 🎥 给自己的视频做背景音乐
- 🎮 给独立游戏写 8-bit / 管弦配乐
- 🎓 学音乐理论,可视化地理解音符和和声
- 🤖 用 AI 生成 JSON 乐谱,然后一键播放
- 🎉 就是觉得好玩

---

## 📦 安装

下载 synth.py 到任意目录,Python 3.x 即可运行。不需要 pip install 任何东西。

---

> *"To play a wrong note is insignificant; to play without passion is inexcusable." — Beethoven*
>
> 写错一个音符没关系,不敢写才是问题。打开编辑器,写你的第一首 JSON 交响曲吧。🎶