2016-04-10 33 views
1

私のMIDIアプリケーションでは、NAudioを使用しています。 (素晴らしい!)しかし、私がミディ・キーボードで演奏すると、常に遅れがあります。私のコードは以下の通りです:NAudio.Midi MidiInでの遅延

private MidiOut @out = new MidiOut(0); 
private void InitMidiOut() 
{ 
    MidiIn midiIn = new MidiIn(0); 
    midiIn.MessageReceived += midiIn_MessageReceived; 
    midiIn.Start(); 
} 

private void midiIn_MessageReceived(object sender, MidiInMessageEventArgs e) 
{ 
    if (e.MidiEvent.CommandCode == MidiCommandCode.NoteOn) { 
     @out.Send(e.RawMessage); 
    } 
} 

私はWaveOutで遅延があることを理解していますが、なぜMidiOutでですか? 遅延を最小限にする方法はありますか?

+1

MIDIを実際のサウンドに変換するために使用するコンポーネント(ソフトウェアまたはハードウェア)を教えてください。 –

+0

現時点では、Windows 7にはquartz.dllが組み込まれています。 – ubsch

+0

そのDLLにはMIDIシンセサイザが含まれていません。どの出力装置を使用していますか? –

答えて

1

これはNAudioとは関係ありません。

マイクロソフトのビルトインソフトウェアシンセサイザーはもともとMIDIファイルの再生用に書かれたもので、リアルタイムレスポンスは不要であるため、ドロップアウトのリスクを低減するために高いレイテンシを使用します。

これは、低いレイテンシで操作できる他のシンセサイザ(たとえば、VirtualMIDISynth)と交換する必要があります。

+0

あなたの答えをありがとう。私はVirtualMIDISynthと素晴らしいSoundfontsをインストールしました。今は音がはるかに良いです。しかし、遅れは同じです。 – ubsch

+0

どのようなレイテンシを設定しましたか? –

+0

ありがとうございました! VirtulaMIDISynthでレイテンシを設定できることに気がつかなかった。私はそれを0に設定しました、そして今、待ち時間はもうありません。 – ubsch

0

いくつかの段階でレイテンシを導入できます。しかし、NAudioはWindows APIのmidi...に非常に薄いラッパーであるため、受信と送信が非常に迅速に行われることを期待しています。実際に音を出すためにあなたは何を使っていますか?

+0

現時点では、組み込みの組み込みの「Microsoft GS Wavetable Synth」です。 – ubsch

+0

あなたの答えをありがとう。 CLへの私のコメントを見てください。私は音楽の表記( "カペラ")のためにアプリを使用し、CLが推奨するように "Microsoft GS Wavetable Synth"またはVirtualMIDISynthを使用するかどうかにかかわらず待ち時間はありません。 – ubsch