我在这里发布我的问题,因为建议在 NAudio 页面 (http://naudio.codeplex.com/documentation) 上这样做。
鉴于我已经使用 NAudio 加载了一个 .mid 文件,我想在适当的时间逐步浏览曲目的事件。到达“NoteOn”事件后,我想在控制台上写一些类似“Beep”的东西。这样我可以显示 .mid 文件的简单活动。详细地说,我怎样才能正确地及时遍历文件的事件?
我正在使用 vsC# 2008 并且 NAudio 的 .dll 工作正常。我已经用库加载了一个 midi 文件,可以提取轨道信息和所有内容,但我只是不确定如何在时间方面使用它。我想我需要对提供的“绝对时间”或“增量时间”值做一些事情。感谢您的帮助。
编辑:经过非常有帮助的回应后,我能够弄清楚如何做我想做的事。
double convertAbsoluteTimeToMilliseconds = 1.0 / 30.0;
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
foreach (MidiEvent note in _f1.Events[1])
{
while (note.AbsoluteTime * convertAbsoluteTimeToMilliseconds > sw.ElapsedMilliseconds) { }
if(note.CommandCode==MidiCommandCode.NoteOn)
Console.Write ("beep ");
}
sw.Stop();
如果有人知道这样做的替代方法,请告诉我。由于某种原因,在一段时间内使用睡眠会导致响应变得越来越慢。然而,这似乎工作正常。另外,我确信“convertAbsoluteTimeToMilliseconds”取决于机器。