10

この質問を見たところ、回答の1つは、System.Diagnostics.Stopwatchはパフォーマンスの診断にのみ使用され、本番コードでは使用されないことを示しています。

その場合、.NETで正確なタイミングを取得するための最良の方法は何でしょうか?私は現在、NAudioのMIDI出力機能を使用して非常にシンプルなMIDIシーケンサーを構築する初期段階にあります。MIDIメッセージを(たとえば)1/10に揃えて、できるだけジッターを少なくして送信できるようにしたいと思います。これは実行可能ですか、それともコンテキスト切り替えのようなものが私の一日を台無しにしますか?

Stopwatch私は現在、コンソールアプリに、150bpmで1/16分音符のストリームを生成するときにジッターを継続的に呼び出して計算するコードをいくつか持っています。この状況では、ジッタは非常に低くなります。ただし、これを別のスレッドに移動するので、それが当てはまるかどうかはわかりません。

4

4 に答える 4

5

P / Invokeを気にしない場合は、QueryPerformanceCounterを使用できます:http ://www.eggheadcafe.com/articles/20021111.asp

于 2009-04-27T22:13:34.230 に答える
1

ネイティブストリーミングMIDIAPIを使用することもできます。NAudioにはないと思いますが、C#Midi Toolkitを見て、それがサポートされているかどうかを確認できます。それ以外の場合は、ネイティブMIDI API P / Invokeを実行する方法の2つの例があり、独自にロールすることができます...

于 2010-03-08T14:10:37.443 に答える
0

Windowsマルチメディアタイマーは、「アプリケーションがハードウェアプラットフォームで可能な限り最高の解像度(または精度)でタイマーイベントをスケジュールできるようにする」と述べています。

例として使用するアプリケーションは、MIDIシーケンサーです。

于 2015-06-17T21:59:30.600 に答える
0

私はDryWetMIDIの作者です。ライブラリには、WinMM高精度タイマーの助けを借りて機能する再生機能があります。タイマーはMidiClockクラスにラップされているため、MIDI操作を駆動するために使用できます。

var midiClock = new MidiClock(true, new HighPrecisionTickGenerator(), TimeSpan.FromMilliseconds(1));
midiClock.Ticked += OnTick;

OnTickこのコードで1ミリ秒ごとに呼び出されます。

于 2020-08-21T13:43:25.227 に答える