使用 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 包含您需要的所有属性: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);
对于Length
,可以使用LengthAs
扩展方法:
TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricLength = note.LengthAs<MetricTimeSpan>(tempoMap);
BarBeatTimeSpan metricLength = note.LengthAs<BarBeatTimeSpan>(tempoMap);
您可以在库文档的 Time and length 文章中阅读更多内容。
我正在制作一个 C# 程序,它应该从 MIDI 文件中读取每个音符并获取音符的长度和力度,但我不知道该怎么做...
我正在使用 DryWetMidi 库,但是还有其他库吗?
请看this Stack Overflow question。
可以获取更多信息here。
据我调查,除了从块中读取这些注释外,DryWetMidi 并不清楚块的大小。
从 DryWetMidi 1.1.0 开始,您需要获取 MIDI 文件的音符的是以下代码:
IEnumerable<Note> notes = midiFile.GetNotes();
Note
class 包含您需要的所有属性: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);
对于Length
,可以使用LengthAs
扩展方法:
TempoMap tempoMap = midiFile.GetTempoMap();
MetricTimeSpan metricLength = note.LengthAs<MetricTimeSpan>(tempoMap);
BarBeatTimeSpan metricLength = note.LengthAs<BarBeatTimeSpan>(tempoMap);
您可以在库文档的 Time and length 文章中阅读更多内容。