//-----------------\r
#endregion\r
\r
- internal void tAVIの一時停止再生切り替え()\r
+ internal void t全AVIの一時停止()\r
{\r
// AVI の一時停止\r
foreach (var avi in listAVI)\r
{\r
- avi.Value.avi.ToggleRun();\r
+ if ( avi.Value.avi.b再生中 )\r
+ {\r
+ avi.Value.avi.Pause();\r
+ }\r
}\r
+ \r
// AVIPAN の一時停止\r
foreach (var avi in listAVIPAN)\r
{\r
- // avi.Value.avi.ToggleRun();\r
+ //if ( avi.Value.avi.b再生中 )\r
+ //{\r
+ // avi.Value.avi.ToggleRun();\r
+ //}\r
+ }\r
+ }\r
+ internal void t全AVIの再生再開()\r
+ {\r
+ // AVI の再生再開\r
+ foreach ( var avi in listAVI )\r
+ {\r
+ if ( avi.Value.avi.b一時停止中 )\r
+ {\r
+ avi.Value.avi.ToggleRun();\r
+ }\r
+ }\r
+ // AVIPAN の再生再開\r
+ foreach ( var avi in listAVIPAN )\r
+ {\r
+ //if ( avi.Value.avi.b一時停止中 )\r
+ //{\r
+ // avi.Value.avi.ToggleRun();\r
+ //}\r
}\r
}\r
}\r
set;\r
}\r
\r
- private void CreateTexture(int width, int height)\r
+ public void PrepareProperSizeTexture(int width, int height)\r
{\r
try\r
{\r
- if (this.tx描画用 != null)\r
+ if ( this.tx描画用 != null && ( this.tx描画用.szテクスチャサイズ.Width != width || this.tx描画用.szテクスチャサイズ.Height != height ) )\r
{\r
+//Debug.WriteLine( "orgW=" + this.tx描画用.szテクスチャサイズ.Width + ", W=" + width + ", orgH=" + this.tx描画用.szテクスチャサイズ.Height + ", H=" + height );\r
this.tx描画用.Dispose();\r
this.tx描画用 = null;\r
}\r
- this.tx描画用 = new CTexture(\r
- CDTXMania.app.Device, width, height,\r
- CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat,\r
- Pool.Managed);\r
+ if ( this.tx描画用 == null )\r
+ {\r
+ this.tx描画用 = new CTexture(\r
+ CDTXMania.app.Device, width, height,\r
+ CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat,\r
+ Pool.Managed);\r
+ }\r
}\r
catch (CTextureCreateFailedException e)\r
{\r
this.n表示側終了位置X = n表示側終了位置X * 2;\r
this.n表示側終了位置Y = n表示側終了位置Y * 2;\r
this.n総移動時間ms = n総移動時間ms;\r
+ this.PrepareProperSizeTexture((int)this.rAVI.avi.nフレーム幅, (int)this.rAVI.avi.nフレーム高さ);\r
this.n移動開始時刻ms = ( n移動開始時刻ms != -1 ) ? n移動開始時刻ms : CSound管理.rc演奏用タイマ.n現在時刻;\r
- this.CreateTexture((int)this.rAVI.avi.nフレーム幅, (int)this.rAVI.avi.nフレーム高さ);\r
- this.rAVI.avi.Run();\r
+ //this.rAVI.avi.Run();\r
+ this.rAVI.avi.ToggleRun();\r
}\r
}\r
public void SkipStart( int n移動開始時刻ms )\r
355,\r
CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Default, Usage.Dynamic );\r
#else\r
- this.CreateTexture(\r
+ this.PrepareProperSizeTexture(\r
(bIsPreviewMovie) ? 204 : SampleFramework.GameWindowSize.Width,\r
(bIsPreviewMovie) ? 269 : SampleFramework.GameWindowSize.Height\r
);\r
}\r
}\r
\r
+ /// <summary>\r
+ /// 演奏開始前に適切なサイズのAVIテクスチャを作成しておくことで、AVI再生開始時のもたつきをなくす\r
+ /// </summary>\r
+ protected void PrepareAVITexture()\r
+ {\r
+ if ( CDTXMania.ConfigIni.bAVI有効 )\r
+ {\r
+ foreach ( CDTX.CChip pChip in listChip )\r
+ {\r
+ if ( pChip.nチャンネル番号 == (int) Ech定義.Movie || pChip.nチャンネル番号 == (int) Ech定義.MovieFull )\r
+ {\r
+ // 最初に再生するAVIチップに合わせて、テクスチャを準備しておく\r
+ if (pChip.rAVI != null )\r
+ {\r
+ this.actAVI.PrepareProperSizeTexture( (int) pChip.rAVI.avi.nフレーム幅, (int) pChip.rAVI.avi.nフレーム高さ );\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime, bool saveLag = true )\r
{\r
if ( pChip != null )\r
CSound管理.rc演奏用タイマ.t一時停止();\r
CDTXMania.Timer.t一時停止();\r
CDTXMania.DTX.t全チップの再生一時停止();\r
- CDTXMania.DTX.tAVIの一時停止再生切り替え();\r
+ CDTXMania.DTX.t全AVIの一時停止();\r
}\r
else\r
{\r
CSound管理.rc演奏用タイマ.t再開();\r
CDTXMania.Timer.t再開();\r
CDTXMania.DTX.t全チップの再生再開();\r
- CDTXMania.DTX.tAVIの一時停止再生切り替え();\r
+ CDTXMania.DTX.t全AVIの再生再開();\r
}\r
}\r
if ( ( !this.bPAUSE && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED ) ) && ( base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト ) )\r
\r
if( base.b初めての進行描画 )\r
{\r
- CSound管理.rc演奏用タイマ.tリセット();\r
+ this.PrepareAVITexture();\r
+\r
+ CSound管理.rc演奏用タイマ.tリセット();\r
CDTXMania.Timer.tリセット();\r
this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
#region [ 初めての進行描画 ]\r
if ( base.b初めての進行描画 )\r
{\r
- CSound管理.rc演奏用タイマ.tリセット();\r
+ this.PrepareAVITexture();\r
+\r
+ CSound管理.rc演奏用タイマ.tリセット();\r
CDTXMania.Timer.tリセット();\r
this.ctチップ模様アニメ.Drums = new CCounter( 0, 0x30, 10, CDTXMania.Timer );\r
this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );\r
return (uint)nWidth;\r
}\r
}\r
+ public bool b再生中\r
+ {\r
+ get\r
+ {\r
+ return bPlaying;\r
+ }\r
+ }\r
+ public bool b一時停止中\r
+ {\r
+ get\r
+ {\r
+ return bPause;\r
+ }\r
+ }\r
\r
int nWidth;\r
int nHeight;\r
long nMediaLength; // [ms]\r
+ bool bPlaying;\r
+ bool bPause;\r
\r
public int GetDuration()\r
{\r
#endregion\r
\r
grabber.SetBufferSamples(true);\r
+ this.Run();\r
+ this.Pause();\r
+\r
+ bPlaying = false;\r
+ bPause = false; // 外見えには演奏停止している。PAUSE中として外に見せないこと。\r
}\r
\r
public void Seek(int timeInMs)\r
DsError.ThrowExceptionForHR(hr);\r
hr = control.GetState(timeOutMs, out state);\r
DsError.ThrowExceptionForHR(hr);\r
+ bPlaying = true;\r
+ bPause = false;\r
}\r
\r
public void Stop()\r
DsError.ThrowExceptionForHR(hr);\r
hr = control.GetState(timeOutMs, out state);\r
DsError.ThrowExceptionForHR(hr);\r
+ bPlaying = false;\r
+ bPause = false;\r
}\r
\r
public void Pause()\r
DsError.ThrowExceptionForHR(hr);\r
hr = control.GetState(timeOutMs, out state);\r
DsError.ThrowExceptionForHR(hr);\r
+ bPause = true;\r
}\r
\r
public void ToggleRun()\r