在C#中播放带有时间偏移的Midi文件

本文关键字:Midi 文件 时间 播放 | 更新日期: 2023-09-27 18:00:42

我目前正试图在歌曲播放时浏览一个midi文件,midi文件在歌曲前几毫秒"播放"。更详细地说,我通过将音符从屏幕的右侧滑动到左侧来可视化歌曲的音符。我根据midi文件的信号,在屏幕右侧创建笔记的可视化,然后开始将它们翻译到左侧。我希望他们在歌曲中播放音符的同时通过屏幕中心。

我可以使用以下代码很好地播放midi文件:

 if (counter < _file.Events[track].Count)
        {
            double s_ms = Microsoft.Xna.Framework.Media.MediaPlayer.PlayPosition.TotalMilliseconds;
            double m_ms = _file.Events[track][counter].AbsoluteTime / _pulses_per_millisecond;
            if (s_ms + offset > m_ms)
            {
                counter++;
                if (_file.Events[track][counter].CommandCode == NAudio.Midi.MidiCommandCode.NoteOn)
                {
                    Console.Beep(777, 25);
                    Console.Write("Beep ");
                }
            }
        }

偏移量有效地使midi文件播放一连串的音符,然后返回到完全不使用偏移量时的音轨位置。

我被难住了,如果有任何帮助,我将不胜感激。我使用的是XNA 3.1和NAudio。迷笛的演奏与歌曲的节奏恰到好处。当然,我需要midi的播放速度与歌曲保持一致。

在C#中播放带有时间偏移的Midi文件

为什么不同时播放两个midi文件,而只使用一个来实际输出音频(如果音频API支持…)

或者更好的是,对整个midi文件进行一次解析。获取笔记和时间,并将其存储在一个大数组中。当播放实际的midi文件时,使用刚刚填充的数组来可视化注释。