public static void t現在のユーザConfigに従ってサウンドデバイスとすべての既存サウンドを再構築する() { #region [ すでにサウンドデバイスと演奏タイマが構築されていれば解放する。] //----------------- if (SoundDevice != null) { // すでに生成済みのサウンドがあれば初期状態に戻す。 CSound.tすべてのサウンドを初期状態に戻す(); // リソースは解放するが、CSoundのインスタンスは残す。 // サウンドデバイスと演奏タイマを解放する。 CCommon.tDispose(SoundDevice); SoundDevice = null; CCommon.tDispose(ref rc演奏用タイマ); // Global.SoundDevice を解放した後に解放すること。(Global.SoundDevice で参照されているため) } //----------------- #endregion #region [ 新しいサウンドデバイスを構築する。] //----------------- switch (SoundDeviceType) { case ESoundDeviceType.ExclusiveWASAPI: SoundDevice = new CSoundDeviceWASAPI(CSoundDeviceWASAPI.Eデバイスモード.Exclusive, SoundDelayExclusiveWASAPI, SoundUpdatePeriodExclusiveWASAPI); break; case ESoundDeviceType.SharedWASAPI: SoundDevice = new CSoundDeviceWASAPI(CSoundDeviceWASAPI.Eデバイスモード.Shared, SoundDelaySharedWASAPI, SoundUpdatePeriodSharedWASAPI); break; case ESoundDeviceType.ASIO: SoundDevice = new CSoundDeviceASIO(SoundDelayASIO, ASIODevice); break; case ESoundDeviceType.BASS: SoundDevice = new CSoundDeviceBASS(SoundUpdatePeriodBASS, SoundDelayBASS); break; case ESoundDeviceType.OpenAL: SoundDevice = new CSoundDeviceOpenAL(SoundDelayOpenAL, bUseOSTimer); break; default: throw new Exception(string.Format("未対応の SoundDeviceType です。[{0}]", SoundDeviceType.ToString())); } //----------------- #endregion #region [ 新しい演奏タイマを構築する。] //----------------- rc演奏用タイマ = new CSoundTimer(SoundDevice); //----------------- #endregion SoundDevice.nMasterVolume = _nMasterVolume; // サウンドデバイスに対して、マスターボリュームを再設定する CSound.tすべてのサウンドを再構築する(SoundDevice); // すでに生成済みのサウンドがあれば作り直す。 }
/// <summary> /// カウントを開始する。(double版) /// </summary> /// <param name="db開始値">最初のカウント値。</param> /// <param name="db終了値">最後のカウント値。</param> /// <param name="db間隔">カウント値を1増加させるのにかける時間(秒単位)。</param> /// <param name="timer">カウントに使用するタイマ。</param> public void t開始(double db開始値, double db終了値, double db間隔, CSoundTimer timer) { this.n開始値 = (float)db開始値; this.n終了値 = (float)db終了値; this.n間隔 = db間隔; this.timerdb = timer; this.n現在の経過時間ms = (float)this.timerdb.dbシステム時刻; this.n現在の値 = (int)db開始値; }
/// <summary> /// カウントを開始する。(double版) /// </summary> /// <param name="db開始値">最初のカウント値。</param> /// <param name="db終了値">最後のカウント値。</param> /// <param name="db間隔">カウント値を1増加させるのにかける時間(秒単位)。</param> /// <param name="timer">カウントに使用するタイマ。</param> public void t開始(double db開始値, double db終了値, double db間隔, CSoundTimer timer) { this.db開始値 = db開始値; this.db終了値 = db終了値; this._db間隔 = db間隔; this.timerdb = timer; this.db現在の経過時間 = this.timerdb.dbシステム時刻ms; this.db現在の値 = db開始値; }
/// <summary> /// カウントを開始する。(double版) /// </summary> /// <param name="db開始値">最初のカウント値。</param> /// <param name="db終了値">最後のカウント値。</param> /// <param name="db間隔">カウント値を1増加させるのにかける時間(秒単位)。</param> /// <param name="timer">カウントに使用するタイマ。</param> public void t開始(double db開始値, double db終了値, double db間隔, CSoundTimer timer) { this.db開始値 = db開始値; this.db終了値 = db終了値; this.db間隔 = db間隔; this.timerdb = timer; this.db現在の経過時間 = this.timerdb.dbシステム時刻; this.db現在の値 = db開始値; if (db間隔 <= 0) { db間隔 = -db間隔; } }
/// <summary>生成と同時に開始する。(double版)</summary> public CCounter(double db開始値, double db終了値, double db間隔, CSoundTimer timer) : this() { this.t開始(db開始値, db終了値, db間隔 * 1000.0f, timer); }
public void tInitialize(ESoundDeviceType soundDeviceType, int _nSoundDelayExclusiveWASAPI, int _nSoundDelayASIO, int _nASIODevice, int _nSoundDelayBASS, bool _bUseOSTimer) { //SoundDevice = null; // 後で再初期化することがあるので、null初期化はコンストラクタに回す rc演奏用タイマ = null; // Global.Bass 依存(つまりユーザ依存) nMixing = 0; SoundDelayExclusiveWASAPI = _nSoundDelayExclusiveWASAPI; SoundDelayASIO = _nSoundDelayASIO; SoundDelayBASS = _nSoundDelayBASS; ASIODevice = _nASIODevice; bUseOSTimer = _bUseOSTimer; ESoundDeviceType[] ESoundDeviceTypes = new ESoundDeviceType[6] { ESoundDeviceType.SharedWASAPI, ESoundDeviceType.ExclusiveWASAPI, ESoundDeviceType.ASIO, ESoundDeviceType.BASS, ESoundDeviceType.OpenAL, ESoundDeviceType.Unknown }; int n初期デバイス; switch (soundDeviceType) { case ESoundDeviceType.SharedWASAPI: n初期デバイス = 0; break; case ESoundDeviceType.ExclusiveWASAPI: n初期デバイス = 1; break; case ESoundDeviceType.ASIO: n初期デバイス = 2; break; case ESoundDeviceType.BASS: n初期デバイス = 3; break; case ESoundDeviceType.OpenAL: n初期デバイス = 4; break; default: n初期デバイス = 5; break; } for (SoundDeviceType = ESoundDeviceTypes[n初期デバイス]; ; SoundDeviceType = ESoundDeviceTypes[++n初期デバイス]) { try { t現在のユーザConfigに従ってサウンドデバイスとすべての既存サウンドを再構築する(); break; } catch (Exception e) { Trace.TraceError(e.ToString()); Trace.TraceError("An exception has occurred, but processing continues."); if (ESoundDeviceTypes[n初期デバイス] == ESoundDeviceType.Unknown) { Trace.TraceError(string.Format("サウンドデバイスの初期化に失敗しました。")); break; } } } }