我正在尝试在播放歌曲时浏览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的播放速度与歌曲保持一致。
答案 0 :(得分:0)
为什么不同时播放2个midi文件,而只使用一个实际输出音频(如果音频API支持它...)
甚至更好,解析整个midi文件一次。 获取注释及其时间,并将其存储在一个大阵列中。 播放实际的midi文件时,请使用刚刚填充的数组来显示音符。