我正在使用C#/Windows Presentation Foundation编写一个应用程序。它是用脚形可视化舞蹈的步骤。目前,我正在以WAV文件的形式播放音乐,并使用计时器对步骤进行计时。
由于计时器的不规则性,音乐与步骤不同步。我需要某种同步,这就是我想使用 MIDI 文件的原因。
要同步步骤,我需要音乐中每次都有一个事件,然后显示下一步。在这种情况下,我不会再使用计时器了。
我已经看过纳乌迪奥了。我找到了播放MP3文件的教程,这对我没有帮助。我创建了一个 MidiFile 对象,但我不知道如何播放它。我知道 MIDI 文件包含有关如何播放音乐(用于合成器)的信息,但我不想实现自己的播放器。
-
使用 NAudio 播放 MIDI 文件的简单方法是什么?
-
如何在每次音乐中接收事件?
-
有没有可以更好地帮助我的NAudio的替代品?
-
是否有可以同步到我的可视化的 MIDI 替代方案?
我感谢各种帮助。我一直在寻找一段时间,并认为我可能看错了方向。
使用 DryWetMIDI(我是作者),播放 MIDI 文件以及触发播放的事件非常简单:
namespace SimplePlaybackApp
{
class Program
{
private static Playback _playback;
static void Main(string[] args)
{
var midiFile = MidiFile.Read("The Greatest Song Ever.mid");
var outputDevice = OutputDevice.GetByName("Microsoft GS Wavetable Synth");
_playback = midiFile.GetPlayback(outputDevice);
_playback.EventPlayed += OnEventPlayed;
_playback.Start();
SpinWait.SpinUntil(() => !_playback.IsRunning);
Console.WriteLine("Playback stopped or finished.");
outputDevice.Dispose();
_playback.Dispose();
}
private static void OnEventPlayed(object sender, MidiEventPlayedEventArgs e)
{
// ... do something
}
}
}
有关详细信息,请参阅播放文章和播放 API 参考。
如果你想更深入地了解 midi 内部,这看起来是一个非常酷的库和源代码来探索。
http://code.google.com/p/midi-dot-net/