【发布时间】:2020-05-26 03:54:00
【问题描述】:
我阅读了很多关于 MIDI 分辨率的内容,并研究了一些代码,例如 Tone.js 和 heartbeat。但我不明白为什么会有不同的Pulses Per Quarter Note (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?我希望有人可以更详细地向我解释这一点。
【问题讨论】:
标签: javascript midi web-midi