2 using System.Collections.Generic;
4 using System.Diagnostics;
8 public class CInputMIDI : IInputDevice, IDisposable
13 public List<STInputEvent> listEventBuffer;
17 public CInputMIDI( uint nID )
20 this.listEventBuffer = new List<STInputEvent>( 32 );
21 this.list入力イベント = new List<STInputEvent>( 32 );
22 this.e入力デバイス種別 = E入力デバイス種別.MidiIn;
25 this.strDeviceName = ""; // CInput管理で初期化する
31 public void tメッセージからMIDI信号のみ受信( uint wMsg, int dwInstance, int dwParam1, int dwParam2, long n受信システム時刻 )
33 if( wMsg == CWin32.MIM_DATA )
35 int nMIDIevent = dwParam1 & 0xF0;
36 int nPara1 = ( dwParam1 >> 8 ) & 0xFF;
37 int nPara2 = ( dwParam1 >> 16 ) & 0xFF;
39 // Trace.TraceInformation( "MIDIevent={0:X2} para1={1:X2} para2={2:X2}", nMIDIevent, nPara1, nPara2 );
41 if( ( nMIDIevent == 0x90 ) && ( nPara2 != 0 ) ) // Note ON
43 STInputEvent item = new STInputEvent();
46 item.nTimeStamp = n受信システム時刻;
47 item.nVelocity = nPara2;
48 this.listEventBuffer.Add( item );
50 //else if ( ( nMIDIevent == 0xB0 ) && ( nPara1 == 4 ) ) // Ctrl Chg #04: Foot Controller
52 // STInputEvent item = new STInputEvent();
53 // item.nKey = nPara1;
55 // item.nTimeStamp = n受信システム時刻;
56 // item.nVelocity = nPara2;
57 // this.listEventBuffer.Add( item );
62 #region [ IInputDevice 実装 ]
64 public E入力デバイス種別 e入力デバイス種別 { get; private set; }
65 public string GUID { get; private set; }
66 public int ID { get; private set; }
67 public List<STInputEvent> list入力イベント { get; private set; }
68 public string strDeviceName { get; set; }
70 public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )
72 // this.list入力イベント = new List<STInputEvent>( 32 );
73 this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new();
75 for( int i = 0; i < this.listEventBuffer.Count; i++ )
76 this.list入力イベント.Add( this.listEventBuffer[ i ] );
78 this.listEventBuffer.Clear();
80 public bool bキーが押された( int nKey )
82 foreach( STInputEvent event2 in this.list入力イベント )
84 if( ( event2.nKey == nKey ) && event2.b押された )
91 public bool bキーが押されている( int nKey )
95 public bool bキーが離された( int nKey )
99 public bool bキーが離されている( int nKey )
106 #region [ IDisposable 実装 ]
108 public void Dispose()
110 if ( this.listEventBuffer != null )
112 this.listEventBuffer = null;
114 if ( this.list入力イベント != null )
116 this.list入力イベント = null;