/// <summary> /// すべてのMIDIInデバイスの名前を取得します。 /// </summary> /// <returns></returns> private string[] midiInDeviceEnum() { List <string> names = new List <string>(); int inNum = MIDIIN.GetDeviceNum(); for (int i = 0; i < inNum; i++) { names.Add(MIDIIN.GetDeviceName(i)); } return(names.ToArray()); }
/// <summary> /// MIDIメッセージを取得するスレッド /// </summary> private void MIDILoadThread() { SetEnableEnd(true); MIDIIN midiIn = null; try { midiIn = new MIDIIN(GetSelectedDeviceName()); while (!token.IsCancellationRequested) { byte[] message = midiIn.GetMIDIMessage(); if (message.Length == 0) { Thread.Sleep(1); continue; } //MIDIメッセージ表示 PrintMIDIMessage(message); //midiメッセージ毎に分岐 //ノートオン if (message[0] == 0x90 + MIDIChannel) { //ノートが選択されていた場合 if (GetRadioIsCheckde(noteRadio)) { //指定の音階の場合 if (message[1] == GetNoteNumber()) { //ベロシティーでOnかOffか判定 if (message[2] != 0) { ReverbOn(); } else { ReverbOff(); } } } } //ノートオフ else if (message[0] == 0x80 + MIDIChannel) { //ノートが選択されていた場合 if (GetRadioIsCheckde(noteRadio)) { //指定の音階の場合 if (message[1] == GetNoteNumber()) { ReverbOff(); } } } //コントロールチェンジ else if (message[0] == 0xB0 + MIDIChannel) { //コントロールチェンジ選択時 if (GetRadioIsCheckde(ccRadio)) { //指定のCC番号の場合 if (message[1] == GetCCNumber()) { //64以上の(63より多い)場合にOn if (message[2] > 63) { ReverbOn(); } else { ReverbOff(); } } } } else /*何もしない*/ } { } } catch { //例外処理はメインスレッドで行う。そのため、呼び出し元に例外を再スロー。 throw; } finally { if (midiIn != null) { midiIn.Dispose(); midiIn = null; } //有効無効切り替え SetEnableEnd(false); SetEnableStart(true); } }