}\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
{\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
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
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
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
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
\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
\r
public void t停止()\r
{\r
- CDTXMania.DTX.t全チップの再生停止();\r
+ CDTXMania.DTX.t全チップの再生停止とミキサーからの削除();\r
this.actAVI.Stop();\r
this.actBGA.Stop();\r
\r
{\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
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
{\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
\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
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
\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
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
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
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