В настоящее время я пытаюсь просмотреть 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. Миди играет вовремя с песней просто отлично. Конечно, мне нужно, чтобы скорость воспроизведения миди оставалась такой же, как и у песни.