Skip to content

MIDI 与结构化表达

这是连接"音乐"和"结构化表达"的桥。

MIDI 不是音频

MIDI 不是 mp3,也不是已经录好的声音。它更像:演奏指令

现在开始发一个音
发 C4
持续 1 拍
力度 90
然后结束

MP3 是录好的声波。MIDI 是"怎么弹"的指令表。

看到它、听到它

下面是一个钢琴卷帘(Piano Roll)— 音乐制作软件中最常见的视图。

  • 横轴 = 时间(拍)
  • 纵轴 = 音高
  • 色块 = 音符事件
  • 下方 = 对应的 JSON 事件流

点击播放,看红色播放头扫过时,JSON 和色块如何同步高亮:

试试切换"小星星"和"和弦进行" — 注意旋律和和弦在钢琴卷帘中的区别:

  • 旋律:色块错开排列(start 递增)
  • 和弦:色块垂直对齐(start 相同)

MIDI 里最关键的几个概念

概念含义
Note On开始发音
Note Off结束发音
Velocity发音力度(0-127)
Tempo速度(BPM)
Tick / PPQ更细粒度的时间单位
Channel不同轨道 / 乐器的分路

用数据结构理解音乐

一个音乐事件可以写成:

json
{
  "pitch": "C4",
  "start": 0,
  "duration": 1,
  "velocity": 90,
  "instrument": "piano"
}

音乐天然可以被理解为结构化事件流。 你刚才在钢琴卷帘中看到的,就是这些 JSON 事件的可视化。

和弦 vs 旋律:start 字段的秘密

和弦 = 同一时刻的多个事件(start 相同):

json
[
  { "pitch": "C4", "start": 0, "duration": 2, "velocity": 80 },
  { "pitch": "E4", "start": 0, "duration": 2, "velocity": 80 },
  { "pitch": "G4", "start": 0, "duration": 2, "velocity": 80 }
]

旋律 = start 递增的事件序列:

json
[
  { "pitch": "C4", "start": 0, "duration": 1 },
  { "pitch": "D4", "start": 1, "duration": 1 },
  { "pitch": "E4", "start": 2, "duration": 1 },
  { "pitch": "G4", "start": 3, "duration": 1 }
]

MIDI Note Number

MIDI 用 0-127 的数字表示音高。中央 C (C4) = 60。

MIDI 编号音名说明
60C4中央 C
61C#4
62D4
69A4标准调音 = 440 Hz
72C5高八度 C

每 +12 = 高一个八度。每 +1 = 高一个半音。

回到起点

还记得第一章的公式吗?

音乐 = 时间轴上的声音事件集合

现在你知道了:

  • 时间 → beat, tempo, meter, bar, duration
  • 声音事件 → pitch, velocity, instrument, articulation
  • 横向关系 → melody(序列)
  • 纵向关系 → chord(同时),harmony(推进)
  • 结构化表达 → MIDI, JSON, 事件流

这就是这份教程的全部骨架。每个概念都可以从这里往深处继续挖。

下一步

混淆点速查 + 词汇表 — 快速查阅

第一性原理学乐理 — 不从术语开始,从本质开始