0

NAudio ページ (http://naudio.codeplex.com/documentation) で提案されたので、ここに質問を投稿します。

NAudio を使用して .mid ファイルを読み込んだので、適切なタイミングでトラックのイベントをステップ実行したいと思います。「NoteOn」イベントに到達したら、コンソールに「Beep」などを書き込みたいと思います。このようにして、.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」はマシンに依存していると確信しています。

4

1 に答える 1

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");
}
于 2011-06-24T22:34:32.340 に答える