使用 DryWetMidi 从 MIDI 文件中读取每个音符(音符、力度、长度)

Read every note from a MIDI file (note, velocity, length) using DryWetMidi

我正在制作一个 C# 程序,它应该从 MIDI 文件中读取每个音符并获取音符的长度和力度,但我不知道该怎么做...

我正在使用 DryWetMidi 库,但是还有其他库吗?

请看this Stack Overflow question

可以获取更多信息here

据我调查,除了从块中读取这些注释外,DryWetMidi 并不清楚块的大小。

DryWetMidi 1.1.0 开始,您需要获取 MIDI 文件的音符的是以下代码:

IEnumerable<Note> notes = midiFile.GetNotes();

Note class 包含您需要的所有属性:NoteNumberNoteNameOctaveLengthTimeVelocityOffVelocity

要将 Time 获取为 ,您可以使用TimeAs扩展方法:

TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricTime = note.TimeAs<MetricTimeSpan>(tempoMap);
BarBeatTicksTimeSpan musicalTime = note.TimeAs<BarBeatTicksTimeSpan>(tempoMap);

对于Length,可以使用LengthAs扩展方法:

TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricLength = note.LengthAs<MetricTimeSpan>(tempoMap);
BarBeatTimeSpan metricLength = note.LengthAs<BarBeatTimeSpan>(tempoMap);

您可以在库文档的 Time and length 文章中阅读更多内容。