2011-06-24 14 views
0

NAudioページ(http://naudio.codeplex.com/documentation)で提案されているので、私はここに質問を投稿しています。NAudioとMidiファイルの読み込み

NAudioで.midファイルをロードしたので、適切な時間にトラックのイベントをステップ実行したいと思います。 "NoteOn"イベントに達すると、私は "ビープ音"のようなものを私のコンソールに書きたいと思います。このようにして、.midファイルの単純な動作を表示できます。詳しくは、どのようにしてファイルのイベントを時間通りに適切に進めることができますか?

私はvsC#2008を使用していますが、NAudioの.dllは正常に動作しています。私はライブラリと一緒にmidiファイルを読み込んで、トラック情報とすべてを抽出することができますが、私は時間に関してそれをどのように使用するか分かりません。私は "絶対時間"または "デルタ時間"のどちらかの値を入力する必要があると思っています。お手伝いありがとう。

編集: 非常に参考にして、私が意図したことをする方法を見つけ出すことができました。

double convertAbsoluteTimeToMilliseconds = 1.0/30.0; 
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); 
    sw.Start(); 
    foreach (MidiEvent note in _f1.Events[1]) 
    { 
     while (note.AbsoluteTime * convertAbsoluteTimeToMilliseconds > sw.ElapsedMilliseconds) { } 
     if(note.CommandCode==MidiCommandCode.NoteOn) 
      Console.Write ("beep "); 
    } 
    sw.Stop(); 

誰かがこれを行う別の方法を知っている場合は、私に知らせてください。時間の差のために睡眠を使用すると、何らかの理由でより遅く、遅くなった応答が生じました。しかし、これはうまくいくようです。また、私は "convertAbsoluteTimeToMilliseconds"はマシンに依存していると確信しています。

答えて

2

擬似コード:

DateTime offset = DateTime.Now; /Start playing here. 
foreach (MidiEvent note in events) 
{ 
    DateTime beepAt = offset.AddMilliseconds (note.AbsoluteTime * convertAbsoluteTimeToMilliseconds); 
    System.Threading.Thread.Sleep (beepAt - offset); 
    Console.WriteLine ("beep"); 
} 
+0

はご回答いただきありがとうございます。あなたの擬似コードは、私が望んでいたことをどうやってやるのか本当に分かりました。 – viperld002

関連する問題