public void t再生する() { if (this.b読み込み未試行) { try { t読み込み(); } catch { this.b読み込み未試行 = false; } } if (this.b排他) { if (r最後に再生した排他システムサウンド != null) { r最後に再生した排他システムサウンド.t停止する(); } r最後に再生した排他システムサウンド = this; } CSound sound = this.rSound[this.n次に鳴るサウンド番号]; if (sound != null) { sound.t再生を開始する(this.bループ); } this.n次に鳴るサウンド番号 = 1 - this.n次に鳴るサウンド番号; }
public void t停止する() { if (this.rSound[0] != null) { this.rSound[0].t再生を停止する(); } if (this.rSound[1] != null) { this.rSound[1].t再生を停止する(); } if (r最後に再生した排他システムサウンド == this) { r最後に再生した排他システムサウンド = null; } }
internal static void Handle( IInputDevice keyboard, SoundGroupLevelController soundGroupLevelController, CSkin skin, bool isSongPreview) { var isAdjustmentPositive = keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightBracket); if (!(isAdjustmentPositive || keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftBracket))) { return; } ESoundGroup soundGroup; CSkin.Cシステムサウンド システムサウンド = null; if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) { soundGroup = ESoundGroup.SoundEffect; システムサウンド = skin.sound決定音; } else if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift)) { soundGroup = ESoundGroup.Voice; システムサウンド = skin.soundゲーム開始音; } else if (isSongPreview) { soundGroup = ESoundGroup.SongPreview; } else { soundGroup = ESoundGroup.SongPlayback; } soundGroupLevelController.AdjustLevel(soundGroup, isAdjustmentPositive); システムサウンド?.t再生する(); }
/// <summary> /// songlist.dbからの曲リスト構築 /// </summary> public void t曲リストの構築1() { // !注意! // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、 // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16) // 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9) DateTime now = DateTime.Now; try { #region [ 0) システムサウンドの構築 ] //----------------------------- CDTXMania.stage起動.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築; Trace.TraceInformation("0) システムサウンドを構築します。"); Trace.Indent(); try { CDTXMania.Skin.bgm起動画面.t再生する(); for (int i = 0; i < CDTXMania.Skin.nシステムサウンド数; i++) { if (!CDTXMania.Skin[i].b排他) // BGM系以外のみ読み込む。(BGM系は必要になったときに読み込む) { CSkin.Cシステムサウンド cシステムサウンド = CDTXMania.Skin[i]; if (!CDTXMania.bコンパクトモード || cシステムサウンド.bCompact対象) { try { cシステムサウンド.t読み込み(); Trace.TraceInformation("システムサウンドを読み込みました。({0})", cシステムサウンド.strファイル名); //if ( ( cシステムサウンド == CDTXMania.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 ) //{ // cシステムサウンド.t再生する(); //} } catch (FileNotFoundException) { Trace.TraceWarning("システムサウンドが存在しません。({0})", cシステムサウンド.strファイル名); } catch (Exception e) { Trace.TraceError(e.Message); Trace.TraceWarning("システムサウンドの読み込みに失敗しました。({0})", cシステムサウンド.strファイル名); } } } } lock (CDTXMania.stage起動.list進行文字列) { CDTXMania.stage起動.list進行文字列.Add("SYSTEM SOUND...OK"); } } finally { Trace.Unindent(); } //----------------------------- #endregion if (CDTXMania.bコンパクトモード) { Trace.TraceInformation("コンパクトモードなので残りの起動処理は省略します。"); return; } #region [ 00) songlist.dbの読み込みによる曲リストの構築 ] //----------------------------- CDTXMania.stage起動.eフェーズID = CStage.Eフェーズ.起動00_songlistから曲リストを作成する; Trace.TraceInformation("1) songlist.dbを読み込みます。"); Trace.Indent(); try { if (!CDTXMania.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる) { CSongs管理 s = new CSongs管理(); s = Deserialize(strPathSongList); // 直接this.Songs管理にdeserialize()結果を代入するのは避ける。nullにされてしまうことがあるため。 if (s != null) { this.Songs管理 = s; } int scores = this.Songs管理.n検索されたスコア数; Trace.TraceInformation("songlist.db の読み込みを完了しました。[{0}スコア]", scores); lock (CDTXMania.stage起動.list進行文字列) { CDTXMania.stage起動.list進行文字列.Add("SONG LIST...OK"); } } else { Trace.TraceInformation("初回の起動であるかまたはDTXManiaのバージョンが上がったため、songlist.db の読み込みをスキップします。"); lock (CDTXMania.stage起動.list進行文字列) { CDTXMania.stage起動.list進行文字列.Add("SONG LIST...SKIPPED"); } } } finally { Trace.Unindent(); } #endregion #region [ 1) songs.db の読み込み ] //----------------------------- CDTXMania.stage起動.eフェーズID = CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築; Trace.TraceInformation("2) songs.db を読み込みます。"); Trace.Indent(); try { if (!CDTXMania.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる) { try { this.Songs管理.tSongsDBを読み込む(strPathSongsDB); } catch { Trace.TraceError("songs.db の読み込みに失敗しました。"); } int scores = (this.Songs管理 == null) ? 0 : this.Songs管理.nSongsDBから取得できたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Songs管理 がnullの場合があるので注意 Trace.TraceInformation("songs.db の読み込みを完了しました。[{0}スコア]", scores); lock (CDTXMania.stage起動.list進行文字列) { CDTXMania.stage起動.list進行文字列.Add("SONG DATABASE...OK"); } } else { Trace.TraceInformation("初回の起動であるかまたはDTXManiaのバージョンが上がったため、songs.db の読み込みをスキップします。"); lock (CDTXMania.stage起動.list進行文字列) { CDTXMania.stage起動.list進行文字列.Add("SONG DATABASE...SKIPPED"); } } } finally { Trace.Unindent(); } //----------------------------- #endregion } finally { CDTXMania.stage起動.eフェーズID = CStage.Eフェーズ.起動7_完了; TimeSpan span = (TimeSpan)(DateTime.Now - now); Trace.TraceInformation("起動所要時間: {0}", span.ToString()); lock (this) // #28700 2012.6.12 yyagi; state change must be in finally{} for exiting as of compact mode. { state = DTXEnumState.CompletelyDone; } } }
private void t曲リストの構築() { // !注意! // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、 // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16) DateTime now = DateTime.Now; string strPathSongsDB = CDTXMania.strEXEのあるフォルダ + "songs.db"; string strPathSongList = CDTXMania.strEXEのあるフォルダ + "songlist.db"; try { #region [ 0) システムサウンドの構築 ] //----------------------------- base.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築; Trace.TraceInformation("0) システムサウンドを構築します。"); Trace.Indent(); try { for (int i = 0; i < CDTXMania.Skin.nシステムサウンド数; i++) { CSkin.Cシステムサウンド cシステムサウンド = CDTXMania.Skin[i]; if (!CDTXMania.bコンパクトモード || cシステムサウンド.bCompact対象) { try { cシステムサウンド.t読み込み(); Trace.TraceInformation("システムサウンドを読み込みました。({0})", new object[] { cシステムサウンド.strファイル名 }); if ((cシステムサウンド == CDTXMania.Skin.bgm起動画面) && cシステムサウンド.b読み込み成功) { cシステムサウンド.t再生する(); } } catch (FileNotFoundException) { Trace.TraceWarning("システムサウンドが存在しません。({0})", new object[] { cシステムサウンド.strファイル名 }); } catch (Exception exception) { Trace.TraceError(exception.Message); Trace.TraceWarning("システムサウンドの読み込みに失敗しました。({0})", new object[] { cシステムサウンド.strファイル名 }); } } } lock (this.list進行文字列) { this.list進行文字列.Add("Loading system sounds ... OK "); } } finally { Trace.Unindent(); } //----------------------------- #endregion if (CDTXMania.bコンパクトモード) { Trace.TraceInformation("コンパクトモードなので残りの起動処理は省略します。"); return; } #region [ 00) songlist.dbの読み込みによる曲リストの構築 ] //----------------------------- base.eフェーズID = CStage.Eフェーズ.起動00_songlistから曲リストを作成する; Trace.TraceInformation("1) songlist.dbを読み込みます。"); Trace.Indent(); try { if (!CDTXMania.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる) { try { CDTXMania.Songs管理.tSongListDBを読み込む(strPathSongList); } catch { Trace.TraceError("songlist.db の読み込みに失敗しました。"); } int scores = (CDTXMania.Songs管理 == null) ? 0 : CDTXMania.Songs管理.n検索されたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Songs管理 がnullの場合があるので注意 Trace.TraceInformation("songlist.db の読み込みを完了しました。[{0}スコア]", scores); lock (this.list進行文字列) { this.list進行文字列.Add("Loading songlist.db ... OK"); } } else { Trace.TraceInformation("初回の起動であるかまたはDTXManiaのバージョンが上がったため、songlist.db の読み込みをスキップします。"); lock (this.list進行文字列) { this.list進行文字列.Add("Loading songlist.db ... Skip"); } } } finally { Trace.Unindent(); } #endregion #region [ 1) songs.db の読み込み ] //----------------------------- base.eフェーズID = CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築; Trace.TraceInformation("2) songs.db を読み込みます。"); Trace.Indent(); try { if (!CDTXMania.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる) { try { CDTXMania.Songs管理.tSongsDBを読み込む(strPathSongsDB); } catch { Trace.TraceError("songs.db の読み込みに失敗しました。"); } int scores = (CDTXMania.Songs管理 == null) ? 0 : CDTXMania.Songs管理.nSongsDBから取得できたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Songs管理 がnullの場合があるので注意 Trace.TraceInformation("songs.db の読み込みを完了しました。[{0}スコア]", scores); lock (this.list進行文字列) { this.list進行文字列.Add("Loading songs.db ... OK"); } } else { Trace.TraceInformation("初回の起動であるかまたはDTXManiaのバージョンが上がったため、songs.db の読み込みをスキップします。"); lock (this.list進行文字列) { this.list進行文字列.Add("Loading songs.db ... Skip"); } } } finally { Trace.Unindent(); } //----------------------------- #endregion } finally { base.eフェーズID = CStage.Eフェーズ.起動7_完了; TimeSpan span = (TimeSpan)(DateTime.Now - now); Trace.TraceInformation("起動所要時間: {0}", new object[] { span.ToString() }); } }