OSDN Git Service

#28821 FDK: DTXMania起動中にDTXCを起動しDTXファイルを読み込むと、GPFが発生していた問題を修正。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 21 Apr 2014 16:25:08 +0000 (16:25 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 21 Apr 2014 16:25:08 +0000 (16:25 +0000)
#28821 DTXMania: DTXCからの制御において、再生停止時などに、ミキサー登録されたサウンドをミキサーからすべて削除するようにした。
#28821 DTXMania: BGM音は無条件に最初にミキサー登録して、ミキサーから削除しない仕様としていたが、これを止めた。他のチップ同様、再生直前にミキサーに登録し、再生終了後ミキサーから削除ずる。
#28821 DTXMania: DTXCからの制御において、最後まで再生し終わった時に画面を停止させるコードの追加(ただし注釈化しているため機能しない)
#28821 DTXMania: NoMP3Streaming関連のコードを削除。

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/140113(DTXMania098%20with%2028821%20DTXVmode)@706 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs
DTXManiaプロジェクト/コード/全体/CDTXMania.cs
FDK17プロジェクト/コード/00.共通/CTimerBase.cs
FDK17プロジェクト/コード/03.サウンド/CSound.cs
実行時フォルダ(DTXCreator)/DTXCreator.exe
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll

index e8ad237..8a9961e 100644 (file)
@@ -1593,6 +1593,10 @@ namespace DTXMania
                }\r
                public void tWavの再生停止( int nWaveの内部番号 )\r
                {\r
+                       tWavの再生停止( nWaveの内部番号, false );\r
+               }\r
+               public void tWavの再生停止( int nWaveの内部番号, bool bミキサーからも削除する )\r
+               {\r
                        if( this.listWAV.ContainsKey( nWaveの内部番号 ) )\r
                        {\r
                                CWAV cwav = this.listWAV[ nWaveの内部番号 ];\r
@@ -1600,7 +1604,14 @@ namespace DTXMania
                                {\r
                                        if( cwav.rSound[ i ] != null && cwav.rSound[ i ].b再生中 )\r
                                        {\r
-                                               cwav.rSound[ i ].t再生を停止する();\r
+                                               if ( bミキサーからも削除する )\r
+                                               {\r
+                                                       cwav.rSound[ i ].tサウンドを停止してMixerからも削除する();\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       cwav.rSound[ i ].t再生を停止する();\r
+                                               }\r
                                        }\r
                                }\r
                        }\r
@@ -2009,6 +2020,13 @@ namespace DTXMania
                                this.tWavの再生停止( cwav.n内部番号 );\r
                        }\r
                }\r
+               public void t全チップの再生停止とミキサーからの削除()\r
+               {\r
+                       foreach( CWAV cwav in this.listWAV.Values )\r
+                       {\r
+                               this.tWavの再生停止( cwav.n内部番号, true );\r
+                       }\r
+               }\r
                #endregion\r
 \r
                public void t入力( string strファイル名, bool bヘッダのみ )\r
@@ -2673,7 +2691,7 @@ namespace DTXMania
                                        case 0x80:      case 0x81:      case 0x82:      case 0x83:      case 0x84:      case 0x85:      case 0x86:      case 0x87:      case 0x88:      case 0x89:\r
                                        case 0x90:      case 0x91:      case 0x92:\r
 \r
-                                               #region [ 発音1秒前のタイミングを記録 ]\r
+                                               #region [ 発音1秒前のタイミングを算出 ]\r
                                                int n発音前余裕ms = 1000, n発音後余裕ms = 800;\r
                                                {\r
                                                        int ch = pChip.nチャンネル番号 >> 4;\r
@@ -2688,19 +2706,21 @@ namespace DTXMania
                                                                n発音前余裕ms = 500;\r
                                                        }\r
                                                }\r
-                                               if ( pChip.nチャンネル番号 == 0x01 )     // BGMチップは即ミキサーに追加\r
-                                               {\r
-                                                       if ( listWAV.ContainsKey( pChip.n整数値・内部番号 ) )\r
-                                                       {\r
-                                                               CDTX.CWAV wc = CDTXMania.DTX.listWAV[ pChip.n整数値・内部番号 ];\r
-                                                               if ( wc.rSound[ 0 ] != null )\r
-                                                               {\r
-                                                                       CDTXMania.Sound管理.AddMixer( wc.rSound[ 0 ] );       // BGMは多重再生しない仕様としているので、1個目だけミキサーに登録すればよい\r
-                                                               }\r
-                                                       }\r
-\r
-                                               }\r
-\r
+                                               #endregion\r
+                                               #region [ BGMチップならば即ミキサーに追加 ]\r
+                                               //if ( pChip.nチャンネル番号 == 0x01 )   // BGMチップは即ミキサーに追加\r
+                                               //{\r
+                                               //    if ( listWAV.ContainsKey( pChip.n整数値・内部番号 ) )\r
+                                               //    {\r
+                                               //        CDTX.CWAV wc = CDTXMania.DTX.listWAV[ pChip.n整数値・内部番号 ];\r
+                                               //        if ( wc.rSound[ 0 ] != null )\r
+                                               //        {\r
+                                               //            CDTXMania.Sound管理.AddMixer( wc.rSound[ 0 ] ); // BGMは多重再生しない仕様としているので、1個目だけミキサーに登録すればよい\r
+                                               //        }\r
+                                               //    }\r
+                                               //}\r
+                                               #endregion\r
+                                               #region [ 発音1秒前のタイミングを算出 ]\r
                                                int nAddMixer時刻ms, nAddMixer位置 = 0;\r
 //Debug.WriteLine("==================================================================");\r
 //Debug.WriteLine( "Start: ch=" + pChip.nチャンネル番号.ToString("x2") + ", nWAV番号=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms + ", lasttime=" + listChip[ listChip.Count - 1 ].n発声時刻ms );\r
index fd742b3..9a6cc63 100644 (file)
@@ -317,7 +317,7 @@ namespace DTXMania
                                        if ( pChip.nチャンネル番号 == 0xDA )\r
                                        {\r
                                                pChip.bHit = true;\r
-//                                             Debug.WriteLine( "first [DA] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
+//                                             Trace.TraceInformation( "first [DA] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
                                                if ( listWAV.ContainsKey( pChip.n整数値・内部番号 ) )\r
                                                {\r
                                                        CDTX.CWAV wc = listWAV[ pChip.n整数値・内部番号 ];\r
@@ -2221,7 +2221,7 @@ namespace DTXMania
 \r
                public void t再読込()\r
                {\r
-                       CDTXMania.DTX.t全チップの再生停止();\r
+                       CDTXMania.DTX.t全チップの再生停止とミキサーからの削除();\r
                        this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.再読込・再演奏;\r
                        base.eフェーズID = CStage.Eフェーズ.演奏_再読込;\r
                        this.bPAUSE = false;\r
@@ -2229,7 +2229,7 @@ namespace DTXMania
 \r
                public void t停止()\r
                {\r
-                       CDTXMania.DTX.t全チップの再生停止();\r
+                       CDTXMania.DTX.t全チップの再生停止とミキサーからの削除();\r
                        this.actAVI.Stop();\r
                        this.actBGA.Stop();\r
 \r
index 0816d2c..1d5c23f 100644 (file)
@@ -141,7 +141,8 @@ namespace DTXMania
                        {\r
                                bool bIsFinishedPlaying = false;\r
                                bool bIsFinishedFadeout = false;\r
-                               if( base.b初めての進行描画 )\r
+                               #region [ 初めての進行描画 ]\r
+                               if ( base.b初めての進行描画 )\r
                                {\r
                     CSound管理.rc演奏用タイマ.tリセット();\r
                                        CDTXMania.Timer.tリセット();\r
@@ -169,6 +170,7 @@ namespace DTXMania
                                        CDTXMania.Sound管理.tDisableUpdateBufferAutomatically();\r
                                        base.b初めての進行描画 = false;\r
                                }\r
+                               #endregion\r
                                if ( ( CDTXMania.ConfigIni.bSTAGEFAILED有効 && this.actGauge.IsFailed( E楽器パート.DRUMS ) ) && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
                                {\r
                                        this.actStageFailed.Start();\r
@@ -209,6 +211,12 @@ namespace DTXMania
                                {\r
                                        if ( CDTXMania.DTXVmode.Enabled )\r
                                        {\r
+                                               // 何かサウンドが鳴っている間は、待機する\r
+                                               //if ( CDTXMania.Timer.b停止していない )\r
+                                               //{\r
+                                               //    this.actPanel.SetPanelString( "" );       // まだPANELの復活ができていない\r
+                                               //    CDTXMania.Timer.t一時停止();\r
+                                               //}\r
                                                Thread.Sleep( 5 );\r
                                                // DTXCからの次のメッセージを待ち続ける\r
                                        }\r
index e81398d..e31048e 100644 (file)
@@ -2073,7 +2073,7 @@ for (int i = 0; i < 3; i++) {
        \r
                                ShowWindowTitleWithSoundType();\r
                                FDK.CSound管理.bIsTimeStretch = CDTXMania.ConfigIni.bTimeStretch;\r
-                               FDK.CSound管理.bIsMP3DecodeByWindowsCodec = CDTXMania.ConfigIni.bNoMP3Streaming;\r
+                               //FDK.CSound管理.bIsMP3DecodeByWindowsCodec = CDTXMania.ConfigIni.bNoMP3Streaming;\r
                                Trace.TraceInformation( "サウンドデバイスの初期化を完了しました。" );\r
                        }\r
                        catch (Exception e)\r
index 536af57..b43b995 100644 (file)
@@ -68,6 +68,13 @@ namespace FDK
                        protected set;\r
                }\r
 \r
+               public bool b停止していない\r
+               {\r
+                       get\r
+                       {\r
+                               return ( this.n停止数 == 0 );\r
+                       }\r
+               }\r
                public void tリセット()\r
                {\r
                        this.t更新();\r
index 2e0c989..8b062cb 100644 (file)
@@ -35,12 +35,12 @@ namespace FDK
 \r
                public static bool bIsTimeStretch = false;\r
 \r
-               /// <summary>\r
-               /// BASS時、mp3をストリーミング再生せずに、デコードしたraw wavをオンメモリ再生する場合はtrueにする。\r
-               /// 特殊なmp3を使用時はシークが乱れるので、必要に応じてtrueにすること。(Config.iniのNoMP3Streamingで設定可能。)\r
-               /// ただし、trueにすると、その分再生開始までの時間が長くなる。\r
-               /// </summary>\r
-               public static bool bIsMP3DecodeByWindowsCodec = false;\r
+               ///// <summary>\r
+               ///// BASS時、mp3をストリーミング再生せずに、デコードしたraw wavをオンメモリ再生する場合はtrueにする。\r
+               ///// 特殊なmp3を使用時はシークが乱れるので、必要に応じてtrueにすること。(Config.iniのNoMP3Streamingで設定可能。)\r
+               ///// ただし、trueにすると、その分再生開始までの時間が長くなる。\r
+               ///// </summary>\r
+               //public static bool bIsMP3DecodeByWindowsCodec = false;\r
 \r
                public static int nMixing = 0;\r
                public int GetMixingStreams()\r
@@ -207,7 +207,8 @@ namespace FDK
                                        Trace.TraceInformation( e.Message );\r
                                        if ( ESoundDeviceTypes[ n初期デバイス ] == ESoundDeviceType.Unknown )\r
                                        {\r
-                                               throw new Exception( string.Format( "サウンドデバイスの初期化に失敗しました。" ) );\r
+                                               Trace.TraceError( string.Format( "サウンドデバイスの初期化に失敗しました。" ) );\r
+                                               break;\r
                                        }\r
                                }\r
                        }\r
@@ -1064,6 +1065,14 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
                        this.t再生位置を先頭に戻す();\r
                        this.tサウンドを再生する();\r
                }\r
+               public void tサウンドを停止してMixerからも削除する()\r
+               {\r
+                       tサウンドを停止する( false );\r
+                       if ( bBASSサウンドである )\r
+                       {\r
+                               tBASSサウンドをミキサーから削除する();\r
+                       }\r
+               }\r
                public void tサウンドを停止する()\r
                {\r
                        tサウンドを停止する( false );\r
@@ -1532,7 +1541,7 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
                                bool b1 = BassMix.BASS_Mixer_StreamAddChannel( this.hMixer, this.hBassStream, bf );\r
                                //bool b2 = BassMix.BASS_Mixer_ChannelPause( this.hBassStream );\r
                                t再生位置を先頭に戻す();      // StreamAddChannelの後で再生位置を戻さないとダメ。逆だと再生位置が変わらない。\r
-//                             Debug.WriteLine( "Add Mixer: " + Path.GetFileName( this.strファイル名 ) + " (" + hBassStream + ")" + " MixedStreams=" + CSound管理.nMixing );\r
+//Trace.TraceInformation( "Add Mixer: " + Path.GetFileName( this.strファイル名 ) + " (" + hBassStream + ")" + " MixedStreams=" + CSound管理.nMixing );\r
                                Bass.BASS_ChannelUpdate( this.hBassStream, 0 ); // pre-buffer\r
                                return b1;      // &b2;\r
                        }\r
index 1a10afd..0f1da50 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/DTXCreator.exe and b/実行時フォルダ(DTXCreator)/DTXCreator.exe differ
index e4bdb82..47c0943 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index 2042129..db0c56a 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll differ
index d152812..37c7dde 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index e4bdb82..47c0943 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ