/// <summary> /// BGM再生. /// </summary> /// <param name="type">Type.</param> public void Play(BgmType.eBgmType type) { // 同じ曲を再生しようとしていたら、何もしない. if (currentBgmDefine != null && type == currentBgmDefine.type) { return; } // すでにかかっていたら曲を止める. if (bgmAudioSource.isPlaying) { StopBgm(); } // typeから定義を取得. currentBgmDefine = bgmDefineList.bgmDefineList.FirstOrDefault(x => x.type == type); // クリップ取得. bgmAudioSource.clip = Resources.Load <AudioClip> (string.Format("BGM/{0}", currentBgmDefine.clipName)); // 定義の取得ができなかったら、ループ再生をしない. if (currentBgmDefine == null) { return; } // ループ時間を算出. loopTime = currentBgmDefine.loopSampleValue / currentBgmDefine.samplingRate; endTime = currentBgmDefine.endSampleValue / currentBgmDefine.samplingRate; // 再生中のBGMを監視し、ループ位置までいったらループする. bgmAudioSource.UpdateAsObservable() .Where(_ => bgmAudioSource.isPlaying) .Subscribe(_ => { if (bgmAudioSource.time >= endTime) { bgmAudioSource.time = loopTime; } }); // 再生. bgmAudioSource.Play(); }
/// <summary> /// bgmの再生を完全に止める. /// </summary> public void StopBgm() { currentBgmDefine = null; bgmAudioSource.Stop(); }