using System.Text;\r
using System.Windows.Forms;\r
using System.IO;\r
+using System.Threading;\r
+using System.Diagnostics;\r
using DTXCreator.UndoRedo;\r
using DTXCreator.譜面;\r
using FDK;\r
{\r
this._Form = pメインフォーム;\r
this.listViewWAVリスト = pListViewWAVリスト;\r
+ tDirectSoundの初期化();\r
+ }\r
+ private void tDirectSoundの初期化()\r
+ {\r
this.sound管理 = new CSound管理( this._Form.Handle );\r
+ // this.sound管理 = new CSound管理( this._Form.Handle, this._Form.appアプリ設定.ViewerInfo.SoundType, 0, 0, this._Form.appアプリ設定.ViewerInfo.ASIODeviceNo );\r
+\r
this.soundPreview = null;\r
+\r
+ #region [ #26122 2011.8.31 yyagi; ストリーム再生のために、t再生中の処理をする()を定期的に呼び出す処理を追加 ]\r
+ timerDelegate = new TimerCallback( this.sound管理.t再生中の処理をする );\r
+ timer = new System.Threading.Timer( timerDelegate, null, 0, 300 );\r
+ #endregion\r
}\r
+\r
public ListViewItem tCWAVとListViewItemを生成して返す( int n行番号1to1295 )\r
{\r
- return this.tWAVをキャッシュから検索して返す・なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す();\r
+ return this.tWAVをキャッシュから検索して返す_なければ新規生成する( n行番号1to1295 ).t現在の内容から新しいListViewItemを作成して返す();\r
}\r
public void tDirectSoundの解放()\r
{\r
{\r
this.soundPreview.Dispose();\r
}\r
+ if ( timer != null )\r
+ {\r
+ timer.Change( Timeout.Infinite, Timeout.Infinite );\r
+ timer.Dispose();\r
+ timer = null;\r
+ }\r
+ if ( timerDelegate != null )\r
+ {\r
+ timerDelegate = null;\r
+ }\r
if( this.sound管理 != null )\r
{\r
this.sound管理.Dispose();\r
if( !CUndoRedo管理.bUndoRedoした直後 )\r
{\r
this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t行交換のUndo ), new DGRedoを実行する<int>( this.t行交換のRedo ), nItem番号1, nItem番号2 ) );\r
- this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
+ this._Form.tUndoRedo用GUIの有効無効を設定する();\r
}\r
CUndoRedo管理.bUndoRedoした直後 = false;\r
- this.tItemを交換する・ListViewItem( nItem番号1, nItem番号2 );\r
- this.tItemを交換する・WAVキャッシュ( nItem番号1, nItem番号2 );\r
- this.tItemを交換する・チップパレット( nItem番号1, nItem番号2 );\r
- this.tItemを交換する・譜面上のチップ( nItem番号1, nItem番号2 );\r
- this.tItemを交換する・レーン割付チップ( nItem番号1, nItem番号2 );\r
- this.tItemを交換する・カーソル移動( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_ListViewItem( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_WAVキャッシュ( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_チップパレット( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_譜面上のチップ( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_レーン割付チップ( nItem番号1, nItem番号2 );\r
+ this.tItemを交換する_カーソル移動( nItem番号1, nItem番号2 );\r
this._Form.listViewWAVリスト.Refresh();\r
this._Form.pictureBox譜面パネル.Refresh();\r
this._Form.b未保存 = true;\r
{\r
return this.WAVキャッシュ.tWAVをキャッシュから検索して返す( nWAV番号1to1295 );\r
}\r
- public CWAV tWAVをキャッシュから検索して返す・なければ新規生成する( int nWAV番号1to1295 )\r
+ public CWAV tWAVをキャッシュから検索して返す_なければ新規生成する( int nWAV番号1to1295 )\r
{\r
- return this.WAVキャッシュ.tWAVをキャッシュから検索して返す・なければ新規生成する( nWAV番号1to1295 );\r
+ return this.WAVキャッシュ.tWAVをキャッシュから検索して返す_なければ新規生成する( nWAV番号1to1295 );\r
}\r
public ListViewItem tWAV番号に対応するListViewItemを返す( int nWAV番号1to1295 )\r
{\r
CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num );\r
cwav.tコピーfrom( wc変更後 );\r
cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] );\r
- this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 );\r
+ this._Form.tWAV_BMP_AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 );\r
this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV );\r
this.listViewWAVリスト.Refresh();\r
}\r
CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( num );\r
cwav.tコピーfrom( wc変更前 );\r
cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] );\r
- this._Form.tWAV・BMP・AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 );\r
+ this._Form.tWAV_BMP_AVIリストのカーソルを全部同じ行に合わせる( cwav.nWAV番号1to1295 - 1 );\r
this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV );\r
this.listViewWAVリスト.Refresh();\r
}\r
public void tサウンドプロパティを開いて編集する( int nWAV番号1to1295, string str相対パスの基本フォルダ )\r
{\r
this._Form.dlgチップパレット.t一時的に隠蔽する();\r
- CWAV cwav = this.tWAVをキャッシュから検索して返す・なければ新規生成する( nWAV番号1to1295 );\r
+ CWAV cwav = this.tWAVをキャッシュから検索して返す_なければ新規生成する( nWAV番号1to1295 );\r
ListViewItem item = cwav.t現在の内容から新しいListViewItemを作成して返す();\r
string directoryName = "";\r
if( item.SubItems[ 2 ].Text.Length > 0 )\r
wav = new CWAV();\r
wav.tコピーfrom( cサウンドプロパティダイアログ.wav );\r
this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<CWAV>( null, new DGUndoを実行する<CWAV>( this.tWAV編集のUndo ), new DGRedoを実行する<CWAV>( this.tWAV編集のRedo ), wav, cwav3 ) );\r
- this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
+ this._Form.tUndoRedo用GUIの有効無効を設定する();\r
cサウンドプロパティダイアログ.wav.tコピーfrom( cwav3 );\r
if( this.tWAV番号に対応するListViewItemを返す( nWAV番号1to1295 ) != null )\r
{\r
}\r
}\r
}\r
+ public string tファイル名を絶対パスで返す( int nWAV番号1to1295 )\r
+ {\r
+ CWAV wc = this.WAVキャッシュ.tWAVをキャッシュから検索して返す( nWAV番号1to1295 );\r
+ return this._Form.strファイルの存在するディレクトリを絶対パスで返す( wc.strファイル名 );\r
+ }\r
public void tプレビュー音を再生する( CWAV wc )\r
{\r
if( ( wc != null ) && ( wc.strファイル名.Length != 0 ) )\r
{\r
- string str = this._Form.strファイルの存在するディレクトリを絶対パスで返す( wc.strファイル名 );\r
+ string strWavFilenameFullPath = this._Form.strファイルの存在するディレクトリを絶対パスで返す( wc.strファイル名 );\r
try\r
{\r
- this.tプレビュー音を停止する();\r
- this.soundPreview = this.sound管理.tサウンドを生成する( str );\r
- this.soundPreview.n音量 = wc.n音量0to100;\r
- this.soundPreview.n位置 = wc.n位置_100to100;\r
- this.soundPreview.t再生を開始する();\r
+ bool dtxmProcess = this._Form.DetectDTXManiaProcess();\r
+ if ( dtxmProcess != false ) // DTXManiaがViewerとして起動中なら\r
+ {\r
+//Debug.WriteLine( "DTXManiaで再生" );\r
+ // DTXManiaで再生する\r
+ string strDTXViewerのパス = this._Form.strDTXCのあるフォルダ名 + this._Form.appアプリ設定.ViewerInfo.Path;\r
+ Process.Start( strDTXViewerのパス,\r
+ "-V" + wc.n音量0to100.ToString() + "," + wc.n位置_100to100 + "," +\r
+ "\"" + strWavFilenameFullPath + "\"" ).WaitForInputIdle( 20 * 1000 );\r
+ }\r
+ else\r
+ {\r
+//Debug.WriteLine( "DTXCで再生" );\r
+ // さもなくば、DTXC内で再生する\r
+ try\r
+ {\r
+ this.tプレビュー音を停止する();\r
+ }\r
+ catch // DTXMania終了後はDirectSoundの再初期化が必要\r
+ {\r
+ tDirectSoundの解放();\r
+ tDirectSoundの初期化();\r
+ }\r
+ this.soundPreview = this.sound管理.tサウンドを生成する( strWavFilenameFullPath );\r
+ this.soundPreview.n音量 = wc.n音量0to100;\r
+ this.soundPreview.n位置 = wc.n位置_100to100;\r
+ this.soundPreview.t再生を開始する();\r
+ }\r
}\r
catch\r
{\r
public void t新規生成のRedo( CWAV wc生成前はNull, CWAV wc生成されたWAVの複製 )\r
{\r
int num = wc生成されたWAVの複製.nWAV番号1to1295;\r
- CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す・なければ新規生成する( num );\r
+ CWAV cwav = this.WAVキャッシュ.tWAVをキャッシュから検索して返す_なければ新規生成する( num );\r
cwav.tコピーfrom( wc生成されたWAVの複製 );\r
cwav.tコピーto( this.listViewWAVリスト.Items[ num - 1 ] );\r
this._Form.tタブを選択する( Cメインフォーム.Eタブ種別.WAV );\r
private Cメインフォーム _Form;\r
private ListView listViewWAVリスト;\r
private CSound soundPreview;\r
- private CSound管理 sound管理;\r
+ private CSound管理 sound管理 = null;\r
private CWAVキャッシュ WAVキャッシュ = new CWAVキャッシュ();\r
+ private TimerCallback timerDelegate;\r
+ private System.Threading.Timer timer;\r
\r
- private void tItemを交換する・ListViewItem( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_ListViewItem( int nItem番号1, int nItem番号2 )\r
{\r
int num = nItem番号1 + 1;\r
int num2 = nItem番号2 + 1;\r
cwav2.tコピーto( this.listViewWAVリスト.Items[ nItem番号1 ] );\r
cwav.tコピーto( this.listViewWAVリスト.Items[ nItem番号2 ] );\r
}\r
- private void tItemを交換する・WAVキャッシュ( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_WAVキャッシュ( int nItem番号1, int nItem番号2 )\r
{\r
int num = nItem番号1 + 1;\r
int num2 = nItem番号2 + 1;\r
cwav2.tコピーfrom( cwav3 );\r
cwav2.nWAV番号1to1295 = num2;\r
}\r
- private void tItemを交換する・カーソル移動( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_カーソル移動( int nItem番号1, int nItem番号2 )\r
{\r
this.tItemを選択する( nItem番号2 );\r
}\r
- private void tItemを交換する・チップパレット( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_チップパレット( int nItem番号1, int nItem番号2 )\r
{\r
this._Form.dlgチップパレット.tパレットセルの番号を置換する( 0, nItem番号1 + 1, nItem番号2 + 1 );\r
}\r
- private void tItemを交換する・レーン割付チップ( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_レーン割付チップ( int nItem番号1, int nItem番号2 )\r
{\r
for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
{\r
Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
if( ( ( cレーン.eレーン種別 == Cレーン.E種別.WAV ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtV ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsV ) )\r
{\r
- if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号1 + 1 ) )\r
+ if( cレーン.nレーン割付チップ_表0or1to1295 == ( nItem番号1 + 1 ) )\r
{\r
- cレーン.nレーン割付チップ・表0or1to1295 = nItem番号2 + 1;\r
+ cレーン.nレーン割付チップ_表0or1to1295 = nItem番号2 + 1;\r
}\r
- else if( cレーン.nレーン割付チップ・表0or1to1295 == ( nItem番号2 + 1 ) )\r
+ else if( cレーン.nレーン割付チップ_表0or1to1295 == ( nItem番号2 + 1 ) )\r
{\r
- cレーン.nレーン割付チップ・表0or1to1295 = nItem番号1 + 1;\r
+ cレーン.nレーン割付チップ_表0or1to1295 = nItem番号1 + 1;\r
}\r
- if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号1 + 1 ) )\r
+ if( cレーン.nレーン割付チップ_裏0or1to1295 == ( nItem番号1 + 1 ) )\r
{\r
- cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号2 + 1;\r
+ cレーン.nレーン割付チップ_裏0or1to1295 = nItem番号2 + 1;\r
}\r
- else if( cレーン.nレーン割付チップ・裏0or1to1295 == ( nItem番号2 + 1 ) )\r
+ else if( cレーン.nレーン割付チップ_裏0or1to1295 == ( nItem番号2 + 1 ) )\r
{\r
- cレーン.nレーン割付チップ・裏0or1to1295 = nItem番号1 + 1;\r
+ cレーン.nレーン割付チップ_裏0or1to1295 = nItem番号1 + 1;\r
}\r
}\r
}\r
}\r
- private void tItemを交換する・譜面上のチップ( int nItem番号1, int nItem番号2 )\r
+ private void tItemを交換する_譜面上のチップ( int nItem番号1, int nItem番号2 )\r
{\r
foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
{\r
case Cレーン.E種別.WAV:\r
case Cレーン.E種別.GtV:\r
case Cレーン.E種別.BsV:\r
- if( cチップ.n値・整数1to1295 == ( nItem番号1 + 1 ) )\r
+ if( cチップ.n値_整数1to1295 == ( nItem番号1 + 1 ) )\r
{\r
- cチップ.n値・整数1to1295 = nItem番号2 + 1;\r
+ cチップ.n値_整数1to1295 = nItem番号2 + 1;\r
}\r
- else if( cチップ.n値・整数1to1295 == ( nItem番号2 + 1 ) )\r
+ else if( cチップ.n値_整数1to1295 == ( nItem番号2 + 1 ) )\r
{\r
- cチップ.n値・整数1to1295 = nItem番号1 + 1;\r
+ cチップ.n値_整数1to1295 = nItem番号1 + 1;\r
}\r
break;\r
}\r