您如何确定 NAudio 1.7 中的 midi 文件持续时间(以条为单位)?

Posted

技术标签:

【中文标题】您如何确定 NAudio 1.7 中的 midi 文件持续时间(以条为单位)?【英文标题】:How do you determine midi file duration (in bars) in NAudio 1.7? 【发布时间】:2015-01-14 22:55:10 【问题描述】:

我正在尝试使用 NAudio 1.7 计算 *.MID 文件中一系列 midi 音符的持续时间。我正在使用的 midi 文件在 1507 报告“EndTrack”,这是最后一次 NoteOff 的时间。我原本预计该值为 1536,即 4 小节乐句的持续时间。

这些信息还会在哪里表示或如何计算?

【问题讨论】:

看帖子here。它可能有一种对获取持续时间或字节大小等有用的技术。 一个*.mid文件不像一个wave文件...midi文件只是包含一系列midi事件,note on,note off等。事件的数量与midi 代表的持续时间。 【参考方案1】:

EndTrack 事件是一个独立的事件,可以有自己的时间。

如果 MIDI 文件不费心将结尾与小节对齐,那么这就是你得到的。

如果您想计算文件中的小节数(这可能对所有文件都没有意义),您必须自己四舍五入最后一个刻度值。

【讨论】:

不确定你的意思。我有一个测试中间文件,它代表一个 32 小节的短语,其中一个音符从第 2 小节开始,对应 1 个小节。开始刻度是 384(4 个四分音符 * 96 个刻度每季度),它的长度也是 384 个刻度,但是没有说 midi 文件代表 12288 个刻度(32 个小节 x 4 个四分音符 x 96 个刻度每季度),并且似乎有没有办法得出那个。 EndTrack 事件表示曲目在第二个小节之后结束。 你从哪里得到这 32 个酒吧?如果EndTrack 在第二个小节之后,那么这就是文件的长度。 嗯,我的错……我一直认为如果我创建了一个 32 小节的短语并将其导出,我会得到一个 32 小节的短语(在 Reaper 和 Live 中测试).. .看起来我错了。对此感到抱歉。 @CL。你知道有什么文件详细解释了音符值是如何以 MIDI 格式表示的吗? @nightcod3r 要提问,请使用“”按钮。

以上是关于您如何确定 NAudio 1.7 中的 midi 文件持续时间(以条为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NAudio 读取 MIDI 音符?

使用 NAudio 在 MIDI 文件中设置 MIDI 速度

NAudio.Midi 延迟与 MidiIn

无法使用 NAudio.Midi 播放音符

NAudio 和 Midi 文件读取

使用 NAudio 从一段 MIDI 文件中读取 MIDI 事件、消息