繁体   English   中英

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

[英]Playing a Midi file with time offset in C#

我目前正在尝试在歌曲播放时浏览 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 文件播放一连串音符,然后返回到轨道 position 如果根本不使用偏移量。

我很难过,非常感谢任何帮助。 我正在使用 XNA 3.1 和 NAudio。 MIDI 与歌曲同步播放就好了。 当然,我需要midi的播放速度与歌曲保持一致。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM