noteOn キー イベントの問題を解決した後 (ジャスティンに感謝)、別の 2 つの問題に気付きました: 遅延が大きすぎることと、同時に再生できないことです。
最初に私はIFステートメントを使用します:
if (nutka == "A0" && msg.Velocity != 0) {
clock.Schedule(new NoteOnMessage(outputDevice, Channel.Channel1, Pitch.A0, 80, 2));
}
これは優れた動作をし、遅延はありませんが、.wav ファイルではなく MIDI ピッチのみを使用することもできます。
ノートを再生する他の可能性を使用する場合 (リソースに追加されたファイルから):
SoundPlayer noteA0 = new SoundPlayer(Properties.Resources.A0);
noteA0.Play();
見た目も動作も問題ありませんが、SoundPlayer では同時に音符を演奏することはできません。
私が試していた別の方法は、WMP ライブラリでした:
var noteA0 = new WMPLib.WindowsMediaPlayer();
noteA0.URL = @"c:\sounds\piano\A0.wav";
わかりました...同時に再生されますが、ちょっと面白いことが起こります。より多くの音符を再生すると、遅延が大きくなります(キーを押してから音が聞こえるまでの遅延)、最終的にプログラムが何かを再生したままになります(まだnoteOnメッセージが表示されます) )...メモリバッファが突然なくなったように見えますか?
最後に確認しようとしたのは、DirectX ライブラリです。
Audio noteA1 = new Audio(@"C:\sounds\piano\A1.wav");
noteA1.Play();
ビルドとコンパイル - 問題もエラーもありませんが、MIDI デバイスでキーを押すと、アプリケーションは次のメッセージを返します。
An unhandled exception of type 'System.BadImageFormatException' occurred in Midi.dll
Additional information: Could not load file or assembly 'Microsoft.DirectX.AudioVideoPlayback.dll' or one of its dependencies.
It is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
私の質問は、私のファイル (.wav) をソリューション リソースに追加し、通常のピアノのように演奏できるように、遅延しながら同時に再生することは可能ですか? 通常のピアノとは、低遅延、ほとんど目立たない遅延を意味します。