我阅读了很多关于 MIDI 解析的内容,并研究了一些代码,例如 Tone.js 和 heartbeat。但我不明白为什么每四分音符的脉冲数(PPQN)值不同,以及它对演奏音符有什么影响。当我有 960 个 PPQN 时,这意味着 1 个四分音符有 960 个刻度,1 个八分音符有 480 个刻度,等等。如果我理解正确,增量时间只是一个相对值。
我不明白的是,当我在 JavScript 中演奏音符时,PPQN 应该是什么,当我设置 PPQN 时为什么它应该有这个值?例如,我使用 WebAudio API 播放音符:
function nextNote() {
var quarterBeat = 60.0/tempo;
nextNoteDuration = nextNoteDuration + (quarterBeat/32);
currentNote++;
}
这样我可以演奏不同的音符时长。现在当我读取 MIDI 文件时,我应该只比较增量时间并将其转换为我的音序器当前播放吗?例如,当我读取具有以下值的 MIDI 文件时:
Tempo = 120
PQN = 960
4 Quarter Notes
我读取了 MIDI 文件,将音符保存在一个数组中(假设增量时间是每个音符的 1/4)
duration = [quarterNote, quarterNote, quarterNote, quarterNote]
并弹奏音符:
while (nextNoteDuration < audioContext.currentTime) {
if (duration[i] %32 == 0) playNote(currentNote, nextNoteDuration);
nextNote();
i++;
}
我应该只在导出 MIDI 文件时使用 PPQN 吗?如果是这样,我应该设置什么 PPQN?我希望有人可以更详细地向我解释这一点。