OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / DTXMania / コード / 全体 / C定数.cs
diff --git a/DTXMania/コード/全体/C定数.cs b/DTXMania/コード/全体/C定数.cs
new file mode 100644 (file)
index 0000000..1842707
--- /dev/null
@@ -0,0 +1,1374 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.Runtime.Serialization;
+
+namespace DTXMania
+{
+       public enum EChannel : int
+       {
+               Invalid = -1,
+               /// <summary>
+               /// 0x01 BGM 割当チャンネル
+               /// </summary>
+               BGM = 0x01,
+               BarLength = 0x02,
+               BPM = 0x03,
+               BGALayer1 = 0x04,
+               ExObj_nouse = 0x05,
+               MissAnimation_nouse = 0x06,
+               BGALayer2 = 0x07,
+               BPMEx = 0x08,
+               BMS_reserved_09 = 0x09,
+               BMS_reserved_0A = 0x0A,
+               //BMS_reserved_0B               = 0x0B,
+               //BMS_reserved_0C               = 0x0C,
+               //BMS_reserved_0D               = 0x0D,
+               //BMS_reserved_0E               = 0x0E,
+               //BMS_reserved_0F               = 0x0F,
+               //BMS_reserved_10               = 0x10,
+               /// <summary>
+               /// HHC 0x11
+               /// </summary>
+               HiHatClose = 0x11,
+               Snare = 0x12,
+               BassDrum = 0x13,
+               HighTom = 0x14,
+               LowTom = 0x15,
+               Cymbal = 0x16,
+               FloorTom = 0x17,
+               HiHatOpen = 0x18,
+               RideCymbal = 0x19,
+               LeftCymbal = 0x1A,
+               LeftPedal = 0x1B,
+               /// <summary>
+               /// 0x1C Visible LBD
+               /// </summary>
+               LeftBassDrum = 0x1C,
+               //nouse_1d                      = 0x1D,
+               //nouse_1e                      = 0x1E,
+               /// <summary>
+               /// 0x1F Dr. Fillin
+               /// </summary>
+               DrumsFillin = 0x1F,
+               Guitar_Open = 0x20,
+               Guitar_xxB = 0x21,
+               Guitar_xGx = 0x22,
+               Guitar_xGB = 0x23,
+               Guitar_Rxx = 0x24,
+               Guitar_RxB = 0x25,
+               Guitar_RGx = 0x26,
+               Guitar_RGB = 0x27,
+               /// <summary>
+               /// 0x28 Gt. Wailing
+               /// </summary>
+               Guitar_Wailing = 0x28,
+               flowspeed_gt_nouse = 0x29,
+               //nouse_2a                      = 0x2A,
+               //nouse_2b                      = 0x2B,
+               //nouse_2c                      = 0x2C,
+               //nouse_2d                      = 0x2D,
+               //nouse_2e                      = 0x2E,
+               /// <summary>
+               /// 0x2F Gt. Wailing Sound
+               /// </summary>
+               Guitar_WailingSound = 0x2F,
+               flowspeed_dr_nouse = 0x30,
+               /// <summary>
+               /// 0x31 HHC Hidden
+               /// </summary>
+               HiHatClose_Hidden = 0x31,
+               Snare_Hidden = 0x32,
+               BassDrum_Hidden = 0x33,
+               HighTom_Hidden = 0x34,
+               LowTom_Hidden = 0x35,
+               Cymbal_Hidden = 0x36,
+               FloorTom_Hidden = 0x37,
+               HiHatOpen_Hidden = 0x38,
+               RideCymbal_Hidden = 0x39,
+               LeftCymbal_Hidden = 0x3A,
+               LeftPedal_Hidden = 0x3B,
+               /// <summary>
+               /// 0x3C LBD Hidden
+               /// </summary>
+               LeftBassDrum_Hidden = 0x3C,
+               //nouse_3d                      = 0x3D,
+               //nouse_3e                      = 0x3E,
+               //nouse_3f                      = 0x3F,
+               //BMS_reserved_40               = 0x40,
+               //HiddenObject_2P_41    = 0x41,
+               //HiddenObject_2P_42    = 0x42,
+               //HiddenObject_2P_43    = 0x43,
+               //HiddenObject_2P_44    = 0x44,
+               //HiddenObject_2P_45    = 0x45,
+               //HiddenObject_2P_46    = 0x46,
+               //BMS_reserved_47               = 0x47,
+               //BMS_reserved_48               = 0x48,
+               //BMS_reserved_49               = 0x49,
+               //nouse_4a                      = 0x4A,
+               //nouse_4b                      = 0x4B,
+               //nouse_4c                      = 0x4C,
+               //nouse_4d                      = 0x4D,
+               //nouse_4e                      = 0x4E,
+               //nouse_4f                      = 0x4F,
+               /// <summary>
+               /// 0x50 BarLine
+               /// </summary>
+               BarLine = 0x50,
+               /// <summary>
+               /// 0x51 BeatLine
+               /// </summary>
+               BeatLine = 0x51,
+               MIDIChorus = 0x52,
+               FillIn = 0x53,
+               Movie = 0x54,
+               BGALayer3 = 0x55,
+               BGALayer4 = 0x56,
+               BGALayer5 = 0x57,
+               BGALayer6 = 0x58,
+               BGALayer7 = 0x59,
+               MovieFull = 0x5A,
+               nouse_5b = 0x5B,
+               nouse_5c = 0x5C,
+               nouse_5d = 0x5D,
+               nouse_5e = 0x5E,
+               nouse_5f = 0x5F,
+               BGALayer8 = 0x60,
+               SE01 = 0x61,
+               SE02 = 0x62,
+               SE03 = 0x63,
+               SE04 = 0x64,
+               SE05 = 0x65,
+               SE06 = 0x66,
+               SE07 = 0x67,
+               SE08 = 0x68,
+               SE09 = 0x69,
+               //nouse_6a                      = 0x6A,
+               //nouse_6b                      = 0x6B,
+               //nouse_6c                      = 0x6C,
+               //nouse_6d                      = 0x6D,
+               //nouse_6e                      = 0x6E,
+               //nouse_6f                      = 0x6F,
+               SE10 = 0x70,
+               SE11 = 0x71,
+               SE12 = 0x72,
+               SE13 = 0x73,
+               SE14 = 0x74,
+               SE15 = 0x75,
+               SE16 = 0x76,
+               SE17 = 0x77,
+               SE18 = 0x78,
+               SE19 = 0x79,
+               //nouse_7a                      = 0x7A,
+               //nouse_7b                      = 0x7B,
+               //nouse_7c                      = 0x7C,
+               //nouse_7d                      = 0x7D,
+               //nouse_7e                      = 0x7E,
+               //nouse_7f                      = 0x7F,
+               SE20 = 0x80,
+               SE21 = 0x81,
+               SE22 = 0x82,
+               SE23 = 0x83,
+               SE24 = 0x84,
+               SE25 = 0x85,
+               SE26 = 0x86,
+               SE27 = 0x87,
+               SE28 = 0x88,
+               SE29 = 0x89,
+               //nouse_8a                      = 0x8A,
+               //nouse_8b                      = 0x8B,
+               //nouse_8c                      = 0x8C,
+               //nouse_8d                      = 0x8D,
+               //nouse_8e                      = 0x8E,
+               //nouse_8f                      = 0x8F,
+               SE30 = 0x90,
+               SE31 = 0x91,
+               SE32 = 0x92,
+               //nouse_90                      = 0x90,
+               //nouse_91                      = 0x91,
+               //nouse_92                      = 0x92,
+               //nouse_93                      = 0x93,
+               //nouse_94                      = 0x94,
+               //nouse_95                      = 0x95,
+               //nouse_96                      = 0x96,
+               //nouse_97                      = 0x97,
+               //nouse_98                      = 0x98,
+               //nouse_99                      = 0x99,
+               //nouse_9a                      = 0x9A,
+               //nouse_9b                      = 0x9B,
+               //nouse_9c                      = 0x9C,
+               //nouse_9d                      = 0x9D,
+               //nouse_9e                      = 0x9E,
+               //nouse_9f                      = 0x9F,
+               /// <summary>
+               /// 
+               /// 0xA0 Bs. Open
+               /// </summary>
+               Bass_Open = 0xA0,
+               Bass_xxB = 0xA1,
+               Bass_xGx = 0xA2,
+               Bass_xGB = 0xA3,
+               Bass_Rxx = 0xA4,
+               Bass_RxB = 0xA5,
+               Bass_RGx = 0xA6,
+               /// <summary>
+               /// 0xA7 Bs. RGB
+               /// </summary>
+               Bass_RGB = 0xA7,
+               /// <summary>
+               /// 0xA8 Bs. Wailing
+               /// </summary>
+               Bass_Wailing = 0xA8,
+               //nouse_a9                      = 0xA9,
+               //nouse_aa                      = 0xAA,
+               //nouse_ab                      = 0xAB,
+               //nouse_ac                      = 0xAC,
+               //nouse_ad                      = 0xAD,
+               //nouse_ae                      = 0xAE,
+               /// <summary>
+               /// 0xAF Bs. Wailing Sound
+               /// </summary>
+               Bass_WailingSound = 0xAF,
+               //nouse_b0                      = 0xB0,
+               HiHatClose_NoChip = 0xB1,
+               Snare_NoChip = 0xB2,
+               BassDrum_NoChip = 0xB3,
+               HighTom_NoChip = 0xB4,
+               LowTom_NoChip = 0xB5,
+               Cymbal_NoChip = 0xB6,
+               FloorTom_NoChip = 0xB7,
+               HiHatOpen_NoChip = 0xB8,
+               RideCymbal_NoChip = 0xB9,
+               Guitar_NoChip = 0xBA,
+               Bass_NoChip = 0xBB,
+               LeftCymbal_NoChip = 0xBC,
+               LeftPedal_NoChip = 0xBD,
+               LeftBassDrum_NoChip = 0xBE,
+               //nouse_bf                      = 0xBF,
+               //nouse_c0                      = 0xC0,
+               BeatLineShift = 0xC1,
+               BeatLineDisplay = 0xC2,
+               //nouse_c3                      = 0xC3,
+               BGALayer1_Swap = 0xC4,
+               //nouse_c5                      = 0xC5,
+               //nouse_c6                      = 0xC6,
+               BGALayer2_Swap = 0xC7,
+               //nouse_c8                      = 0xC8,
+               //nouse_c9                      = 0xC9,
+               //nouse_ca                      = 0xCA,
+               //nouse_cb                      = 0xCB,
+               //nouse_cc                      = 0xCC,
+               //nouse_cd                      = 0xCD,
+               //nouse_ce                      = 0xCE,
+               //nouse_cf                      = 0xCF,
+               //nouse_d0                      = 0xD0,
+               //nouse_d1                      = 0xD1,
+               //nouse_d2                      = 0xD2,
+               //nouse_d3                      = 0xD3,
+               //nouse_d4                      = 0xD4,
+               BGALayer3_Swap = 0xD5,
+               BGALayer4_Swap = 0xD6,
+               BGALayer5_Swap = 0xD7,
+               BGALayer6_Swap = 0xD8,
+               BGALayer7_Swap = 0xD9,
+               MixerAdd = 0xDA,
+               MixerRemove = 0xDB,
+               //nouse_dc                      = 0xDC,
+               //nouse_dd                      = 0xDD,
+               //nouse_de                      = 0xDE,
+               //nouse_df                      = 0xDF,
+               BGALayer8_Swap = 0xE0,
+               //nouse_e1                      = 0xE1,
+               //nouse_e2                      = 0xE2,
+               //nouse_e3                      = 0xE3,
+               //nouse_e4                      = 0xE4,
+               //nouse_e5                      = 0xE5,
+               //nouse_e6                      = 0xE6,
+               //nouse_e7                      = 0xE7,
+               //nouse_e8                      = 0xE8,
+               //nouse_e9                      = 0xE9,
+               //nouse_ea                      = 0xEA,
+               //nouse_eb                      = 0xEB,
+               Click                           = 0xEC,         // metronome click
+               //nouse_ed                      = 0xED,
+               //nouse_ee                      = 0xEE,
+               //nouse_ef                      = 0xEF,
+               //nouse_f0                      = 0xF0,
+               //nouse_f1                      = 0xF1,
+               //nouse_f2                      = 0xF2,
+               //nouse_f3                      = 0xF3,
+               //nouse_f4                      = 0xF4,
+               //nouse_f5                      = 0xF5,
+               //nouse_f6                      = 0xF6,
+               //nouse_f7                      = 0xF7,
+               //nouse_f8                      = 0xF8,
+               //nouse_f9                      = 0xF9,
+               //nouse_fa                      = 0xFA,
+               //nouse_fb                      = 0xFB,
+               //nouse_fc                      = 0xFC,
+               //nouse_fd                      = 0xFD,
+               //nouse_fe                      = 0xFE,
+               //nouse_ff                      = 0xFF,
+       }
+
+       public enum EDTX種別
+       {
+               DTX,
+               GDA,
+               G2D,
+               BMS,
+               BME,
+               SMF
+       }
+
+       public enum Eレーンビットパターン
+       {
+               OPEN,
+               xxB,
+               xGx,
+               xGB,
+               Rxx,
+               RxB,
+               RGx,
+               RGB
+       };
+
+       public enum Eシステムサウンド
+       {
+               BGMオプション画面,
+               BGMコンフィグ画面,
+               BGM起動画面,
+               BGM選曲画面,
+               SOUNDステージ失敗音,
+               SOUNDカーソル移動音,
+               SOUNDゲーム開始音,
+               SOUNDゲーム終了音,
+               SOUNDステージクリア音,
+               SOUNDタイトル音,
+               SOUNDフルコンボ音,
+               SOUND歓声音,
+               SOUND曲読込開始音,
+               SOUND決定音,
+               SOUND取消音,
+               SOUND変更音,
+               SOUNDClickHigh,
+               SOUNDClickLow,
+               Count               // システムサウンド総数の計算用
+       }
+
+       public enum E演奏画面の戻り値
+       {
+               継続,
+               演奏中断,
+               ステージ失敗,
+               ステージクリア,
+               再読込_再演奏,
+               再演奏
+       }
+
+       public enum E曲読込画面の戻り値
+       {
+               継続,
+               読込完了,
+               読込中止
+       }
+
+       [Flags]
+       public enum EPadFlag        // #24063 2011.1.16 yyagi コマンド入力用 パッド入力のフラグ化
+       {
+               None = 0,
+               HH = 1,
+               R = 1,
+               SD = 2,
+               G = 2,
+               B = 4,
+               BD = 4,
+               HT = 8,
+               Pick = 8,
+               LT = 16,
+               Wail = 16,
+               FT = 32,
+               Cancel = 32,
+               CY = 64,
+               Decide = 128,
+               HHO = 128,
+               RD = 256,
+               LC = 512,
+               HP = 1024,              // #27029
+               Unknown = 2048
+       }
+
+       public enum ESoundChipType
+       {
+               Drums,
+               Guitar,
+               Bass,
+               SE,
+               BGM,
+               Unknown
+       }
+
+       public enum EAVIType
+       {
+               Unknown,
+               AVI,
+               AVIPAN
+       }
+
+       public enum EBGAType
+       {
+               Unknown,
+               BMP,
+               BMPTEX,
+               BGA,
+               BGAPAN
+       }
+
+       public enum EFIFOMode
+       {
+               フェードイン,
+               フェードアウト
+       }
+
+       public enum EJudge
+       {
+               Perfect,
+               Great,
+               Good,
+               Poor,
+               Miss,
+               Bad,
+               Auto
+       }
+       // #36177 使用レーン数 ikanick add 16.04.15
+       public enum EUseLanes : int
+       {
+               None,
+               Dr_6,
+               Dr_10,
+               Dr_12,
+               GB_3,
+               GB_3_Open,
+               GB_5,
+               Other
+       }
+
+       [DataContract]
+       public enum EActiveInstrument
+       {
+               [EnumMember]
+               Both,
+               [EnumMember]
+               DrOnly,
+               [EnumMember]
+               GBOnly,
+       }
+
+       [DataContract]
+       public enum ECYGroup
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Group
+       }
+
+       [DataContract]
+       public enum EFTGroup
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Group
+       }
+
+       [DataContract]
+       public enum EHHGroup
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               HO_HC,
+               [EnumMember]
+               LC_HH,
+               [EnumMember]
+               Group
+       }
+
+       [DataContract]
+       // #27029 2012.1.4 from add
+       // Group はどちらも BD として扱われる
+       public enum EBDGroup
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Group
+       }
+
+       [DataContract]
+       public enum EDark
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Half,
+               [EnumMember]
+               Full
+       }
+
+       /// <summary>
+       /// 演奏用のenum。ここを修正するときは、次に出てくる EパッドFlag もセットで修正すること。
+       /// </summary>
+       [DataContract]
+       public enum EPad
+       {
+               [EnumMember]
+               Min = 0,
+               [EnumMember]
+               DrumsPadMin = 0,
+               [EnumMember]
+               HH = 0,
+               [EnumMember]
+               SD = 1,
+               [EnumMember]
+               BD = 2,
+               [EnumMember]
+               HT = 3,
+               [EnumMember]
+               LT = 4,
+               [EnumMember]
+               CY = 5,
+               [EnumMember]
+               FT = 6,
+               [EnumMember]
+               HHO = 7,
+               [EnumMember]
+               RD = 8,
+               [EnumMember]
+               LC = 9,
+               // #27029 2012.1.4 from
+               [EnumMember]
+               HP = 10,
+               [EnumMember]
+               DrumsPadMax = 11,
+
+               [EnumMember]
+               GuitarPadMin = 11,
+               [EnumMember]
+               GtR = 11,
+               [EnumMember]
+               GtG = 12,
+               [EnumMember]
+               GtB = 13,
+               [EnumMember]
+               GtPick = 14,
+               [EnumMember]
+               GtWail = 15,
+               [EnumMember]
+               GtCancel = 16,
+               [EnumMember]
+               GtDecide = 17,
+               [EnumMember]
+               GuitarPadMax = 18,
+
+               [EnumMember]
+               BassPadMin = 18,
+               [EnumMember]
+               BsR = 18,
+               [EnumMember]
+               BsG = 19,
+               [EnumMember]
+               BsB = 20,
+               [EnumMember]
+               BsPick = 21,
+               [EnumMember]
+               BsWail = 22,
+               [EnumMember]
+               BsCancel = 23,
+               [EnumMember]
+               BsDecide = 24,
+               [EnumMember]
+               BassPadMax = 25,
+
+               [EnumMember]
+               Capture = 25,
+               [EnumMember]
+               Max = 26,
+               [EnumMember]
+               Unknown,
+       }
+
+
+       [DataContract]
+       public enum EDamage
+       {
+               [EnumMember]
+               Easy,
+               [EnumMember]
+               Normal,
+               [EnumMember]
+               Hard
+       }
+
+       [DataContract]
+       public enum ERandom
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Random,
+               [EnumMember]
+               Super,
+               [EnumMember]
+               Hyper
+       }
+
+       [DataContract]
+       public enum EPart      // ここを修正するときは、セットで次の EKeyConfigPart も修正すること。
+       {
+               [EnumMember]
+               Drums,
+               [EnumMember]
+               Guitar,
+               [EnumMember]
+               Bass,
+               [EnumMember]
+               System,
+               [EnumMember]
+               Unknown,
+       }
+
+       [DataContract]
+       public enum ESoundDeviceTypeForConfig
+       {
+               [EnumMember]
+               DSound,
+               [EnumMember]
+               WASAPI_Exclusive,
+               [EnumMember]
+               WASAPI_Shared,
+               [EnumMember]
+               ASIO,
+       }
+
+       [DataContract]
+       public enum EHitSoundPriority
+       {
+               [EnumMember]
+               Chip,
+               [EnumMember]
+               Pad
+       }
+
+       [DataContract]
+       public enum EInputDevice
+       {
+               [EnumMember]
+               Keyboard,
+               [EnumMember]
+               MIDIIn,
+               [EnumMember]
+               JoyPad,
+               [EnumMember]
+               Mouse,
+               [EnumMember]
+               Unknown
+       }
+
+       [DataContract]
+       public enum EJudgeDisplayPriority
+       {
+               [EnumMember]
+               Under,
+               [EnumMember]
+               Over
+       }
+
+       [DataContract]
+       public enum ELane
+       {
+               [EnumMember]
+               Min = 0,
+               [EnumMember]
+               DrumsLaneMin = 0,
+               [EnumMember]
+               LC = 0,
+               [EnumMember]
+               HH = 1,
+               [EnumMember]
+               SD = 2,
+               [EnumMember]
+               BD = 3,
+               [EnumMember]
+               HT = 4,
+               [EnumMember]
+               LT = 5,
+               [EnumMember]
+               FT = 6,
+               [EnumMember]
+               CY = 7,
+               [EnumMember]
+               DrumsLaneMax = 8,
+               [EnumMember]
+               GuitarLaneMin = 8,
+               [EnumMember]
+               GtR = 8,
+               [EnumMember]
+               GtG = 9,
+               [EnumMember]
+               GtB = 10,
+               [EnumMember]
+               GtW = 11,
+               [EnumMember]
+               GuitarLaneMax = 12,
+               [EnumMember]
+               BassLaneMin = 12,
+               [EnumMember]
+               BsR = 12,
+               [EnumMember]
+               BsG = 13,
+               [EnumMember]
+               BsB = 14,
+               [EnumMember]
+               BsW = 15,
+               [EnumMember]
+               BassLaneMax = 16,
+
+               // 要素数取得のための定義 ("BGM"は含めない)
+               [EnumMember]
+               Max = 16,
+               [EnumMember]
+               BGM = 17,
+       }
+
+       /// <summary>
+       /// 入力ラグ表示タイプ
+       /// </summary>
+       [DataContract]
+       public enum EShowLagType
+       {
+               [EnumMember]
+               Off,            // 全く表示しない
+               [EnumMember]
+               On,             // 判定に依らず全て表示する
+               [EnumMember]
+               UGreat      // GREAT-MISSの時のみ表示する(PERFECT時は表示しない)
+       }
+
+       [DataContract]
+       public enum ESudHidInv
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               Sudden,
+               [EnumMember]
+               Hidden,
+               [EnumMember]
+               SudHid,
+               [EnumMember]
+               SemiInv,
+               [EnumMember]
+               FullInv
+       }
+
+       /// <summary>
+       /// 使用するAUTOゴーストデータの種類 (#35411 chnmr0)
+       /// </summary>
+       [DataContract]
+       public enum EAutoGhostData
+       {
+               // 従来のAUTO
+               [EnumMember]
+               Perfect,
+               // (.score.ini) の LastPlay ゴースト
+               [EnumMember]
+               LastPlay,
+               // (.score.ini) の HiSkill ゴースト
+               [EnumMember]
+               HiSkill,
+               // (.score.ini) の HiScore ゴースト
+               [EnumMember]
+               HiScore,
+               // オンラインゴースト (DTXMOS からプラグインが取得、本体のみでは指定しても無効)
+               [EnumMember]
+               Online
+       }
+
+       /// <summary>
+       /// 使用するターゲットゴーストデータの種類 (#35411 chnmr0)
+       /// ここでNONE以外を指定してかつ、ゴーストが利用可能な場合グラフの目標値に描画される
+       /// NONE の場合従来の動作
+       /// </summary>
+       [DataContract]
+       public enum ETargetGhostData
+       {
+               [EnumMember]
+               None,
+               [EnumMember]
+               Perfect,
+               // (.score.ini) の LastPlay ゴースト
+               [EnumMember]
+               LastPlay,
+               // (.score.ini) の HiSkill ゴースト
+               [EnumMember]
+               HiSkill,
+               // (.score.ini) の HiScore ゴースト
+               [EnumMember]
+               HiScore,
+               // オンラインゴースト (DTXMOS からプラグインが取得、本体のみでは指定しても無効)
+               [EnumMember]
+               Online
+       }
+
+       [DataContract]
+       public enum EThreeState
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               On,
+               [EnumMember]
+               X
+       }
+
+
+       [DataContract]
+       public enum EOptionType
+       {
+               [EnumMember]
+               Normal,
+               [EnumMember]
+               Other
+       }
+
+       [DataContract]
+       public enum EClickType
+       {
+               [EnumMember]
+               Off,
+               [EnumMember]
+               OnBeat,                 // 表拍
+               [EnumMember]
+               OffBeat                 // 裏拍
+//             [EnumMember]
+//             Triplet                 // 3連符
+       }
+
+       [DataContract]
+       public class STPadValue<T>
+       {
+               [DataMember]
+               public T HH;
+               [DataMember]
+               public T SD;
+               [DataMember]
+               public T BD;
+               [DataMember]
+               public T HT;
+               [DataMember]
+               public T LT;
+               [DataMember]
+               public T CY;
+               [DataMember]
+               public T FT;
+               [DataMember]
+               public T HHO;
+               [DataMember]
+               public T RD;
+               [DataMember]
+               public T LC;
+               [DataMember]
+               public T HP;
+
+               [DataMember]
+               public T GtR;
+               [DataMember]
+               public T GtG;
+               [DataMember]
+               public T GtB;
+               [DataMember]
+               public T GtPick;
+               [DataMember]
+               public T GtWail;
+               [DataMember]
+               public T GtCancel;
+               [DataMember]
+               public T GtDecide;
+
+               [DataMember]
+               public T BsR;
+               [DataMember]
+               public T BsG;
+               [DataMember]
+               public T BsB;
+               [DataMember]
+               public T BsPick;
+               [DataMember]
+               public T BsWail;
+               [DataMember]
+               public T BsCancel;
+               [DataMember]
+               public T BsDecide;
+
+               [DataMember]
+               public T Capture;
+
+               public T this[EPad e]
+               {
+                       get
+                       {
+                               switch (e)
+                               {
+                                       case EPad.HH: return HH;
+                                       case EPad.SD: return SD;
+                                       case EPad.BD: return BD;
+                                       case EPad.HT: return HT;
+                                       case EPad.LT: return LT;
+                                       case EPad.CY: return CY;
+                                       case EPad.FT: return FT;
+                                       case EPad.HHO: return HHO;
+                                       case EPad.RD: return RD;
+                                       case EPad.LC: return LC;
+                                       case EPad.HP: return HP;
+                                       case EPad.GtR: return GtR;
+                                       case EPad.GtG: return GtG;
+                                       case EPad.GtB: return GtB;
+                                       case EPad.GtPick: return GtPick;
+                                       case EPad.GtWail: return GtWail;
+                                       case EPad.GtCancel: return GtCancel;
+                                       case EPad.GtDecide: return GtDecide;
+                                       case EPad.BsR: return BsR;
+                                       case EPad.BsG: return BsG;
+                                       case EPad.BsB: return BsB;
+                                       case EPad.BsPick: return BsPick;
+                                       case EPad.BsWail: return BsWail;
+                                       case EPad.BsCancel: return BsCancel;
+                                       case EPad.BsDecide: return BsDecide;
+                                       case EPad.Capture: return Capture;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+
+                       set
+                       {
+                               switch (e)
+                               {
+                                       case EPad.HH: HH = value; return;
+                                       case EPad.SD: SD = value; return;
+                                       case EPad.BD: BD = value; return;
+                                       case EPad.HT: HT = value; return;
+                                       case EPad.LT: LT = value; return;
+                                       case EPad.CY: CY = value; return;
+                                       case EPad.FT: FT = value; return;
+                                       case EPad.HHO: HHO = value; return;
+                                       case EPad.RD: RD = value; return;
+                                       case EPad.LC: LC = value; return;
+                                       case EPad.HP: HP = value; return;
+                                       case EPad.GtR: GtR = value; return;
+                                       case EPad.GtG: GtG = value; return;
+                                       case EPad.GtB: GtB = value; return;
+                                       case EPad.GtPick: GtPick = value; return;
+                                       case EPad.GtWail: GtWail = value; return;
+                                       case EPad.GtCancel: GtCancel = value; return;
+                                       case EPad.GtDecide: GtDecide = value; return;
+                                       case EPad.BsR: BsR = value; return;
+                                       case EPad.BsG: BsG = value; return;
+                                       case EPad.BsB: BsB = value; return;
+                                       case EPad.BsPick: BsPick = value; return;
+                                       case EPad.BsWail: BsWail = value; return;
+                                       case EPad.BsCancel: BsCancel = value; return;
+                                       case EPad.BsDecide: BsDecide = value; return;
+                                       case EPad.Capture: Capture = value; return;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+               }
+       }
+
+
+       [DataContract]
+       public class STJudgeValue<T>
+       {
+               [DataMember]
+               public T Perfect;
+               [DataMember]
+               public T Great;
+               [DataMember]
+               public T Good;
+               [DataMember]
+               public T Poor;
+
+               public T this[EJudge index]
+               {
+                       get
+                       {
+                               switch (index)
+                               {
+                                       case EJudge.Perfect: return this.Perfect;
+                                       case EJudge.Great: return this.Great;
+                                       case EJudge.Good: return this.Good;
+                                       case EJudge.Poor: return this.Poor;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+                       set
+                       {
+                               switch (index)
+                               {
+                                       case EJudge.Perfect: this.Perfect = value; return;
+                                       case EJudge.Great: this.Great = value; return;
+                                       case EJudge.Good: this.Good = value; return;
+                                       case EJudge.Poor: this.Poor = value; return;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+               }
+       }
+
+       /// <summary>
+       /// Drum/Guitar/Bass の値を扱う汎用の構造体。
+       /// indexはE楽器パートと一致させること
+       /// </summary>
+       /// <typeparam name="T">値の型。</typeparam>
+       [Serializable]
+       [StructLayout(LayoutKind.Sequential)]
+       [DataContract]
+       public struct STDGBSValue<T>
+       {
+               [DataMember]
+               public T Drums;
+               [DataMember]
+               public T Guitar;
+               [DataMember]
+               public T Bass;
+               [DataMember]
+               public T System;
+               [DataMember]
+               public T Unknown;
+
+               public T this[EPart index]
+               {
+                       get
+                       {
+                               switch (index)
+                               {
+                                       case EPart.Drums: return Drums;
+                                       case EPart.Guitar: return Guitar;
+                                       case EPart.Bass: return Bass;
+                                       case EPart.System: return System;
+                                       case EPart.Unknown: return Unknown;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+                       set
+                       {
+                               switch (index)
+                               {
+                                       case EPart.Drums: Drums = value; return;
+                                       case EPart.Guitar: Guitar = value; return;
+                                       case EPart.Bass: Bass = value; return;
+                                       case EPart.System: System = value; return;
+                                       case EPart.Unknown: Unknown = value; return;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+               }
+       }
+
+       [DataContract]
+       public class STLaneValue<T>
+       {
+               public static ELane DrumsLane(EChannel x)
+               {
+                       switch (x)
+                       {
+                               case EChannel.HiHatClose: return ELane.HH;
+                               case EChannel.HiHatOpen: return ELane.HH;
+                               case EChannel.Snare: return ELane.SD;
+                               case EChannel.BassDrum: return ELane.BD;
+                               case EChannel.HighTom: return ELane.HT;
+                               case EChannel.LowTom: return ELane.LT;
+                               case EChannel.FloorTom: return ELane.FT;
+                               case EChannel.Cymbal: return ELane.CY;
+                               case EChannel.LeftCymbal: return ELane.LC;
+                               case EChannel.RideCymbal: return ELane.CY;
+                       }
+                       throw new IndexOutOfRangeException("Drums Index is out of range");
+               }
+
+               [DataMember]
+               public T LC;
+               [DataMember]
+               public T HH;
+               [DataMember]
+               public T SD;
+               [DataMember]
+               public T BD;
+               [DataMember]
+               public T HT;
+               [DataMember]
+               public T LT;
+               [DataMember]
+               public T FT;
+               [DataMember]
+               public T CY;
+               [DataMember]
+               public T GtR;
+               [DataMember]
+               public T GtG;
+               [DataMember]
+               public T GtB;
+               [DataMember]
+               public T GtW;
+               [DataMember]
+               public T BsR;
+               [DataMember]
+               public T BsG;
+               [DataMember]
+               public T BsB;
+               [DataMember]
+               public T BsW;
+
+               public T this[ELane index]
+               {
+                       get
+                       {
+                               switch (index)
+                               {
+                                       case ELane.LC: return LC;
+                                       case ELane.HH: return HH;
+                                       case ELane.SD: return SD;
+                                       case ELane.BD: return BD;
+                                       case ELane.HT: return HT;
+                                       case ELane.LT: return LT;
+                                       case ELane.FT: return FT;
+                                       case ELane.CY: return CY;
+                                       case ELane.GtR: return GtR;
+                                       case ELane.GtG: return GtG;
+                                       case ELane.GtB: return GtB;
+                                       case ELane.GtW: return GtW;
+                                       case ELane.BsR: return BsR;
+                                       case ELane.BsG: return BsG;
+                                       case ELane.BsB: return BsB;
+                                       case ELane.BsW: return BsW;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+                       set
+                       {
+                               switch (index)
+                               {
+                                       case ELane.LC: LC = value; return;
+                                       case ELane.HH: HH = value; return;
+                                       case ELane.SD: SD = value; return;
+                                       case ELane.BD: BD = value; return;
+                                       case ELane.HT: HT = value; return;
+                                       case ELane.LT: LT = value; return;
+                                       case ELane.FT: FT = value; return;
+                                       case ELane.CY: CY = value; return;
+                                       case ELane.GtR: GtR = value; return;
+                                       case ELane.GtG: GtG = value; return;
+                                       case ELane.GtB: GtB = value; return;
+                                       case ELane.GtW: GtW = value; return;
+                                       case ELane.BsR: BsR = value; return;
+                                       case ELane.BsG: BsG = value; return;
+                                       case ELane.BsB: BsB = value; return;
+                                       case ELane.BsW: BsW = value; return;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+               }
+       }
+
+       [DataContract]
+       public struct STInstValue<T>
+       {
+               [DataMember]
+               public T Both;
+               [DataMember]
+               public T DrOnly;
+               [DataMember]
+               public T GBOnly;
+
+               public T this[EActiveInstrument inst]
+               {
+                       get
+                       {
+                               switch (inst)
+                               {
+                                       case EActiveInstrument.Both: return Both;
+                                       case EActiveInstrument.DrOnly: return DrOnly;
+                                       case EActiveInstrument.GBOnly: return GBOnly;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+                       set
+                       {
+                               switch (inst)
+                               {
+                                       case EActiveInstrument.Both: Both = value; return;
+                                       case EActiveInstrument.DrOnly: DrOnly = value; return;
+                                       case EActiveInstrument.GBOnly: GBOnly = value; return;
+                               }
+                               throw new IndexOutOfRangeException();
+                       }
+               }
+       }
+
+
+       [DataContract]
+       public class CKeyAssign
+       {
+               [DataMember]
+               public EInputDevice InputDevice;
+               [DataMember]
+               public int ID;
+               [DataMember]
+               public int Code;
+               public CKeyAssign(EInputDevice DeviceType, int nID, int nCode)
+               {
+                       this.InputDevice = DeviceType;
+                       this.ID = nID;
+                       this.Code = nCode;
+               }
+       }
+
+       public enum EOptionPanelDirection
+       {
+               Horizontal,
+               Vertical
+       }
+
+       public static class EnumConverter
+       {
+               public static ELane LaneFromPad(EPad t)
+               {
+                       switch (t)
+                       {
+                               case EPad.HH: return ELane.HH;
+                               case EPad.SD: return ELane.SD;
+                               case EPad.BD: return ELane.BD;
+                               case EPad.HT: return ELane.HT;
+                               case EPad.LT: return ELane.LT;
+                               case EPad.CY: return ELane.CY;
+                               case EPad.FT: return ELane.FT;
+                               case EPad.HHO: return ELane.HH;
+                               case EPad.RD: return ELane.CY;
+                               case EPad.LC: return ELane.LC;
+                               case EPad.GtR: return ELane.GtR;
+                               case EPad.GtG: return ELane.GtG;
+                               case EPad.GtB: return ELane.GtB;
+                               case EPad.GtWail: return ELane.GtW;
+                               case EPad.BsR: return ELane.BsR;
+                               case EPad.BsG: return ELane.BsG;
+                               case EPad.BsB: return ELane.BsB;
+                               case EPad.BsWail: return ELane.BsW;
+                       }
+                       throw new IndexOutOfRangeException();
+               }
+
+               public static EPad PadFromLane(ELane t)
+               {
+                       switch (t)
+                       {
+                               case ELane.LC: return EPad.LC;
+                               case ELane.HH: return EPad.HH;
+                               case ELane.SD: return EPad.SD;
+                               case ELane.BD: return EPad.BD;
+                               case ELane.HT: return EPad.HT;
+                               case ELane.LT: return EPad.LT;
+                               case ELane.FT: return EPad.FT;
+                               case ELane.CY: return EPad.CY;
+                               case ELane.GtR: return EPad.GtR;
+                               case ELane.GtG: return EPad.GtG;
+                               case ELane.GtB: return EPad.GtB;
+                               case ELane.GtW: return EPad.GtWail;
+                               case ELane.BsR: return EPad.BsR;
+                               case ELane.BsG: return EPad.BsG;
+                               case ELane.BsB: return EPad.BsB;
+                               case ELane.BsW: return EPad.BsWail;
+                       }
+                       throw new IndexOutOfRangeException();
+               }
+
+               /// <summary>
+               /// EChannel -> EPad
+               /// </summary>
+               /// <param name="e">変換する EChannel列挙子。</param>
+               /// <param name="NotDistinguishHH">HHOをパッドHHとして扱いたい場合 true。</param>
+               /// <returns></returns>
+               public static EPad PadFromChannel(EChannel e)
+               {
+                       switch (e)
+                       {
+                               case EChannel.HiHatClose: return EPad.HH;
+                               case EChannel.Snare: return EPad.SD;
+                               case EChannel.BassDrum: return EPad.BD;
+                               case EChannel.LeftBassDrum: return EPad.BD;
+                               case EChannel.HighTom: return EPad.HT;
+                               case EChannel.LowTom: return EPad.LT;
+                               case EChannel.Cymbal: return EPad.CY;
+                               case EChannel.FloorTom: return EPad.FT;
+                               case EChannel.HiHatOpen: return EPad.HHO;
+                               case EChannel.RideCymbal: return EPad.RD;
+                               case EChannel.LeftCymbal: return EPad.LC;
+                               case EChannel.LeftPedal: return EPad.HP;
+                       }
+                       throw new IndexOutOfRangeException();
+               }
+
+               public static ELane LaneFromChannel(EChannel e)
+               {
+                       switch (e)
+                       {
+                               case EChannel.HiHatClose: return ELane.HH;
+                               case EChannel.Snare: return ELane.SD;
+                               case EChannel.BassDrum: return ELane.BD;
+                               case EChannel.LeftBassDrum: return ELane.BD;
+                               case EChannel.HighTom: return ELane.HT;
+                               case EChannel.LowTom: return ELane.LT;
+                               case EChannel.Cymbal: return ELane.CY;
+                               case EChannel.FloorTom: return ELane.FT;
+                               case EChannel.HiHatOpen: return ELane.HH;
+                               case EChannel.RideCymbal: return ELane.CY;
+                               case EChannel.LeftCymbal: return ELane.LC;
+                               //case EChannel.LeftPedal: return ELane.HH;             // LPは仮にHHに落とし込む 後日、CDTXInputで別Laneに割り振るようにした後、このcaseは削除する
+                       }
+                       throw new IndexOutOfRangeException();
+               }
+
+               public static EChannel ChannelFromPad(EPad pad)
+               {
+                       /*
+                       EChannel.HiHatClose, 0
+                                               EChannel.Snare, 1 
+                                               EChannel.BassDrum, 2
+                                               EChannel.HighTom, 3 
+                                               EChannel.LowTom,4 
+                                               EChannel.FloorTom,5
+                                               EChannel.Cymbal,6
+                                               EChannel.HiHatOpen,7
+                                               EChannel.RideCymbal,8
+                                               EChannel.LeftCymbal, 9
+                                               */
+                       switch (pad)
+                       {
+                               case EPad.HH: return EChannel.HiHatClose;
+                               case EPad.HHO: return EChannel.HiHatOpen;
+                               case EPad.BD: return EChannel.BassDrum;
+                               case EPad.SD: return EChannel.Snare;
+                               case EPad.HT: return EChannel.HighTom;
+                               case EPad.LT: return EChannel.LowTom;
+                               case EPad.FT: return EChannel.FloorTom;
+                               case EPad.CY: return EChannel.Cymbal;
+                               case EPad.LC: return EChannel.LeftCymbal;
+                               case EPad.RD: return EChannel.RideCymbal;
+                               case EPad.HP: return EChannel.LeftPedal;
+                       }
+                       throw new NotImplementedException();
+               }
+       }
+}