+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Diagnostics;\r
-\r
-namespace FDK\r
-{\r
- public class CInputMIDI : IInputDevice, IDisposable\r
- {\r
- // プロパティ\r
-\r
- public uint hMidiIn;\r
- public List<STInputEvent> listEventBuffer;\r
-\r
-\r
- // コンストラクタ\r
-\r
- public CInputMIDI( uint nID )\r
- {\r
- this.hMidiIn = 0;\r
- this.listEventBuffer = new List<STInputEvent>( 32 );\r
- this.list入力イベント = new List<STInputEvent>( 32 );\r
- this.e入力デバイス種別 = E入力デバイス種別.MidiIn;\r
- this.GUID = "";\r
- this.ID = (int) nID;\r
- }\r
-\r
-\r
- // メソッド\r
-\r
- public void tメッセージからMIDI信号のみ受信( uint wMsg, int dwInstance, int dwParam1, int dwParam2, long n受信システム時刻 )\r
- {\r
- if( wMsg == CWin32.MIM_DATA )\r
- {\r
- int nMIDIevent = dwParam1 & 0xF0;\r
- int nPara1 = ( dwParam1 >> 8 ) & 0xFF;\r
- int nPara2 = ( dwParam1 >> 16 ) & 0xFF;\r
-\r
-// Trace.TraceInformation( "MIDIevent={0:X2} para1={1:X2} para2={2:X2}", nMIDIevent, nPara1, nPara2 );\r
- \r
- if( ( nMIDIevent == 0x90 ) && ( nPara2 != 0 ) ) // Note ON\r
- {\r
- STInputEvent item = new STInputEvent();\r
- item.nKey = nPara1;\r
- item.b押された = true;\r
- item.nTimeStamp = n受信システム時刻;\r
- item.nVelocity = nPara2;\r
- this.listEventBuffer.Add( item );\r
- }\r
- //else if ( ( nMIDIevent == 0xB0 ) && ( nPara1 == 4 ) ) // Ctrl Chg #04: Foot Controller\r
- //{\r
- // STInputEvent item = new STInputEvent();\r
- // item.nKey = nPara1;\r
- // item.b押された = true;\r
- // item.nTimeStamp = n受信システム時刻;\r
- // item.nVelocity = nPara2;\r
- // this.listEventBuffer.Add( item );\r
- //}\r
- }\r
- }\r
-\r
- #region [ IInputDevice 実装 ]\r
- //-----------------\r
- public E入力デバイス種別 e入力デバイス種別 { get; private set; }\r
- public string GUID { get; private set; }\r
- public int ID { get; private set; }\r
- public List<STInputEvent> list入力イベント { get; private set; }\r
-\r
- public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
- {\r
- // this.list入力イベント = new List<STInputEvent>( 32 );\r
- this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new();\r
-\r
- for( int i = 0; i < this.listEventBuffer.Count; i++ )\r
- this.list入力イベント.Add( this.listEventBuffer[ i ] );\r
-\r
- this.listEventBuffer.Clear();\r
- }\r
- public bool bキーが押された( int nKey )\r
- {\r
- foreach( STInputEvent event2 in this.list入力イベント )\r
- {\r
- if( ( event2.nKey == nKey ) && event2.b押された )\r
- {\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
- public bool bキーが押されている( int nKey )\r
- {\r
- return false;\r
- }\r
- public bool bキーが離された( int nKey )\r
- {\r
- return false;\r
- }\r
- public bool bキーが離されている( int nKey )\r
- {\r
- return false;\r
- }\r
- //-----------------\r
- #endregion\r
-\r
- #region [ IDisposable 実装 ]\r
- //-----------------\r
- public void Dispose()\r
- {\r
- if ( this.listEventBuffer != null )\r
- {\r
- this.listEventBuffer = null;\r
- }\r
- if ( this.list入力イベント != null )\r
- {\r
- this.list入力イベント = null;\r
- }\r
- }\r
- //-----------------\r
- #endregion\r
- }\r
-}\r