2011-06-29 10 views
1

現在、MIDIのファイルが再生されているときにmidiファイルを再生しようとしていますが、midiファイルを数ミリ秒前に再生しています。より詳細には、私は、音符を画面の右から左にスライドさせることによって、その音符を視覚化しています。ノートの視覚化を、画面の右側から、ミディファイルからの信号に合わせて作成し、次にそれらを左に翻訳し始めます。音符が実際にその曲で演奏されるのと同時に、画面の中央を通過させたいと思います。C#で時間オフセットのある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ファイルは、ノートのバーストを演奏し、それがオフセットwasn場合になりますトラック位置に戻りますまったく使われていない。

私は困惑しており、本当に助けに感謝します。私はXNA 3.1とNAudioを使用しています。ミディアムは丁度いい曲で時間通りに演奏する。もちろん、私はミディの演奏スピードと同じままにする必要があります。一つだけに、実際の出力のオーディオを使用しているときに、同時に2つのMIDIファイルを再生していないのはなぜ

答えて

0

(オーディオAPIがサポートしていれば...)

あるいはさらに良い、全体のMIDIを解析一度ファイルします。 ノートを取得してタイミングを決め、1つの大きな配列に格納します。 実際のMIDIファイルを再生するときに、入力した配列を使用してノートを視覚化します。

関連する問題