gpt4 book ai didi

midi - 来自 MIDI 持续时间的实际音符持续时间

转载 作者:行者123 更新时间:2023-12-05 00:07:01 26 4
gpt4 key购买 nike

我目前正在实现一个应用程序来对 MIDI 文件执行一些任务,我当前的问题是将我读过的音符输出到 LilyPond 文件。

我已将 note_on 和 note_off 事件合并为具有绝对开始和绝对持续时间的单个音符对象,但我真的不知道如何将该持续时间转换为实际的乐谱。我猜测持续时间 376 是我正在阅读的文件中的四分音符,因为我知道这首歌,显然 188 是八分音符,但这当然不能推广到所有 MIDI 文件。

有任何想法吗?

最佳答案

默认情况下,MIDI 文件的速度设置为 120 bpm,文件中的 MThd 块将告诉您“每四分音符的脉冲数”(ppqn)的分辨率。

如果 ppqn 是 96,那么 96 个刻度的增量是四分音符。

如果您对每个声音的实际持续时间(以秒为单位)感兴趣,您还应该考虑可以通过事件“FF 51 03 tt tt tt”改变的“速度”;三个字节是四分音符的微秒。

有了这两个值,您应该可以找到所需的内容。请注意,MIDI 文件中的持续时间可能是近似的,尤其是如果该 MIDI 文件是人类演奏者的录音。

很久以前我已经整理了一个 C 库来读/写 midifiles:https://github.com/rdentato/middl以防万一它可能有帮助(我已经有一段时间不看代码了,如果有任何不清楚的地方,请随时询问)。

我建议遵循这种方法:

  • 选择与您的部门兼容的“最小音符”(例如 1/128)并将其用作一种网格。
  • 将每个音符与最近的网格线对齐(即与最小节点的最近整数倍对齐)
  • 将其转换为标准记谱法(例如四分音符、八分音符等...)。

  • 在您的情况下,将 1/32 作为最小音符,将 384 作为除法(即 48 个刻度)。对于 376 刻度的注释,您将得到 376/48=7.8,您将其四舍五入为 8(最接近的整数)和 8/32 = 1/4。

    如果你找到一个持续时间为 193 滴答的音符,你可以看到它是一个 1/8 音符,因为 193/48 是 4.02(你可以四舍五入到 4)并且 4/32 = 1/8。

    继续这个推理,您可以看到持续时间为 671 滴答的音符应该是双点四分音符。

    事实上,671 应该近似于 672(48 的最接近的倍数),即 14*48。所以你的音符是 14/32 -> 7/16 -> (1/16 + 2/16 + 4/16) -> 1/16 + 1/8 + 1/4。

    如果您习惯使用二进制数,您可能会注意到 14 是 1110并从那里直接推导出 1/16、1/4 和 1/8 的存在。

    作为进一步的例子,持续时间为 480 滴答的音符是与 1/16 音符相关联的四分音符,因为 480=48*10 并且 10 是 1010以二进制形式。

    三胞胎和其他群体会让事情变得更复杂一些。最常见的除法值是96(3*2^5)、192(3*2^6)和384(3*2^7)并非偶然;这样三元组可以用整数个刻度表示。

    在某些情况下,您可能需要猜测或简化,这就是为什么没有“midi 到标准符号”程序可以 100% 准确的原因。

    关于midi - 来自 MIDI 持续时间的实际音符持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467995/

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