C# 使用WPF播放MIDI文件并与视频同步时间 我用C/Windows演示文稿基金会编写了一个应用程序。 它是用脚的形状想象舞蹈的舞步。 目前我正在以WAV文件的形式播放音乐,并用定时器计时
由于计时器的不规则性音乐与步骤不同步。 我需要某种类型的同步,这就是为什么我想使用MIDI文件 要同步这些步骤,我需要在音乐中每次都有一个事件,然后显示下一步。在这种情况下,我将不再使用计时器 我已经看过NAudio了。我发现播放MP3文件的教程对我没有帮助。我创建了一个MidiFile对象,但我不知道如何播放它。我知道MIDI文件包含有关如何播放音乐(用于合成器)的信息,但我不想实现自己的播放器C# 使用WPF播放MIDI文件并与视频同步时间 我用C/Windows演示文稿基金会编写了一个应用程序。 它是用脚的形状想象舞蹈的舞步。 目前我正在以WAV文件的形式播放音乐,并用定时器计时,c#,wpf,midi,naudio,C#,Wpf,Midi,Naudio,由于计时器的不规则性音乐与步骤不同步。 我需要某种类型的同步,这就是为什么我想使用MIDI文件 要同步这些步骤,我需要在音乐中每次都有一个事件,然后显示下一步。在这种情况下,我将不再使用计时器 我已经看过NAudio了。我发现播放MP3文件的教程对我没有帮助。我创建了一个MidiFile对象,但我不知道如何播放它。我知道MIDI文件包含有关如何播放音乐(用于合成器)的信息,但我不想实现自己的播放器 使用NAudio播放MIDI文件的简单方法是什么 我如何在音乐的每一时刻接收事件 除了NAudio
我对每一种帮助都心存感激。我已经搜索了一段时间,并且认为我可能找错了方向。如果你想深入了解midi的内部结构,这看起来是一个非常酷的库和源代码 通过(我是作者)播放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
}
}
}
更多信息请参阅文章和参考资料