如何从 DryWetMidi 库中的特定 MIDI 文件块中获取程序/乐器标题?

Posted

技术标签:

【中文标题】如何从 DryWetMidi 库中的特定 MIDI 文件块中获取程序/乐器标题?【英文标题】:How to get a program/instrument title from a specific chunk of a MIDI file in DryWetMidi library? 【发布时间】:2021-01-09 13:20:56 【问题描述】:

我在 C# 中使用 DryWetMidi 库并尝试从加载的块中获取程序/仪器标题,但我找不到给我标题的字段。 到目前为止,我只有:

var midiFile = MidiFile.Read("test.mid");
var tempoMap = midiFile.GetTempoMap();
var trackList = midiFile.GetTrackChunks().ToList();
var notes = trackList[0].GetNotes().ToList();

我希望找到类似的东西:

var programNumber = trackList[0].ProgramNumber;

var programNumber = midiFile.GetProgramNumbers();

但是我找不到这样的操作。 如果有任何方法可以在 DryWetMidi 或任何外部库中执行此操作,请告诉我。

【问题讨论】:

【参考方案1】:

TrackChunk 具有Events 属性,可以访问轨道块中的所有 MIDI 事件。只需找到ProgramChangeEvent 并收集程序编号:

var programNumbers = trackList[0]
    .Events
    .OfType<ProgramChangeEvent>()
    .Select(e => e.ProgramNumber)
    .ToArray();

DryWetMIDI 有完整的文档。请查看它以了解更多信息:https://melanchall.github.io/drywetmidi。

【讨论】:

以上是关于如何从 DryWetMidi 库中的特定 MIDI 文件块中获取程序/乐器标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

MIDI,如何获取小节和音符

如何将数据从 javascript 函数发送到 MIDI.js API 中的 MIDI.noteOn()

从 Subversion 存储库中删除特定文件?

如何在 CoreMidi 曲目中播放特定频道?

如何使用 Python 中的长笛乐器从音符制作 MIDI 文件(music21 库)