C# 使用WPF播放MIDI文件并与视频同步时间 我用C/Windows演示文稿基金会编写了一个应用程序。 它是用脚的形状想象舞蹈的舞步。 目前我正在以WAV文件的形式播放音乐,并用定时器计时

C# 使用WPF播放MIDI文件并与视频同步时间 我用C/Windows演示文稿基金会编写了一个应用程序。 它是用脚的形状想象舞蹈的舞步。 目前我正在以WAV文件的形式播放音乐,并用定时器计时,c#,wpf,midi,naudio,C#,Wpf,Midi,Naudio,由于计时器的不规则性音乐与步骤不同步。 我需要某种类型的同步,这就是为什么我想使用MIDI文件 要同步这些步骤,我需要在音乐中每次都有一个事件,然后显示下一步。在这种情况下,我将不再使用计时器 我已经看过NAudio了。我发现播放MP3文件的教程对我没有帮助。我创建了一个MidiFile对象,但我不知道如何播放它。我知道MIDI文件包含有关如何播放音乐(用于合成器)的信息,但我不想实现自己的播放器 使用NAudio播放MIDI文件的简单方法是什么 我如何在音乐的每一时刻接收事件 除了NAudio

由于计时器的不规则性音乐与步骤不同步。 我需要某种类型的同步,这就是为什么我想使用MIDI文件

要同步这些步骤,我需要在音乐中每次都有一个事件,然后显示下一步。在这种情况下,我将不再使用计时器

我已经看过NAudio了。我发现播放MP3文件的教程对我没有帮助。我创建了一个MidiFile对象,但我不知道如何播放它。我知道MIDI文件包含有关如何播放音乐(用于合成器)的信息,但我不想实现自己的播放器

  • 使用NAudio播放MIDI文件的简单方法是什么

  • 我如何在音乐的每一时刻接收事件

  • 除了NAudio,是否有一个替代方案可以更好地帮助我

  • 是否有MIDI的替代方案可以与我的可视化同步


  • 我对每一种帮助都心存感激。我已经搜索了一段时间,并且认为我可能找错了方向。

    如果你想深入了解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
            }
        }
    }
    
    更多信息请参阅文章和参考资料