gpt4 book ai didi

JavaScript 音序器 MIDI 文件时序分辨率 (PPQN)

转载 作者:行者123 更新时间:2023-12-01 15:10:08 27 4
gpt4 key购买 nike

我阅读了很多关于 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?我希望有人可以更详细地向我解释这一点。

最佳答案

PPQ 是关于分辨率的。更具体地说是关于时间分辨率。

what should (be?) the PPQN when I play notes in JavScript, and when I set the PPQN why it should have this value?



当您的程序播放音符时,它可以使用您想要或需要的任何时间单位,例如毫秒、纳秒、电影帧、滴答声。绝对挂钟或相对时间。这取决于您的音序器功能和软件功能。只是 必填 在将 MIDI 序列存储为 MIDI 文件时选择一个 PPQ 值。当然,您需要能够在读取/存储 MIDI 文件时转换时间单位。

Now when I read the MIDI file, should I just compare the delta time and convert it to my sequencers current playback?



当然,如果您的音乐事件在内部使用不同的时间表示,那么您需要能够将 MIDI 文件中的增量时间转换为您的内部表示。

您只询问 PPQ,但此值仅在 MIDI 文件头中找到一次。相反,速度事件可能会沿文件多次发生,并且它会影响下一个增量时间到挂钟时间的转换,直到下一个速度事件。如果您的音序器/播放器允许用户更改/添加速度事件,最好使用相对单位而不是挂钟单位来表示内部时间(或两者兼而有之)。

Should I use PPQN only when exporting a MIDI file? If so, in relation to what should I set the PPQN?



是的,你 需要导出 MIDI 文件时为 PPQ 选择合适的值。如果您的内部时间单位是相对的(就像大多数定序器一样),则将您的内部单位分辨率用于 PPQ。如果您从挂钟单位转换为增量时间,那么您需要选择一个分辨率,您的翻译会丢失更少的细节(通过量化)。从这个意义上说,更高的值更好。 Rosegarden始终以 960 PPQ 存储 MIDI 文件。相比之下,斯坦伯格的 Cubase使用 480。我记得很久以前使用 Cakewalk 只有 120 PPQ,但后来的版本允许将此值作为配置设置进行更改。一般来说,您不仅需要适应所有短于四分之一的音乐数字,包括三连音等分割,还需要考虑基于精细时间调整的摇摆等效果。

关于JavaScript 音序器 MIDI 文件时序分辨率 (PPQN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com