我正在制作一个 C# 程序,它应该从 MIDI 文件中读取每个音符并获取音符的长度和速度,但我不知道该怎么做...
我正在使用DryWetMidi库,但还有其他库吗?
从DryWetMidi 1.1.0开始,获取 MIDI 文件的音符所需要的只是以下代码:
IEnumerable<Note> notes = midiFile.GetNotes();
Run Code Online (Sandbox Code Playgroud)
本Note类包含所有你需要的属性:NoteNumber,NoteName,Octave,Length,Time,Velocity,和OffVelocity。
要获得Time为<小时,分钟,秒>或<酒吧,节拍>,您可以使用TimeAs扩展方法:
TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricTime = note.TimeAs<MetricTimeSpan>(tempoMap);
BarBeatTicksTimeSpan musicalTime = note.TimeAs<BarBeatTicksTimeSpan>(tempoMap);
Run Code Online (Sandbox Code Playgroud)
对于Length,您可以使用LengthAs扩展方法:
TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricLength = note.LengthAs<MetricTimeSpan>(tempoMap);
BarBeatTimeSpan metricLength = note.LengthAs<BarBeatTimeSpan>(tempoMap);
Run Code Online (Sandbox Code Playgroud)
您可以在库文档的时间和长度文章中阅读更多内容。