使用DryWetMidi读取Midi文件中的每个音符(音符,力度,长度)

时间:2017-06-06 17:33:48

标签: c# file midi

我制作的C#程序应该读取midi文件中的每个音符,并获得音符的长度和速度,但我不知道该怎么做......

我正在使用DryWetMidi库,但如果您知道其他任何库,请告知我们。

谢谢。

2 个答案:

答案 0 :(得分:0)

请查看this。 可以获取更多信息here。 就我所看到的那样,DryWetMidi除了从大块中读取这些音符外,还不是很清楚大块的大小。

答案 1 :(得分:0)

DryWetMidi 1.1.0开始,您只需获取MIDI文件的所有注释即可:

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

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

要将Time作为&lt;小时,分钟,秒&gt; &lt; bars,beats&gt; ,您可以使用TimeAs扩展名方法:

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

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

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