OSDN Git Service

#38244 LoadDTXDetail=ON時、起動後(enumerate時)に例外が発生する場合がある問題を修正。具体的には、
authorDESKTOP-217BR0A\yyagi <yyagi.dtxmania@gmail.com>
Wed, 2 May 2018 14:26:41 +0000 (23:26 +0900)
committerDESKTOP-217BR0A\yyagi <yyagi.dtxmania@gmail.com>
Wed, 2 May 2018 14:26:41 +0000 (23:26 +0900)
1. bmpファイル読み出し時のフルパス生成において、nullチェック強化
2. enumerationでbmp/aviの読み込みを省略

DTXMania/コード/スコア、曲/CDTX.cs
DTXMania/コード/スコア、曲/CDTXInput.cs
DTXMania/コード/スコア、曲/CDTXNestedTypes.cs
DTXMania/コード/スコア、曲/CSong管理.cs
DTXMania/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs

index c582e50..5314ffd 100644 (file)
@@ -232,11 +232,11 @@ namespace DTXMania
                        this.On活性化();
                        this.t入力_全入力文字列から(str全入力文字列);
                }
-               public CDTX(string strファイル名, bool bヘッダのみ)
+               public CDTX(string strファイル名, bool bEnumerating, bool bレーン情報を確認する)
                        : this()
                {
                        this.On活性化();
-                       this.t入力(strファイル名, bヘッダのみ);
+                       this.t入力(strファイル名, bEnumerating, bレーン情報を確認する);
                }
                private CDTX(string str全入力文字列, double db再生速度, int nBGMAdjust)
                        : this()
@@ -244,12 +244,13 @@ namespace DTXMania
                        this.On活性化();
                        this.t入力_全入力文字列から(str全入力文字列, db再生速度, nBGMAdjust);
                }
-               public CDTX(string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust)
+               public CDTX(string strファイル名, bool bEnumerating, bool bレーン情報を確認する, double db再生速度, int nBGMAdjust)
                        : this()
                {
                        this.On活性化();
-                       this.t入力(strファイル名, bヘッダのみ, db再生速度, nBGMAdjust);
+                       this.t入力(strファイル名, bEnumerating, bレーン情報を確認する, db再生速度, nBGMAdjust);
                }
+
                #endregion
 
 
@@ -1257,6 +1258,7 @@ namespace DTXMania
 
                private readonly STGDAPARAM[] stGDAParam;
                private bool bヘッダのみ;
+               private bool bレーン情報を確認する;
                private Stack<bool> bstackIFからENDIFをスキップする;
 
                private int n現在の行数;
index 97117f0..1a33d56 100644 (file)
@@ -15,13 +15,14 @@ namespace DTXMania
 {
        public partial class CDTX
        {
-               public void t入力(string strファイル名, bool bヘッダのみ)
+               public void t入力(string strファイル名, bool bEnumerating, bool bレーン情報を確認する)
                {
-                       this.t入力(strファイル名, bヘッダのみ, 1.0, 0);
+                       this.t入力(strファイル名, bEnumerating, bレーン情報を確認する, 1.0, 0);
                }
-               public void t入力(string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust)
+               public void t入力(string strファイル名, bool bEnumerating, bool bレーン情報を確認する, double db再生速度, int nBGMAdjust)
                {
-                       this.bヘッダのみ = bヘッダのみ;
+                       this.bヘッダのみ = bEnumerating;
+                       this.bレーン情報を確認する = bレーン情報を確認する;
                        this.strファイル名の絶対パス = Path.GetFullPath(strファイル名);
                        this.strファイル名 = Path.GetFileName(this.strファイル名の絶対パス);
                        this.strフォルダ名 = Path.GetDirectoryName(this.strファイル名の絶対パス) + @"\";
@@ -165,7 +166,7 @@ namespace DTXMania
                                        this.n無限管理VOL = null;
                                        this.n無限管理PAN = null;
                                        this.n無限管理SIZE = null;
-                                       if (!this.bヘッダのみ)
+                                       if (!this.bヘッダのみ && this.bレーン情報を確認する)
                                        {
                                                #region [ BPM/BMP初期化 ]
                                                CBPM cbpm = null;
index 9e783fa..fc7b66d 100644 (file)
@@ -243,10 +243,20 @@ namespace DTXMania
                        {
                                get
                                {
-                                       if (!string.IsNullOrEmpty(CDTXMania.Instance.DTX.PATH_WAV))
-                                               return CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
+                                       if (CDTXMania.Instance.DTX != null)
+                                       {
+                                               if (!string.IsNullOrEmpty(CDTXMania.Instance.DTX.PATH_WAV))
+                                                       return CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
+                                               else
+                                                       return CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
+                                       }
                                        else
-                                               return CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
+                                       {
+                                               // 2018.5.2 add yyagi
+                                               // enumarating && bLoadDTXDetail==true && バージョンアップ直後のみ、ここにくる
+                                               // enumarating時限定の話なので、dtx内のbmpを読み込む必要はなく、nullを返してしまえばよい
+                                               return null;
+                                       }
                                }
                        }
 
index e4cfe24..496dc2d 100644 (file)
@@ -820,7 +820,7 @@ namespace DTXMania
                                                                try
                                                                {
                                                                        //#36177 2016.7.30 ikanick 曲データの取得時、bLoadDTXDetailがtrueであれば bヘッダのみをfalseにし 詳細なデータを取得する
-                                                                       CDTX cdtx = new CDTX(c曲リストノード.arスコア[i].ファイル情報.ファイルの絶対パス, !CDTXMania.Instance.ConfigIni.bLoadDTXDetail );
+                                                                       CDTX cdtx = new CDTX(c曲リストノード.arスコア[i].ファイル情報.ファイルの絶対パス, true, CDTXMania.Instance.ConfigIni.bLoadDTXDetail );
                                                                        c曲リストノード.arスコア[i].譜面情報.タイトル = cdtx.TITLE;
                                                                        c曲リストノード.arスコア[i].譜面情報.アーティスト名 = cdtx.ARTIST;
                                                                        c曲リストノード.arスコア[i].譜面情報.コメント = cdtx.COMMENT;
index cd7b340..a405d90 100644 (file)
@@ -71,7 +71,7 @@ namespace DTXMania
                                string strDTXファイルパス = (CDTXMania.Instance.bコンパクトモード) ?
                                        CDTXMania.Instance.strコンパクトモードファイル : CDTXMania.Instance.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
 
-                               CDTX cdtx = new CDTX(strDTXファイルパス, true);
+                               CDTX cdtx = new CDTX(strDTXファイルパス, false, false);
                                this.str曲タイトル = cdtx.TITLE;
                                if (((cdtx.STAGEFILE != null) && (cdtx.STAGEFILE.Length > 0)) && (File.Exists(cdtx.strフォルダ名 + cdtx.STAGEFILE) && !CDTXMania.Instance.ConfigIni.bStoicMode))
                                {
@@ -332,7 +332,7 @@ namespace DTXMania
                                                if ((CDTXMania.Instance.DTX != null) && CDTXMania.Instance.DTX.b活性化してる)
                                                        CDTXMania.Instance.DTX.On非活性化();
 
-                                               CDTXMania.Instance.DTX = new CDTX(str, false, ((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0, ini.stファイル.BGMAdjust);
+                                               CDTXMania.Instance.DTX = new CDTX(str, false, true, ((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0, ini.stファイル.BGMAdjust);
                                                Trace.TraceInformation("----曲情報-----------------");
                                                Trace.TraceInformation("TITLE: {0}", CDTXMania.Instance.DTX.TITLE);
                                                Trace.TraceInformation("FILE: {0}", CDTXMania.Instance.DTX.strファイル名の絶対パス);