/// <summary> /// すぐに再生する。他の再生を待たずに。 /// </summary> /// <param name="e"></param> public void Play(SoundEnum e) { if (!dic.ContainsKey(e)) { var subFolder = e.IsKoma() ? KomaSoundPath : ReadOutSoundPath; var filename = Path.Combine(Path.Combine(SoundPath, subFolder), SoundHelper.FileNameOf(e)); var s = new SoundLoader(); s.ReadFile(filename); dic.Add(e, s); } var sound = dic[e]; sound.Play(); }
/// <summary> /// 再生queueに追加する。 /// このメソッドは毎回同じスレッドから呼び出されるものとする。 /// /// GlobalConfig.KifuReadOutがオフ(0)だと再生されない。 /// </summary> /// <param name=""></param> public void ReadOut(SoundEnum e) { if (TheApp.app.config.KifuReadOut == 0) { return; } if (!dic.ContainsKey(e)) { var subFolder = e.IsKoma() ? KomaSoundPath : ReadOutSoundPath; var filename = Path.Combine(Path.Combine(SoundPath, subFolder), SoundHelper.FileNameOf(e)); var s = new SoundLoader(); s.ReadFile(filename); dic.Add(e, s); } var sound = dic[e]; queue.AddQueue(sound); }
// -- 以下private /// <summary> /// 再生スレッド用のworker /// </summary> private void worker() { SoundLoader playing = null; while (!stop) { if (playing != null) { // 再生中のものがあるなら、その再生の終わりまで待機する。 if (!playing.IsPlaying()) { // 再生が終わっているので開放する。 //playing.Dispose(); // Soundのメモリ使用量は知れてるので一度読み込んだものを開放しないようにする。 playing = null; } } else { // 再生中ではないので、1つqueueから取り出して再生する。 SoundLoader sound = null; lock (lock_object) { if (queue.Count != 0) { sound = queue.Dequeue(); } } if (sound != null) { sound.Play(); playing = sound; // 10msで終わるとは考えられないのでこのあとSleep()して良い。 } } Thread.Sleep(10); // これくらいの再生遅延は許されるであろう。 } }
/// <summary> /// すぐに再生する。他の再生を待たずに。 /// </summary> /// <param name="e"></param> public void Play(SoundEnum e) { // global設定でオフになっているなら何もせずに帰る。 var config = TheApp.app.Config; if (config.EnableSound == 0) { return; } if (!dic.ContainsKey(e)) { var subFolder = e.IsKoma() ? KomaSoundPath : ReadOutSoundPath; var filename = Path.Combine(Path.Combine(SoundPath, subFolder), SoundHelper.FileNameOf(e)); var s = new SoundLoader(); s.ReadFile(filename); dic.Add(e, s); } var sound = dic[e]; sound.Play(); }