1

我目前正在尝试在歌曲播放时浏览一个 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 与歌曲同步播放就好了。当然,我需要midi的播放速度与歌曲保持一致。

4

1 回答 1

0

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

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

于 2011-06-29T21:42:17.547 回答