2016-04-10 57 views
1

在我的MIDI應用程序中,我使用NAudio。 (太棒了!)但是,如果我在我的midi鍵盤上玩,總會有延遲。這裏是我的代碼: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是一個相當薄的包裝,所以我期望接收和發送很快就會發生。你用什麼來實際製作聲音?

+0

目前它是內建的內建「Microsoft GS Wavetable Synth」。 – ubsch

+0

感謝您的回答。看看我對CL的評論。我使用音樂符號(「capella」)的應用程序,無論是否使用「Microsoft GS Wavetable Synth」或VirtualMIDISynth作爲建議的CL,都沒有延遲。 – ubsch