1

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) をソリューション リソースに追加し、通常のピアノのように演奏できるように、遅延しながら同時に再生することは可能ですか? 通常のピアノとは、低遅延、ほとんど目立たない遅延を意味します。

4

0 に答える 0