如何使用 NAudio 读取 MIDI 音符?
Posted
技术标签:
【中文标题】如何使用 NAudio 读取 MIDI 音符?【英文标题】:How to read MIDI notes with NAudio? 【发布时间】:2013-06-02 14:05:48 【问题描述】:我需要读取 MIDI 文件以便对音符进行进一步处理。
我尝试像这样使用 NAudio 这样做
MidiFile midi = new MidiFile("Test.mid");
foreach (MidiEvent note in midi.Events[1])
Console.Write(note.AbsoluteTime.ToString().PadRight(10));
Console.WriteLine(note.DeltaTime);
我希望得到音符的开头和持续时间,但我得到了奇怪的值,从 34654 开始(为什么?):
问题:
我需要每个 MIDI 音符和
开始时间 长度 频道索引如何使用 NAudio 获得正确的值?如果您对其他库有任何建议,请随时提出建议。
【问题讨论】:
查看 NAudio 源代码附带的音频文件浏览器演示应用程序。这正是您对 MIDI 文件所追求的 ^ naudio.codeplex.com/SourceControl/latest#AudioFileInspector/… 对于任何找不到它的人。 opensebj.blogspot.co.uk/2009/09/… 也是一个很好的资源。 【参考方案1】:midi 文件规范适用于每个事件的增量时间。所以 0 的增量时间意味着与前一个事件同时发生。 delta-time 代表多少实际时间取决于 midi 文件头中的信息。
以下是有关 MIDI 文件内部工作原理的一些信息。 http://home.roadrunner.com/~jgglatt/tech/midifile.htm
希望对你有帮助。
【讨论】:
所以 delta time 0 意味着和以前一样。为什么绝对时间以 34654 之类的值开头? 另外,这里的暂停是如何表示的? 好吧,没关系。控制台只是将其切断。我认为您提供的信息足以让我接受。谢谢! 那个网站一直在移动。 blitter.com/~russtopia/MIDI/~jglatt/files/midifile.htm以上是关于如何使用 NAudio 读取 MIDI 音符?的主要内容,如果未能解决你的问题,请参考以下文章