OSDN Git Service

#XXXXX BASS.NETのWASAPI周りのフラグ設定を若干変更
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 5 Jul 2016 16:01:14 +0000 (16:01 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 5 Jul 2016 16:01:14 +0000 (16:01 +0000)
#35906 言語情報の分離を実施。
言語情報は、DTXManiaGR.exeと同じフォルダにある、resources.csvファイルに格納。(同xlsxファイルは、元データ)
現状、ja-JP環境なら日本語が、そうでなければdefault(=en-US)が固定的に使われる。

以下の制限あり:
 * まだ抜けがあると思う
 * CONFIGの選択肢で多言語化していないものがあると思う
 * CONFIG/Systemにある言語切り替えは、まだ機能しない

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@995 16f42ceb-6dc6-49c8-ba94-f2d53467949d

16 files changed:
DTXManiaプロジェクト/DTXManiaソリューション.sln
DTXManiaプロジェクト/DTXManiaプロジェクト.csproj
DTXManiaプロジェクト/Properties/AssemblyInfo.cs
DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs
DTXManiaプロジェクト/コード/ステージ/02.タイトル/CStageタイトル.cs
DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs
DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CConfigXml.cs
DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/COption.cs
DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
DTXManiaプロジェクト/コード/全体/CDTXMania.cs
FDK17プロジェクト/コード/03.サウンド/CSoundDeviceWASAPI.cs
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll
実行時フォルダ/resources.csv [new file with mode: 0644]
実行時フォルダ/resources.xlsx [new file with mode: 0644]

index 73320c7..2efb3e5 100644 (file)
@@ -1,7 +1,7 @@
 \r
 Microsoft Visual Studio Solution File, Format Version 12.00\r
 # Visual Studio 2013\r
-VisualStudioVersion = 12.0.31101.0\r
+VisualStudioVersion = 12.0.40629.0\r
 MinimumVisualStudioVersion = 10.0.40219.1\r
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DTXManiaプロジェクト", "DTXManiaプロジェクト.csproj", "{81BEC512-8074-4BD1-8A3C-AC73BC7BF846}"\r
        ProjectSection(ProjectDependencies) = postProject\r
index 064a84a..621693f 100644 (file)
@@ -85,6 +85,7 @@
     <EmbeddedResource Include="Properties\Resources.ja-JP.resx">\r
       <SubType>Designer</SubType>\r
     </EmbeddedResource>\r
+    <None Include="packages.config" />\r
     <None Include="コード\ステージ\04.コンフィグ\DeletedCode.cs" />\r
     <Compile Include="コード\ステージ\04.コンフィグ\CConfigXml.cs" />\r
     <Compile Include="コード\ステージ\04.コンフィグ\COption.cs" />\r
@@ -92,6 +93,7 @@
     <Compile Include="コード\ステージ\07.演奏\CStage演奏画面共通_描画.cs" />\r
     <Compile Include="コード\ステージ\07.演奏\TypesForPlayStage.cs" />\r
     <Compile Include="コード\ステージ\CActDigit.cs" />\r
+    <Compile Include="コード\全体\CResources.cs" />\r
     <Compile Include="コード\全体\Coordinates.cs" />\r
     <Compile Include="コード\全体\STPlugin.cs" />\r
     <Compile Include="コード\全体\TextureFactory.cs" />\r
index b1fefb5..7cd4617 100644 (file)
@@ -33,8 +33,8 @@ using System.Resources;
 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \r
 // 既定値にすることができます:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion( "104.0.0.0" )]\r
-[assembly: AssemblyFileVersion( "104.0.0.0" )]\r
+[assembly: AssemblyVersion( "105.0.0.0" )]\r
+[assembly: AssemblyFileVersion( "105.0.0.0" )]\r
 [assembly: NeutralResourcesLanguageAttribute("ja-JP")]\r
 \r
 // このアセンブリは「ライブラリ」である(難読化ツールへの指示)。\r
index 1a26b44..05d3087 100644 (file)
@@ -511,10 +511,11 @@ namespace DTXMania
                                                if (nCurrentTime > wc.n再生開始時刻[i])\r
                                                {\r
                                                        long nAbsTimeFromStartPlaying = nCurrentTime - wc.n再生開始時刻[i];\r
-                                                       //Trace.TraceInformation( "再生位置自動補正: {0}, seek先={1}ms, 全音長={2}ms",\r
-                                                       //    Path.GetFileName( wc.rSound[ 0 ].strファイル名 ),\r
-                                                       //    nAbsTimeFromStartPlaying,\r
-                                                       //    wc.rSound[ 0 ].n総演奏時間ms\r
+                                                       //Trace.TraceInformation( "再生位置自動補正: {0}, 実タイマ値={1}, seek先={2}ms, 全音長={3}ms",\r
+                                                       //      Path.GetFileName( wc.rSound[ 0 ].strファイル名 ),\r
+                                                       //      nCurrentTime,\r
+                                                       //      nAbsTimeFromStartPlaying,\r
+                                                       //      wc.rSound[ 0 ].n総演奏時間ms\r
                                                        //);\r
                                                        // wc.rSound[ i ].t再生位置を変更する( wc.rSound[ i ].t時刻から位置を返す( nAbsTimeFromStartPlaying ) );\r
                                                        wc.rSound[i].t再生位置を変更する(nAbsTimeFromStartPlaying);  // WASAPI/ASIO用\r
index 61aa138..7c1f52f 100644 (file)
@@ -80,40 +80,10 @@ namespace DTXMania
                                prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), 36);\r
                                //prvFont = new CPrivateFont( new FontFamily("MS UI Gothic"), 36, FontStyle.Bold );\r
 \r
-\r
-                               System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture( "ja-JP" );\r
-                                       //System.Threading.Thread.CurrentThread.CurrentCulture;   \r
-                               // ResourceManagerを取得する\r
-                               System.Reflection.Assembly asm;\r
-                               asm = System.Reflection.Assembly.GetExecutingAssembly();\r
-                               //asm = System.Reflection.Assembly.Load( "DTXManiaGR" );\r
-\r
-                               //または次のようにもできる\r
-                               //asm = this.GetType().Assembly;\r
-\r
-                               System.Resources.ResourceManager resource =\r
-                                       //new ResourceManager( "DTXManiaGR", this.GetType().Assembly );\r
-                                       DTXMania.Properties.Resources.ResourceManager;\r
-                                       //new ResourceManager( typeof(CStageタイトル));\r
-                               CultureInfo culture = CultureInfo.CreateSpecificCulture( "ja-JP" );\r
-\r
-                               //ResourceManager resource = new ResourceManager( "DTXMania.DTXManiaGR", asm );\r
-                               //ResourceManager resource = new ResourceManager( "DTXManiaGR", asm );\r
-\r
-                               //ResourceSet rs = resource.GetResourceSet( CultureInfo.CreateSpecificCulture( "ja-JP" ),\r
-                               //                                         true, false );\r
-                               //if (rs == null)\r
-                               //{\r
-                               //      Debug.WriteLine( "No ja-JP resource set" );\r
-                               //}\r
-\r
-\r
-//Debug.WriteLine( resource.GetString( "strTitleStart", new System.Globalization.CultureInfo( "ja-JP" ) ) );\r
-                               //string strTitleStart = rs.GetString( "strTitleStart" );\r
-                               string strTitleStart = resource.GetString( "strTitleStart", culture );\r
-                               Debug.WriteLine( "{0}: {1}", culture.Name, strTitleStart );\r
-       \r
-                               string[] menuStr = { strTitleStart, "CONFIGURATION", "EXIT" };\r
+                               string strTitleStart  = CDTXMania.Instance.Resources.Title( "strTitleStart" );\r
+                               string strTitleConfig = CDTXMania.Instance.Resources.Title( "strTitleConfiguration" );\r
+                               string strTitleExit   = CDTXMania.Instance.Resources.Title( "strTitleExit" );\r
+                               string[] menuStr = { strTitleStart, strTitleConfig, strTitleExit };\r
                                this.txMenuItem = new CTexture[menuStr.Length];\r
                                this.stMenuItem = new STMenuItem[menuStr.Length];\r
 \r
index 496c24a..05e7aab 100644 (file)
@@ -228,6 +228,8 @@ namespace DTXMania
                                return opt;\r
                        };\r
 \r
+                       CResources cr = CDTXMania.Instance.Resources;\r
+\r
                        if (eMenu == Eメニュー種別.DisplaySystem)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.System);\r
@@ -312,22 +314,22 @@ namespace DTXMania
                        else if (eMenu == Eメニュー種別.KeyAssignSystem)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.System);\r
-                               list項目リスト.Add(PadNotifier(EPad.Capture, "Capture", Properties.Resources.strCfgKeyAssignキャプチャ説明));\r
+                               list項目リスト.Add(PadNotifier(EPad.Capture, cr.Title("strCfgKeyAssignCapture"), cr.Value("strCfgKeyAssignCapture") ));\r
                        }\r
                        else if (eMenu == Eメニュー種別.KeyAssignDrums)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.Drums);\r
-                               list項目リスト.Add(PadNotifier(EPad.LC, "LeftCymbal", Properties.Resources.strCfgKeyAssignLC));\r
-                               list項目リスト.Add(PadNotifier(EPad.HH, "HiHat(Close)", Properties.Resources.strCfgKeyAssignHH));\r
-                               list項目リスト.Add(PadNotifier(EPad.HHO, "HiHat(Open)", Properties.Resources.strCfgKeyAssignHHO));\r
-                               list項目リスト.Add(PadNotifier(EPad.SD, "Snare", Properties.Resources.strCfgKeyAssignSD));\r
-                               list項目リスト.Add(PadNotifier(EPad.BD, "Kick", Properties.Resources.strCfgKeyAssignBD));\r
-                               list項目リスト.Add(PadNotifier(EPad.HT, "HighTom", Properties.Resources.strCfgKeyAssignHT));\r
-                               list項目リスト.Add(PadNotifier(EPad.LT, "LowTom", Properties.Resources.strCfgKeyAssignLT));\r
-                               list項目リスト.Add(PadNotifier(EPad.FT, "FloorTom", Properties.Resources.strCfgKeyAssignFT));\r
-                               list項目リスト.Add(PadNotifier(EPad.CY, "Cymbal", Properties.Resources.strCfgKeyAssignCY));\r
-                               list項目リスト.Add(PadNotifier(EPad.RD, "RideCymbal", Properties.Resources.strCfgKeyAssignRD));\r
-                               list項目リスト.Add(PadNotifier(EPad.HP, "HiHatPedal", Properties.Resources.strCfgKeyAssignHP));\r
+                               list項目リスト.Add(PadNotifier(EPad.LC, cr.Title("strCfgKeyAssignLC"), cr.Value("strCfgKeyAssignLC") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.HH, cr.Title("strCfgKeyAssignHH"), cr.Value("strCfgKeyAssignHH") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.HHO,cr.Title("strCfgKeyAssignHHO"), cr.Value("strCfgKeyAssignHHO") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.SD, cr.Title("strCfgKeyAssignSD"), cr.Value("strCfgKeyAssignSD") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BD, cr.Title("strCfgKeyAssignBD"), cr.Value("strCfgKeyAssignBD") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.HT, cr.Title("strCfgKeyAssignHT"), cr.Value("strCfgKeyAssignHT") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.LT, cr.Title("strCfgKeyAssignLT"), cr.Value("strCfgKeyAssignLT") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.FT, cr.Title("strCfgKeyAssignFT"), cr.Value("strCfgKeyAssignFT") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.CY, cr.Title("strCfgKeyAssignCY"), cr.Value("strCfgKeyAssignCY") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.RD, cr.Title("strCfgKeyAssignRD"), cr.Value("strCfgKeyAssignRD") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.HP, cr.Title("strCfgKeyAssignHP"), cr.Value("strCfgKeyAssignHP") ));\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);\r
@@ -338,32 +340,36 @@ namespace DTXMania
                        else if (eMenu == Eメニュー種別.KeyAssignGuitar)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.Guitar);\r
-                               list項目リスト.Add(PadNotifier(EPad.GtR, "R", Properties.Resources.strCfgKeyAssignGtR));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtG, "G", Properties.Resources.strCfgKeyAssignGtG));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtB, "B", Properties.Resources.strCfgKeyAssignGtB));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtPick, "Pick", Properties.Resources.strCfgKeyAssignGtPick));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtWail, "Wailing", Properties.Resources.strCfgKeyAssignGtWailing));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtDecide, "Decide", Properties.Resources.strCfgKeyAssignGtDecide));\r
-                               list項目リスト.Add(PadNotifier(EPad.GtCancel, "Cancel", Properties.Resources.strCfgKeyAssignGtCancel));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtR, cr.Title("strCfgKeyAssignGtR"), cr.Value("strCfgKeyAssignGtR") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtG, cr.Title("strCfgKeyAssignGtG"), cr.Value("strCfgKeyAssignGtG") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtB, cr.Title("strCfgKeyAssignGtB"), cr.Value("strCfgKeyAssignGtB") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Title("strCfgKeyAssignGtPick"), cr.Value("strCfgKeyAssignGtPick") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Title("strCfgKeyAssignGtWailing"), cr.Value("strCfgKeyAssignGtWailing") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Title("strCfgKeyAssignGtDecide"), cr.Value("strCfgKeyAssignGtDecide") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Title("strCfgKeyAssignGtCancel"), cr.Value("strCfgKeyAssignGtCancel") ));\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);\r
                        }\r
                        else if (eMenu == Eメニュー種別.KeyAssignBass)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.Bass);\r
-                               list項目リスト.Add(PadNotifier(EPad.BsR, "R", Properties.Resources.strCfgKeyAssignBsR));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsG, "G", Properties.Resources.strCfgKeyAssignBsG));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsB, "B", Properties.Resources.strCfgKeyAssignBsB));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsPick, "Pick", Properties.Resources.strCfgKeyAssignBsPick));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsWail, "Wailing", Properties.Resources.strCfgKeyAssignBsWailing));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsDecide, "Decide", Properties.Resources.strCfgKeyAssignBsDecide));\r
-                               list項目リスト.Add(PadNotifier(EPad.BsCancel, "Cancel", Properties.Resources.strCfgKeyAssignBsCancel));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsR, cr.Title("strCfgKeyAssignBsR"), cr.Value("strCfgKeyAssignBsR") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsG, cr.Title("strCfgKeyAssignBsG"), cr.Value("strCfgKeyAssignBsG") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsB, cr.Title("strCfgKeyAssignBsB"), cr.Value("strCfgKeyAssignBsB") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Title("strCfgKeyAssignBsPick"), cr.Value("strCfgKeyAssignBsPick") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Title("strCfgKeyAssignBsWailing"), cr.Value("strCfgKeyAssignBsWailing") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Title("strCfgKeyAssignBsDecide"), cr.Value("strCfgKeyAssignBsDecide") ));\r
+                               list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Title("strCfgKeyAssignBsCancel"), cr.Value("strCfgKeyAssignBsCancel") ));\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);\r
                        }\r
                        else if (eMenu == Eメニュー種別.System)\r
                        {\r
                                list項目リスト.Add(ReturnToMenu.System);\r
+                               COptionStringList lang = new COptionStringList("default");\r
+                               lang.Initialize(cr.Title("strCfgLanguage"), cr.Value("strCfgLanguage"), cr.LanguageList );\r
+                               list項目リスト.Add( lang );\r
+\r
                                COptionString enumsongs = new COptionString("");\r
-                               enumsongs.Initialize("EnumerateSongs", Properties.Resources.strCfgSysEnumSongs);\r
+                               enumsongs.Initialize( cr.Title("strCfgSysEnumSongs"), cr.Value("strCfgSysEnumSongs") );\r
                                list項目リスト.Add(enumsongs);\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);\r
                                list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);\r
@@ -416,7 +422,7 @@ namespace DTXMania
                        {\r
                                list項目リスト.Add(ReturnToMenu.Drums);\r
                                COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);\r
-                               AllAuto.Initialize("AllAuto", Properties.Resources.strCfgDrAllAuto, typeof(EThreeState));\r
+                               AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));\r
                                AllAuto.OnEnterDelegate = () =>\r
                                {\r
                                        CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, AllAuto);\r
@@ -447,7 +453,7 @@ namespace DTXMania
                        {\r
                                list項目リスト.Add(ReturnToMenu.Guitar);\r
                                COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);\r
-                               AllAuto.Initialize("AllAuto", Properties.Resources.strCfgDrAllAuto, typeof(EThreeState));\r
+                               AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));\r
                                AllAuto.OnEnterDelegate = () =>\r
                                {\r
                                        CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Guitar, AllAuto);\r
@@ -469,7 +475,7 @@ namespace DTXMania
                        {\r
                                list項目リスト.Add(ReturnToMenu.Bass);\r
                                COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);\r
-                               AllAuto.Initialize("AllAuto", Properties.Resources.strCfgDrAllAuto, typeof(EThreeState));\r
+                               AllAuto.Initialize( cr.Title("strCfgDrAllAuto"), cr.Value("strCfgDrAllAuto"), typeof(EThreeState));\r
                                AllAuto.OnEnterDelegate = () =>\r
                                {\r
                                        CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Bass, AllAuto);\r
@@ -545,11 +551,13 @@ namespace DTXMania
                                DisplayMenu = new STDGBSValue<COptionLabel>();\r
                                KeyAssignMenu = new STDGBSValue<COptionLabel>();\r
                                ReturnToMenu = new STDGBSValue<COptionLabel>();\r
+\r
+                               CResources cr = CDTXMania.Instance.Resources;\r
                                for (EPart i = EPart.Drums; i <= EPart.System; ++i)\r
                                {\r
-                                       DisplayMenu[i] = new COptionLabel("Display Options", "");\r
-                                       KeyAssignMenu[i] = new COptionLabel("Input Options", "");\r
-                                       ReturnToMenu[i] = new COptionLabel("<< Return to Menu", "");\r
+                                       DisplayMenu[i] = new COptionLabel( cr.Title("strCfgDisplayOption"), cr.Value("strCfgDisplayOption") );\r
+                                       KeyAssignMenu[i] = new COptionLabel( cr.Title("strCfgInputOption"), cr.Value("strCfgInputOption") );\r
+                                       ReturnToMenu[i] = new COptionLabel( cr.Title("strCfgReturnToMenu"), cr.Value("strCfgReturnToMenu") );\r
                                }\r
 \r
                                DisplayMenu.Drums.OnEnterDelegate = () =>\r
index e0f4480..4c891de 100644 (file)
@@ -150,7 +150,10 @@ namespace DTXMania
                [DataMember( Order = 105 )]\r
                // #36261 2016.4.27 yyagi WASAPI動作をevent drivenにするかどうか\r
                public COptionBool bEventDrivenWASAPI;\r
-               \r
+               [DataMember( Order = 105 )]\r
+               // 言語設定\r
+               public COptionStringList strLanguageList;\r
+               public COptionString strLanguage;       \r
 \r
                [DataMember]\r
                public COptionInteger nBGAlpha;\r
@@ -575,6 +578,9 @@ namespace DTXMania
                        string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();\r
                        strASIODevice = new COptionStringList(asiodevs.Length > 0 ? asiodevs[0] : null);\r
 \r
+                       strLanguage = new COptionString( "" );          // "default"でなく"" にすること。そうすることで、Locale情報を使った初期化がなされる。\r
+                       strLanguageList = new COptionStringList("");\r
+\r
 \r
                        cdInstX = new STDGBSValue<STInstValue<COptionInteger>>();\r
                        cdInstX.Drums = new STInstValue<COptionInteger>();\r
@@ -674,52 +680,54 @@ namespace DTXMania
                public void DefaultDeserializer(StreamingContext sc)\r
                {\r
                        // ラベル・説明文・上下限値\r
-                       bFullScreen.Initialize("FullScreen", Properties.Resources.strCfgSysFullScreen);\r
-                       bVSyncWait.Initialize("VSyncWait", Properties.Resources.strCfgSysVSync);\r
-                       bStageFailed.Initialize("StageFailed", Properties.Resources.strCfgSysStageFailed);\r
-                       bFullAVI.Initialize("FullAVI", Properties.Resources.strCfgSysFullAVI);\r
-                       bAVI.Initialize("AVI", Properties.Resources.strCfgSysAVI);\r
-                       bBGA.Initialize("BGA", Properties.Resources.strCfgSysBGA);\r
-                       bLog.Initialize("Log", Properties.Resources.strCfgSysLog);\r
-                       bStoicMode.Initialize("Stoic", Properties.Resources.strCfgSysStoic);\r
-                       bWaveAdjust.Initialize("AdjustWaves", Properties.Resources.strCfgSysAdjustWaves);\r
-                       bBGMPlay.Initialize("BGM", Properties.Resources.strCfgSysBGM);\r
-                       bAudience.Initialize("Audience", Properties.Resources.strCfgSysAudience);\r
-                       bScoreIni.Initialize("SaveRecord", Properties.Resources.strCfgSysSaveScoreIni);\r
-                       bRandSubBox.Initialize("RandSubBox", Properties.Resources.strCfgSysRandSubBox);\r
-                       bAutoPlay.HH.Initialize("HiHat(Close)", Properties.Resources.strCfgDrAutoHHC);\r
-                       bAutoPlay.HHO.Initialize("HiHat(Open)", Properties.Resources.strCfgDrAutoHHO);\r
-                       bAutoPlay.SD.Initialize("Snare", Properties.Resources.strCfgDrAutoSD);\r
-                       bAutoPlay.BD.Initialize("Kick", Properties.Resources.strCfgDrAutoBD);\r
-                       bAutoPlay.HT.Initialize("HighTom", Properties.Resources.strCfgDrAutoHT);\r
-                       bAutoPlay.LT.Initialize("LowTom", Properties.Resources.strCfgDrAutoLT);\r
-                       bAutoPlay.FT.Initialize("FloorTom", Properties.Resources.strCfgDrAutoFT);\r
-                       bAutoPlay.CY.Initialize("Cymbal", Properties.Resources.strCfgAutoCY);\r
-                       bAutoPlay.RD.Initialize("RideCymbal", Properties.Resources.strCfgAutoRD);\r
-                       bAutoPlay.LC.Initialize("LeftCymbal", Properties.Resources.strCfgAutoLCY);\r
-                       bAutoPlay.GtR.Initialize("R", Properties.Resources.strCfgGtAutoR);\r
-                       bAutoPlay.GtG.Initialize("G", Properties.Resources.strCfgGtAutoG);\r
-                       bAutoPlay.GtB.Initialize("B", Properties.Resources.strCfgGtAutoB);\r
-                       bAutoPlay.GtPick.Initialize("Pick", Properties.Resources.strCfgGtAutoPick);\r
-                       bAutoPlay.GtWail.Initialize("Wailing", Properties.Resources.strCfgGtAutoWailing);\r
-                       bAutoPlay.BsR.Initialize("R", Properties.Resources.strCfgBsAutoR);\r
-                       bAutoPlay.BsG.Initialize("G", Properties.Resources.strCfgBsAutoG);\r
-                       bAutoPlay.BsB.Initialize("B", Properties.Resources.strCfgBsAutoB);\r
-                       bAutoPlay.BsPick.Initialize("Pick", Properties.Resources.strCfgBsAutoPick);\r
-                       bAutoPlay.BsWail.Initialize("Wailing", Properties.Resources.strCfgBsAutoWailing);\r
-                       bLoadSoundSpeed.Initialize("SoundLoadLimiter", Properties.Resources.strCfgSysSoundLoadLimiter);\r
-                       bIsAutoResultCapture.Initialize("AutoResultCapture", Properties.Resources.strCfgSysAutoResultCapture);\r
-                       bBufferedInput.Initialize("BufferingInput", Properties.Resources.strCfgSysBufferingInput);\r
-                       bUseBoxDefSkin.Initialize("UseBoxSkin", Properties.Resources.strCfgSysUseBoxDefSkin);\r
-                       bUseOSTimer.Initialize("UseOSTimer", Properties.Resources.strCfgSysUseOSTimer);\r
-                       bTimeStretch.Initialize("TimeStretch", Properties.Resources.strCfgSysTimeStretch);\r
-                       bForceHighPowerPlan.Initialize( "Highpeformance", Properties.Resources.strCfgSysForceHighPowerPlan );\r
-                       bEventDrivenWASAPI.Initialize( "WASAPI Event Driven", Properties.Resources.strCfgSysWASAPIEventDriven );\r
-\r
-                       bCymbalFree.Initialize("CymbalFree", Properties.Resources.strCfgDrCymbalFree);\r
-                       bDrumsHitSound.Initialize("DrumsChipSound", Properties.Resources.strCfgDrChipSound);\r
-                       bFillin.Initialize("Fillin", Properties.Resources.strCfgDrFillin);\r
-                       bTight.Initialize("Tight", Properties.Resources.strCfgDrTight);\r
+                       CResources cr = CDTXMania.Instance.Resources;\r
+                       bFullScreen.Initialize( cr.Title("strCfgSysFullScreen"), cr.Value("strCfgSysFullScreen") );\r
+                       bVSyncWait.Initialize( cr.Title("strCfgSysVSync"), cr.Value("strCfgSysVSync") );\r
+                       bStageFailed.Initialize( cr.Title("strCfgSysStageFailed"), cr.Value("strCfgSysStageFailed") );\r
+                       bFullAVI.Initialize( cr.Title("strCfgSysFullAVI"), cr.Value("strCfgSysFullAVI") );\r
+                       bAVI.Initialize( cr.Title("strCfgSysAVI"), cr.Value("strCfgSysAVI") );\r
+                       bBGA.Initialize( cr.Title("strCfgSysBGA"), cr.Value("strCfgSysBGA" ) );\r
+                       bLog.Initialize( cr.Title("strCfgSysLog"), cr.Value("strCfgSysLog") );\r
+                       bStoicMode.Initialize( cr.Title("strCfgSysStoic"), cr.Value("strCfgSysStoic") );\r
+                       bWaveAdjust.Initialize( cr.Title("strCfgSysAdjustWaves"), cr.Value("strCfgSysAdjustWaves") );\r
+                       bBGMPlay.Initialize( cr.Title("strCfgSysBGM"), cr.Value("strCfgSysBGM") );\r
+                       bAudience.Initialize( cr.Title("strCfgSysAudience"), cr.Value("strCfgSysAudience") );\r
+                       bScoreIni.Initialize( cr.Title("strCfgSysSaveScoreIni"), cr.Value("strCfgSysSaveScoreIni") );\r
+                       bRandSubBox.Initialize( cr.Title("strCfgSysRandSubBox"), cr.Value("strCfgSysRandSubBox") );\r
+                       bAutoPlay.HH.Initialize( cr.Title("strCfgDrAutoHHC"), cr.Value("strCfgDrAutoHHC") );\r
+                       bAutoPlay.HHO.Initialize( cr.Title("strCfgDrAutoHHO"), cr.Value("strCfgDrAutoHHO") );\r
+                       bAutoPlay.SD.Initialize( cr.Title("strCfgDrAutoSD"), cr.Value("strCfgDrAutoSD") );\r
+                       bAutoPlay.BD.Initialize( cr.Title("strCfgDrAutoBD"), cr.Value("strCfgDrAutoBD") );\r
+                       bAutoPlay.HT.Initialize( cr.Title("strCfgDrAutoHT"), cr.Value("strCfgDrAutoHT") );\r
+                       bAutoPlay.LT.Initialize( cr.Title("strCfgDrAutoLT"), cr.Value("strCfgDrAutoLT") );\r
+                       bAutoPlay.FT.Initialize( cr.Title("strCfgDrAutoFT"), cr.Value("strCfgDrAutoFT") );\r
+                       bAutoPlay.CY.Initialize( cr.Title("strCfgDrAutoCY"), cr.Value("strCfgDrAutoCY") );\r
+                       bAutoPlay.RD.Initialize( cr.Title("strCfgDrAutoRD"), cr.Value("strCfgDrAutoRD") );\r
+                       bAutoPlay.LC.Initialize( cr.Title("strCfgDrAutoLCY"), cr.Value("strCfgDrAutoLCY") );\r
+                       bAutoPlay.GtR.Initialize( cr.Title( "strCfgGtAutoR" ), cr.Value( "strCfgGtAutoR" ) );\r
+                       bAutoPlay.GtG.Initialize( cr.Title( "strCfgGtAutoG" ), cr.Value( "strCfgGtAutoG" ) );\r
+                       bAutoPlay.GtB.Initialize( cr.Title( "strCfgGtAutoB" ), cr.Value( "strCfgGtAutoB" ) );\r
+                       bAutoPlay.GtPick.Initialize( cr.Title( "strCfgGtAutoPick" ), cr.Value( "strCfgGtAutoPick" ) );\r
+                       bAutoPlay.GtWail.Initialize( cr.Title( "strCfgGtAutoWailing" ), cr.Value( "strCfgGtAutoWailing" ) );\r
+                       bAutoPlay.BsR.Initialize( cr.Title( "strCfgBsAutoR" ), cr.Value( "strCfgBsAutoR" ) );\r
+                       bAutoPlay.BsG.Initialize( cr.Title( "strCfgBsAutoG" ), cr.Value( "strCfgBsAutoG" ) );\r
+                       bAutoPlay.BsB.Initialize( cr.Title( "strCfgBsAutoB" ), cr.Value( "strCfgBsAutoB" ) );\r
+                       bAutoPlay.BsPick.Initialize( cr.Title( "strCfgBsAutoPick" ), cr.Value( "strCfgBsAutoPick" ) );\r
+                       bAutoPlay.BsWail.Initialize( cr.Title( "strCfgBsAutoWailing" ), cr.Value( "strCfgBsAutoWailing" ) );\r
+\r
+                       bLoadSoundSpeed.Initialize( cr.Title("strCfgSysSoundLoadLimiter"), cr.Value("strCfgSysSoundLoadLimiter") );\r
+                       bIsAutoResultCapture.Initialize( cr.Title("strCfgSysAutoResultCapture"), cr.Value("strCfgSysAutoResultCapture") );\r
+                       bBufferedInput.Initialize( cr.Title("strCfgSysBufferingInput"), cr.Value("strCfgSysBufferingInput") );\r
+                       bUseBoxDefSkin.Initialize( cr.Title("strCfgSysUseBoxDefSkin"), cr.Value("strCfgSysUseBoxDefSkin") );\r
+                       bUseOSTimer.Initialize( cr.Title("strCfgSysUseOSTimer"), cr.Value("strCfgSysUseOSTimer") );\r
+                       bTimeStretch.Initialize( cr.Title("strCfgSysTimeStretch"),  cr.Value("strCfgSysTimeStretch") );\r
+                       bForceHighPowerPlan.Initialize( cr.Title("strCfgSysForceHighPowerPlan"), cr.Value("strCfgSysForceHighPowerPlan") );\r
+                       bEventDrivenWASAPI.Initialize( cr.Title("strCfgSysWASAPIEventDriven"), cr.Value("strCfgSysWASAPIEventDriven") );\r
+\r
+                       bCymbalFree.Initialize( cr.Title("strCfgDrCymbalFree"), cr.Value("strCfgDrCymbalFree") );\r
+                       bDrumsHitSound.Initialize( cr.Title("strCfgDrChipSound"), cr.Value("strCfgDrChipSound") );\r
+                       bFillin.Initialize( cr.Title("strCfgDrFillin"), cr.Value("strCfgDrFillin") );\r
+                       bTight.Initialize( cr.Title("strCfgDrTight"), cr.Value("strCfgDrTight") );\r
 \r
                        bItalicFontSongSelect.Initialize("", "");\r
                        bBoldFontSongSelect.Initialize("", "");\r
@@ -734,36 +742,36 @@ namespace DTXMania
                        bIsAllowedDoubleClickFullscreen.Initialize("", "");\r
                        bIsEnabledSystemMenu.Initialize("", "");\r
                        bDynamicBassMixerManagement.Initialize("", "");\r
-                       bDebugInfo.Initialize("DebugInfo", Properties.Resources.strCfgSysDebugInfo);\r
+                       bDebugInfo.Initialize( cr.Title("strCfgSysDebugInfo"), cr.Value("strCfgSysDebugInfo") );\r
 \r
                        // enum\r
-                       nSoundDeviceType.Initialize("SoundDevice", Properties.Resources.strCfgSysSoundDeviceType, typeof(ESoundDeviceTypeForConfig));\r
-                       eDamageLevel.Initialize("DamageLevel", Properties.Resources.strCfgSysDamageLevel, typeof(EDamage));\r
-                       eJudgePriority.Initialize("JudgePriority", Properties.Resources.strCfgSysJudgePriority, typeof(EJudgeDisplayPriority));\r
-                       eCYGroup.Initialize("CY Grouping", Properties.Resources.strCfgDrCYGroup, typeof(ECYGroup));\r
-                       eDark.Initialize("Dark", Properties.Resources.strCfgSysDark, typeof(EDark));\r
-                       eFTGroup.Initialize("FT Grouping", Properties.Resources.strCfgDrFTGroup, typeof(EFTGroup));\r
-                       eHHGroup.Initialize("HH Grouping", Properties.Resources.strCfgDrHHGroup, typeof(EHHGroup));\r
-                       eBDGroup.Initialize("BD Grouping", Properties.Resources.strCfgDrBDGroup, typeof(EBDGroup));\r
+                       nSoundDeviceType.Initialize( cr.Title("strCfgSysSoundDeviceType"), cr.Value("strCfgSysSoundDeviceType"), typeof(ESoundDeviceTypeForConfig));\r
+                       eDamageLevel.Initialize( cr.Title("strCfgSysDamageLevel"), cr.Value("strCfgSysDamageLevel"), typeof(EDamage));\r
+                       eJudgePriority.Initialize( cr.Title("strCfgSysJudgePriority"), cr.Value("strCfgSysJudgePriority"), typeof(EJudgeDisplayPriority));\r
+                       eCYGroup.Initialize( cr.Title("strCfgDrCYGroup"), cr.Value("strCfgDrCYGroup"), typeof(ECYGroup));\r
+                       eDark.Initialize( cr.Title("strCfgSysDark"), cr.Value("strCfgSysDark"), typeof(EDark));\r
+                       eFTGroup.Initialize( cr.Title("strCfgDrFTGroup"), cr.Value("strCfgDrFTGroup"), typeof(EFTGroup));\r
+                       eHHGroup.Initialize( cr.Title("strCfgDrHHGroup"), cr.Value("strCfgDrHHGroup"), typeof(EHHGroup));\r
+                       eBDGroup.Initialize( cr.Title("strCfgDrBDGroup"), cr.Value("strCfgDrBDGroup"), typeof(EBDGroup));\r
                        Backup1BDHHGroup.Initialize("", "", typeof(EHHGroup));\r
                        Backup1BDPriotiry.Initialize("", "", typeof(EHitSoundPriority));\r
-                       eHitSoundPriorityCY.Initialize("CY Priority", Properties.Resources.strCfgDrCYPriority, typeof(EHitSoundPriority));\r
-                       eHitSoundPriorityFT.Initialize("FT Priority", Properties.Resources.strCfgDrFTPriority, typeof(EHitSoundPriority));\r
-                       eHitSoundPriorityHH.Initialize("HH Priority", Properties.Resources.strCfgDrHHPriority, typeof(EHitSoundPriority));\r
+                       eHitSoundPriorityCY.Initialize( cr.Title("strCfgDrCYPriority"), cr.Value("strCfgDrCYPriority"), typeof(EHitSoundPriority));\r
+                       eHitSoundPriorityFT.Initialize( cr.Title("strCfgDrFTPriority"), cr.Value("strCfgDrFTPriority"), typeof(EHitSoundPriority));\r
+                       eHitSoundPriorityHH.Initialize( cr.Title("strCfgDrHHPriority"), cr.Value("strCfgDrHHPriority"), typeof(EHitSoundPriority));\r
 //                     eJudgePriority.Initialize("Judge Priority", Properties.Resources.strCfgSysJudgePriority, typeof(EJudgeDisplayPriority));\r
-                       eActiveInst.Initialize("PlayMode", Properties.Resources.strCfgSysPlayMode, typeof(EActiveInstrument));\r
-                       nShowLagType.Initialize("ShowLagType", Properties.Resources.strCfgSysShowLagType, typeof(EShowLagType));\r
+                       eActiveInst.Initialize( cr.Title("strCfgSysPlayMode"), cr.Value("strCfgSysPlayMode"), typeof(EActiveInstrument));\r
+                       nShowLagType.Initialize( cr.Title("strCfgSysShowLagType"), cr.Value("strCfgSysShowLagType"), typeof(EShowLagType));\r
 \r
                        // integer\r
                        nSleepPerFrameMs.Initialize("", "");\r
                        nSleepUnfocusMs.Initialize("", "");\r
-                       nBGAlpha.Initialize("BGAlpha", Properties.Resources.strCfgSysBGAAlpha, 0, 255);\r
-                       nPreSoundWeightMs.Initialize("PreSoundWait", Properties.Resources.strCfgSysPreSoundWait, 0, 10001);\r
-                       nPreImageWeightMs.Initialize("PreImageWait", Properties.Resources.strCfgSysPreImageWait, 0, 10001);\r
+                       nBGAlpha.Initialize( cr.Title("strCfgSysBGAAlpha"), cr.Value("strCfgSysBGAAlpha"), 0, 255);\r
+                       nPreSoundWeightMs.Initialize( cr.Title("strCfgSysPreSoundWait"), cr.Value("strCfgSysPreSoundWait"), 0, 10001);\r
+                       nPreImageWeightMs.Initialize( cr.Title("strCfgSysPreImageWait"), cr.Value("strCfgSysPreImageWait"), 0, 10001);\r
                        nFontSizeDotSongSelect.Initialize("", "", 5);\r
-                       nAutoVolume.Initialize("AutoVolume", Properties.Resources.strCfgSysAutoVolume, 0, 101);\r
-                       nChipVolume.Initialize("ChipVolume", Properties.Resources.strCfgSysChipVolume, 0, 101);\r
-                       nPlaySpeed.Initialize("PlaySpeed", Properties.Resources.strCfgSysPlaySpeed, 5, 41);\r
+                       nAutoVolume.Initialize( cr.Title("strCfgSysAutoVolume"), cr.Value("strCfgSysAutoVolume"), 0, 101);\r
+                       nChipVolume.Initialize( cr.Title("strCfgSysChipVolume"), cr.Value("strCfgSysChipVolume"), 0, 101);\r
+                       nPlaySpeed.Initialize( cr.Title("strCfgSysPlaySpeed"), cr.Value("strCfgSysPlaySpeed"), 5, 41);\r
                        nPlaySpeed.ValueFormatter = (x) =>\r
                        {\r
                                return "x" + (x / 20f).ToString("0.000");\r
@@ -781,44 +789,44 @@ namespace DTXMania
                        nVelocityMin.FT.Initialize("", "", 0, 128);\r
                        nVelocityMin.CY.Initialize("", "", 0, 128);\r
                        nVelocityMin.RD.Initialize("", "", 0, 128);\r
-                       nRisky.Initialize("Risky", Properties.Resources.strCfgSysRisky, 0, 31);\r
-                       nWASAPIBufferSizeMs.Initialize("WASAPIBufSize", Properties.Resources.strCfgSysWASAPIBufSize, 0, 100001);\r
+                       nRisky.Initialize( cr.Title("strCfgSysRisky"), cr.Value("strCfgSysRisky"), 0, 31);\r
+                       nWASAPIBufferSizeMs.Initialize( cr.Title("strCfgSysWASAPIBufSize"), cr.Value("strCfgSysWASAPIBufSize"), 0, 100001);\r
                        nChipDisplayTimeMs.Initialize("", "", 0);\r
                        nChipFadeoutTimeMs.Initialize("", "", 0);\r
 \r
-                       nMasterVolume.Initialize("MasterVolume", Properties.Resources.strCfgSysMasterVolume, 0, 101);\r
+                       nMasterVolume.Initialize( cr.Title("strCfgSysMasterVolume"), cr.Value("strCfgSysMasterVolume"), 0, 101);\r
                        nPoliphonicSounds.Initialize("", "", 1, 11);\r
 \r
                        // dgb\r
                        for (EPart i = EPart.Drums; i <= EPart.Unknown; i++)\r
                        {\r
-                               bEmphasizePlaySound[i].Initialize("ChipSoundMonitor", Properties.Resources.strCfgDgbChipSoundMonitor);\r
-                               bReverse[i].Initialize("Reverse", Properties.Resources.strCfgDgbReverse);\r
-                               eRandom[i].Initialize("Random", Properties.Resources.strCfgDgbRandom, typeof(ERandom));\r
-                               bLight[i].Initialize("Light", Properties.Resources.strCfgDgbLight);\r
-                               bDisplayCombo[i].Initialize("DisplayCombo", Properties.Resources.strCfgDgbDisplayCombo);\r
-                               bDisplayJudge[i].Initialize("DisplayJudge", Properties.Resources.strCfgDgbDisplayJudge);\r
-                               bGraph[i].Initialize("Graph", Properties.Resources.strCfgDgbDisplayGraph);\r
-                               nScrollSpeed[i].Initialize("ScrollSpeed", Properties.Resources.strCfgDgbScrollSpeed, 1, 101);\r
+                               bEmphasizePlaySound[i].Initialize( cr.Title("strCfgDgbChipSoundMonitor"), cr.Value("strCfgDgbChipSoundMonitor") );\r
+                               bReverse[i].Initialize( cr.Title("strCfgDgbReverse"), cr.Value("strCfgDgbReverse") );\r
+                               eRandom[i].Initialize( cr.Title("strCfgDgbRandom"), cr.Value("strCfgDgbRandom"), typeof(ERandom));\r
+                               bLight[i].Initialize( cr.Title("strCfgDgbLight"), cr.Value("strCfgDgbLight") );\r
+                               bDisplayCombo[i].Initialize( cr.Title("strCfgDgbDisplayCombo"), cr.Value("strCfgDgbDisplayCombo") );\r
+                               bDisplayJudge[i].Initialize( cr.Title("strCfgDgbDisplayJudge"), cr.Value("strCfgDgbDisplayJudge") );\r
+                               bGraph[i].Initialize( cr.Title("strCfgDgbDisplayGraph"), cr.Value("strCfgDgbDisplayGraph") );\r
+                               nScrollSpeed[i].Initialize( cr.Title("strCfgDgbScrollSpeed"), cr.Value("strCfgDgbScrollSpeed"), 1, 101);\r
                                nScrollSpeed[i].ValueFormatter = (x) =>\r
                                        {\r
                                                return "x" + (x * 0.5f).ToString("0.0");\r
                                        };\r
-                               nInputAdjustTimeMs[i].Initialize("InputAdjust", Properties.Resources.strCfgDgbInputAdjust, -99, 100);\r
+                               nInputAdjustTimeMs[i].Initialize( cr.Title("strCfgDgbInputAdjust"), cr.Value("strCfgDgbInputAdjust"), -99, 100);\r
                                nJudgeLinePosOffset[i].Initialize("", "", -SampleFramework.GameWindowSize.Height, SampleFramework.GameWindowSize.Height + 1);\r
                                nViewerScrollSpeed[i].Initialize("", "", 1, 101);\r
-                               nMinComboDisp[i].Initialize("MinComboDisp", Properties.Resources.strCfgDgbMinComboDisp, 2, 100001);\r
-                               nSuddenFrom[i].Initialize("SudFrom", Properties.Resources.strCfgDgbSuddenFrom, 0, SampleFramework.GameWindowSize.Height + 1);\r
-                               nHiddenFrom[i].Initialize("HidFrom", Properties.Resources.strCfgDgbHiddenFrom, 0, SampleFramework.GameWindowSize.Height + 1);\r
-                               eAutoGhost[i].Initialize("AutoGhost", Properties.Resources.strCfgDgbAutoGhost, typeof(EAutoGhostData));\r
-                               eTargetGhost[i].Initialize("TargetGhost", Properties.Resources.strCfgDgbTargetGhost, typeof(ETargetGhostData));\r
-                               eSudHidInv[i].Initialize("SudHidInv", Properties.Resources.strCfgDgbSudHidInv, typeof(ESudHidInv));\r
+                               nMinComboDisp[i].Initialize( cr.Title("strCfgDgbMinComboDisp"), cr.Value("strCfgDgbMinComboDisp"), 2, 100001);\r
+                               nSuddenFrom[i].Initialize( cr.Title("strCfgDgbSuddenFrom"), cr.Value("strCfgDgbSuddenFrom"), 0, SampleFramework.GameWindowSize.Height + 1);\r
+                               nHiddenFrom[i].Initialize( cr.Title("strCfgDgbHiddenFrom"), cr.Value("strCfgDgbHiddenFrom"), 0, SampleFramework.GameWindowSize.Height + 1);\r
+                               eAutoGhost[i].Initialize( cr.Title("strCfgDgbAutoGhost"), cr.Value("strCfgDgbAutoGhost"), typeof(EAutoGhostData));\r
+                               eTargetGhost[i].Initialize( cr.Title("strCfgDgbTargetGhost"), cr.Value("strCfgDgbTargetGhost"), typeof(ETargetGhostData));\r
+                               eSudHidInv[i].Initialize( cr.Title("strCfgDgbSudHidInv"), cr.Value("strCfgDgbSudHidInv"), typeof(ESudHidInv));\r
 \r
                                fJudgeLinePosOffsetBase[i].Initialize("", "");\r
                        }\r
 \r
                        string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();\r
-                       strASIODevice.Initialize("ASIODevice", Properties.Resources.strCfgSysASIODevice, asiodevs);\r
+                       strASIODevice.Initialize( cr.Title("strCfgSysASIODevice"), cr.Value("strCfgSysASIODevice"), asiodevs);\r
 \r
                        int crdStep = 10;\r
                        cdInstX.Drums.Both.Initialize("DrumsX(Both)", Properties.Resources.strCfgDispDrumsXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
index 584cbdc..7d3ac00 100644 (file)
@@ -134,7 +134,8 @@ namespace DTXMania
 \r
                public override string ToString()\r
                {\r
-                       return val ? "On" : "Off";\r
+                       CResources cr = CDTXMania.Instance.Resources;\r
+                       return val ? cr.Title("strCfgOn") : cr.Title("strCfgOff");\r
                }\r
 \r
                public void Initialize(string lbl, string expl)\r
index 1689fec..9886b54 100644 (file)
@@ -203,15 +203,22 @@ namespace DTXMania
                                this.txMenuカーソル = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig menu cursor.png"), false);\r
 \r
                                prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));\r
-                               string[] strMenuItem = { "System", "Drums", "Guitar", "Bass", "Exit" };\r
+                               string[] strMenuItem = { \r
+                                       "strCfgSysMenuItem",\r
+                                       "strCfgDrMenuItem",\r
+                                       "strCfgGtMenuItem",\r
+                                       "strCfgBsMenuItem",\r
+                                       "strCfgExitMenuItem"\r
+                               };\r
                                txMenuItemLeft = new CTexture[strMenuItem.Length, 2];\r
                                for (int i = 0; i < strMenuItem.Length; i++)\r
                                {\r
                                        Bitmap bmpStr;\r
-                                       bmpStr = prvFont.DrawPrivateFont(strMenuItem[i], Color.White, Color.Black);\r
+                                       string s = CDTXMania.Instance.Resources.Title( strMenuItem[ i ] );\r
+                                       bmpStr = prvFont.DrawPrivateFont(s, Color.White, Color.Black);\r
                                        txMenuItemLeft[i, 0] = TextureFactory.tテクスチャの生成(bmpStr, false);\r
                                        bmpStr.Dispose();\r
-                                       bmpStr = prvFont.DrawPrivateFont(strMenuItem[i], Color.White, Color.Black, Color.Yellow, Color.OrangeRed);\r
+                                       bmpStr = prvFont.DrawPrivateFont(s, Color.White, Color.Black, Color.Yellow, Color.OrangeRed);\r
                                        txMenuItemLeft[i, 1] = TextureFactory.tテクスチャの生成(bmpStr, false);\r
                                        bmpStr.Dispose();\r
                                }\r
@@ -596,69 +603,17 @@ namespace DTXMania
                                {\r
                                        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
 \r
-                                       string[,] str = new string[2, 2];\r
-                                       switch (this.n現在のメニュー番号)\r
-                                       {\r
-                                               case 0:\r
-                                                       str[0, 0] = "システムに関係する項目を設定します。";\r
-                                                       str[0, 1] = "";\r
-                                                       str[1, 0] = "Settings for an overall systems.";\r
-                                                       break;\r
-\r
-                                               //case 1:\r
-                                               //    str[0, 0] = "ドラムのキー入力に関する項目を設";\r
-                                               //    str[0, 1] = "定します。";\r
-                                               //    str[1, 0] = "Settings for the drums key/pad inputs.";\r
-                                               //    str[1, 1] = "";\r
-                                               //    break;\r
-\r
-                                               //case 2:\r
-                                               //    str[0, 0] = "ギターのキー入力に関する項目を設";\r
-                                               //    str[0, 1] = "定します。";\r
-                                               //    str[1, 0] = "Settings for the guitar key/pad inputs.";\r
-                                               //    str[1, 1] = "";\r
-                                               //    break;\r
-\r
-                                               //case 3:\r
-                                               //    str[0, 0] = "ベースのキー入力に関する項目を設";\r
-                                               //    str[0, 1] = "定します。";\r
-                                               //    str[1, 0] = "Settings for the bass key/pad inputs.";\r
-                                               //    str[1, 1] = "";\r
-                                               //    break;\r
-                                               case 1:\r
-                                                       str[0, 0] = "ドラムの演奏に関する項目を設定します。";\r
-                                                       str[0, 1] = "";\r
-                                                       str[1, 0] = "Settings to play the drums.";\r
-                                                       str[1, 1] = "";\r
-                                                       break;\r
-\r
-                                               case 2:\r
-                                                       str[0, 0] = "ギターの演奏に関する項目を設定します。";\r
-                                                       str[0, 1] = "";\r
-                                                       str[1, 0] = "Settings to play the guitar.";\r
-                                                       str[1, 1] = "";\r
-                                                       break;\r
-\r
-                                               case 3:\r
-                                                       str[0, 0] = "ベースの演奏に関する項目を設定します。";\r
-                                                       str[0, 1] = "";\r
-                                                       str[1, 0] = "Settings to play the bass.";\r
-                                                       str[1, 1] = "";\r
-                                                       break;\r
-\r
-                                               case 4:\r
-                                                       str[0, 0] = "設定を保存し、コンフィグ画面を終了します。";\r
-                                                       str[0, 1] = "";\r
-                                                       str[1, 0] = "Save the settings and exit from\nCONFIGURATION menu.";\r
-                                                       str[1, 1] = "";\r
-                                                       break;\r
-                                       }\r
-\r
-                                       int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
-                                       for (int i = 0; i < 2; i++)\r
-                                       {\r
-                                               graphics.DrawString(str[c, i], this.ftフォント, Brushes.White, new PointF(4f * Scale.X, (i * 30) * Scale.Y));\r
-                                       }\r
+                                       string[] desc = {\r
+                                               "strCfgSysMenuDesc",\r
+                                               "strCfgDrMenuDesc",\r
+                                               "strCfgGtMenuDesc",\r
+                                               "strCfgBsMenuDesc",\r
+                                               "strCfgExitMenuDesc"\r
+                                       };\r
+                                       string str = CDTXMania.Instance.Resources.Value( desc[ this.n現在のメニュー番号 ] );\r
+\r
+                                       //int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
+                                       graphics.DrawString(str, this.ftフォント, Brushes.White, new PointF(4f * Scale.X, 0));\r
                                }\r
                                if (this.tx説明文パネル != null)\r
                                {\r
index 5ee0511..e750409 100644 (file)
@@ -39,6 +39,7 @@ namespace DTXMania
                public C文字コンソール act文字コンソール { get; private set; }\r
                public bool bコンパクトモード { get; private set; }\r
                public CConfigXml ConfigIni;\r
+               public CResources Resources;\r
 \r
                public CDTX DTX\r
                {\r
@@ -194,6 +195,20 @@ namespace DTXMania
                        // END #23629 2010.11.13 from\r
                        #endregion\r
 \r
+                       #region [ 言語リソースの初期化 ]\r
+                       Trace.TraceInformation( "言語リソースの初期化を行います。" );\r
+                       Trace.Indent();\r
+                       try\r
+                       {\r
+                               Resources = new CResources();\r
+                               Resources.LoadResources( "" );\r
+                               Trace.TraceInformation( "言語リソースの初期化を完了しました。" );\r
+                       }\r
+                       finally\r
+                       {\r
+                               Trace.Unindent();\r
+                       }\r
+                       #endregion\r
 \r
                        #region [ Config.ini の読込み ]\r
                        ConfigIni = new CConfigXml();\r
@@ -203,6 +218,7 @@ namespace DTXMania
                        // 2012.8.22 Config.iniが無いときに初期値が適用されるよう、この設定行をifブロック外に移動\r
                        #endregion\r
 \r
+\r
                        #region[座標値読み込み]\r
                        Coordinates = new Coordinates.CCoordinates();\r
                        #endregion\r
@@ -236,6 +252,16 @@ namespace DTXMania
                        Trace.TraceInformation("ProcessorCount: " + Environment.ProcessorCount.ToString());\r
                        Trace.TraceInformation("CLR Version: " + Environment.Version.ToString());\r
                        #endregion\r
+\r
+                       #region [ 言語の設定 ]\r
+                       Debug.WriteLine( "language=" + Resources.Language );\r
+                       Debug.WriteLine( "settings=" + instance.ConfigIni.strLanguage );\r
+                       Resources.Language = instance.ConfigIni.strLanguage;\r
+                       Trace.TraceInformation( "言語を{0}に設定しました。", Resources.Language );\r
+\r
+                       #endregion\r
+\r
+       \r
                        #region [ DTXVmodeクラス の初期化 ]\r
                        //Trace.TraceInformation( "DTXVモードの初期化を行います。" );\r
                        //Trace.Indent();\r
@@ -734,6 +760,7 @@ namespace DTXMania
                        }\r
                        #endregion\r
 \r
+\r
                        Trace.TraceInformation("アプリケーションの初期化を完了しました。");\r
 \r
                        #region [ 最初のステージの起動 ]\r
@@ -2421,7 +2448,6 @@ namespace DTXMania
                        if (this.listプラグイン.Count > 0)\r
                                Trace.TraceInformation(this.listプラグイン.Count + " 個のプラグインを読み込みました。");\r
                }\r
-               #region [ Windowイベント処理 ]\r
 \r
                private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)\r
                {\r
@@ -2520,7 +2546,8 @@ namespace DTXMania
                                this.t指定フォルダ内でのプラグイン検索と生成(dir + "\\", strプラグイン型名);\r
                }\r
                //-----------------\r
-               private void Window_ApplicationActivated(object sender, EventArgs e)\r
+               #region [ Windowイベント処理 ]\r
+               private void Window_ApplicationActivated( object sender, EventArgs e )\r
                {\r
                        this.bApplicationActive = true;\r
                }\r
index 1ca0ec5..0f12581 100644 (file)
@@ -150,13 +150,34 @@ namespace FDK
                        Debug.Assert( Bass.BASS_SetConfig( BASSConfig.BASS_CONFIG_UPDATEPERIOD, 0 ),            // 0:BASSストリームの自動更新を行わない。(BASSWASAPIから行うため)\r
                                string.Format( "BASS_SetConfig() に失敗しました。[{0}", Bass.BASS_ErrorGetCode() ) );\r
 \r
+                       #region [ デバッグ用: BASSデバイスのenumerateと、ログ出力 ]\r
+                       //Trace.TraceInformation( "BASSデバイス一覧:" );\r
+                       //int defDevice = -1;\r
+                       //BASS_DEVICEINFO bdi;\r
+                       //for ( int n = 0; ( bdi = Bass.BASS_GetDeviceInfo( n ) ) != null; n++ )\r
+                       //{\r
+                       //      Trace.TraceInformation( "BASS Device #{0}: {1}: IsDefault={2}, flags={3}, type={4}",\r
+                       //              n,\r
+                       //              bdi.name,\r
+                       //              bdi.IsDefault, bdi.flags.ToString(), bdi.type,ToString()\r
+                       //      );\r
+\r
+                       //      //if ( bdi.IsDefault )\r
+                       //      //{\r
+                       //      //      defDevice = n;\r
+                       //      //      break;\r
+                       //      //}\r
+                       //}\r
+                       #endregion\r
 \r
                        // BASS の初期化。\r
 \r
                        int nデバイス = 0;          // 0:"no device" … BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。\r
                        int n周波数 = 44100; // 仮決め。lデバイス(≠ドライバ)がネイティブに対応している周波数であれば何でもいい?ようだ。BASSWASAPIでデバイスの周波数は変えられる。いずれにしろBASSMXで自動的にリサンプリングされる。\r
-                       if( !Bass.BASS_Init( nデバイス, n周波数, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
-                               throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) );\r
+                       // BASS_Initは、WASAPI初期化の直前に行うよう変更。WASAPIのmix周波数を使って初期化することで、余計なリサンプリング処理を省き高速化するため。\r
+                       //if( !Bass.BASS_Init( nデバイス, n周波数, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
+                       //      throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) );\r
+\r
 \r
                        #region [ デバッグ用: WASAPIデバイスのenumerateと、ログ出力 ]\r
                        // (デバッグ用)\r
@@ -165,12 +186,15 @@ namespace FDK
                        //BASS_WASAPI_DEVICEINFO wasapiDevInfo;\r
                        //for ( a = 0; ( wasapiDevInfo = BassWasapi.BASS_WASAPI_GetDeviceInfo( a ) ) != null; a++ )\r
                        //{\r
-                       //    if ( ( wasapiDevInfo.flags & BASSWASAPIDeviceInfo.BASS_DEVICE_INPUT ) == 0 // device is an output device (not input)\r
-                       //            && ( wasapiDevInfo.flags & BASSWASAPIDeviceInfo.BASS_DEVICE_ENABLED ) != 0 ) // and it is enabled\r
-                       //    {\r
-                       //        Trace.TraceInformation( "WASAPI Device #{0}: {1}", a, wasapiDevInfo.name );\r
-                       //        count++; // count it\r
-                       //    }\r
+                       //      if ( ( wasapiDevInfo.flags & BASSWASAPIDeviceInfo.BASS_DEVICE_INPUT ) == 0 // device is an output device (not input)\r
+                       //                      && ( wasapiDevInfo.flags & BASSWASAPIDeviceInfo.BASS_DEVICE_ENABLED ) != 0 ) // and it is enabled\r
+                       //      {\r
+                       //              Trace.TraceInformation( "WASAPI Device #{0}: {1}: IsDefault={2}, defPeriod={3}s, minperiod={4}s, mixchans={5}, mixfreq={6}",\r
+                       //                      a,\r
+                       //                      wasapiDevInfo.name,\r
+                       //                      wasapiDevInfo.IsDefault, wasapiDevInfo.defperiod, wasapiDevInfo.minperiod, wasapiDevInfo.mixchans, wasapiDevInfo.mixfreq );\r
+                       //              count++; // count it\r
+                       //      }\r
                        //}\r
                        #endregion\r
 \r
@@ -197,6 +221,10 @@ namespace FDK
                        }\r
                        if ( nDevNo != -1 )\r
                        {\r
+                               if ( !Bass.BASS_Init( nデバイス, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
+                                       throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) );\r
+\r
+\r
                                // Trace.TraceInformation( "Selected Default WASAPI Device: {0}", deviceInfo.name );\r
                                // Trace.TraceInformation( "MinPeriod={0}, DefaultPeriod={1}", deviceInfo.minperiod, deviceInfo.defperiod );\r
                                n更新間隔ms = (long) ( deviceInfo.minperiod * 1000 );\r
@@ -294,13 +322,17 @@ namespace FDK
                        }\r
 \r
 \r
+\r
                        // WASAPI出力と同じフォーマットを持つ BASS ミキサーを作成。\r
 \r
+                       //Debug.Assert( Bass.BASS_SetConfig( BASSConfig.BASS_CONFIG_MIXER_BUFFER, 5 ),          // バッファ量を最大量の5にする\r
+                       //      string.Format( "BASS_SetConfig(CONFIG_MIXER_BUFFER) に失敗しました。[{0}", Bass.BASS_ErrorGetCode() ) );\r
+\r
                        var info = BassWasapi.BASS_WASAPI_GetInfo();\r
                        this.hMixer = BassMix.BASS_Mixer_StreamCreate(\r
                                info.freq,\r
                                info.chans,\r
-                               BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE );       // デコードのみ=発声しない。WASAPIに出力されるだけ。\r
+                               BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_MIXER_POSEX );   // デコードのみ=発声しない。WASAPIに出力されるだけ。\r
                        if ( this.hMixer == 0 )\r
                        {\r
                                BASSError errcode = Bass.BASS_ErrorGetCode();\r
@@ -326,7 +358,7 @@ namespace FDK
                        this.hMixer_DeviceOut = BassMix.BASS_Mixer_StreamCreate(\r
                                info.freq,\r
                                info.chans,\r
-                               BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE );       // デコードのみ=発声しない。WASAPIに出力されるだけ。\r
+                               BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_MIXER_POSEX );   // デコードのみ=発声しない。WASAPIに出力されるだけ。\r
                        if ( this.hMixer_DeviceOut == 0 )\r
                        {\r
                                BASSError errcode = Bass.BASS_ErrorGetCode();\r
index a54f542..7e1f4a0 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index 74f7864..f9aa498 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index a54f542..7e1f4a0 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ
diff --git a/実行時フォルダ/resources.csv b/実行時フォルダ/resources.csv
new file mode 100644 (file)
index 0000000..e3f32e9
Binary files /dev/null and b/実行時フォルダ/resources.csv differ
diff --git a/実行時フォルダ/resources.xlsx b/実行時フォルダ/resources.xlsx
new file mode 100644 (file)
index 0000000..5848b39
Binary files /dev/null and b/実行時フォルダ/resources.xlsx differ