/// <summary> /// 再生中のデータを取得 /// </summary> /// <returns></returns> public BGMPlayData[] GetPlayingBGM() { List <BGMPlayData> playDatas = new List <BGMPlayData>(); BGMAudioSource audio = null; for (int i = 0; i < m_BGMAudioSource.Length; ++i) { audio = m_BGMAudioSource[i]; if (audio.playState != BGMPlayState.BGM_STATE_PLAYING && audio.playState != BGMPlayState.BGM_STATE_FADEIN) { continue; } if (audio.playData != null) { BGMPlayData playData = new BGMPlayData(); playData.Setup(audio.playData); playDatas.Add(playData); } } return(playDatas.ToArray()); }
//------------------------------------------------------------------------ /*! * @brief 再生済みチェック */ //------------------------------------------------------------------------ private bool IsPlayingSound(BGMPlayData data) { // 全てのオーディオソースを検索して再生中でないかを確認 BGMAudioSource src = null; for (int i = 0; i < m_BGMAudioSource.Length; i++) { src = m_BGMAudioSource[i]; if (src == null) { continue; } if (src.playState == BGMPlayState.BGM_STATE_NONE) { continue; } // 指定のサウンドを既に再生していないかチェック if (src.ChkPlayingSound(data) == false) { continue; } // 同じサウンドでもフェードアウト中なら再生していないことにする if (src.playState == BGMPlayState.BGM_STATE_FADEOUT) { return(false); } return(true); } return(false); }
//------------------------------------------------------------------------ /*! * @brief 空き再生データ取得 * @return PlayData [未使用領域] */ //------------------------------------------------------------------------ private BGMPlayData GetBlankPlayData() { BGMPlayData blankData = null; // 未使用再生データを検索 BGMPlayData data = null; for (int i = 0; i < m_BGMPlayData.Length; i++) { data = m_BGMPlayData[i]; if (data == null) { continue; } // 使用中かどうかチェック if (data.dataUsing == true) { continue; } blankData = data; break; } // 未使用データ領域を返す return(blankData); }
//------------------------------------------------------------------------ // @brief 指定のオーディオリソースが再生中か // @retval bool [再生中/異なるオーディオリソース] //------------------------------------------------------------------------ public bool ChkPlayingSound(BGMPlayData data) { if (m_PlayData.dataBGMPath != data.dataBGMPath) { return(false); } return(true); }
//------------------------------------------------------------------------ // @brief セットアップ // @param[in] BGMPlayData (data) 再生設定 //------------------------------------------------------------------------ public void Setup(BGMPlayData data) { if (data == null) { return; } m_dataLoop = data.m_dataLoop; m_dataUsing = true; m_dataBGMPath = data.m_dataBGMPath; m_dataPlayVolume = data.m_dataPlayVolume; m_dataDelayTime = data.m_dataDelayTime; m_dataFadeTime = data.m_dataFadeTime; m_dataFadeSpeed = data.m_dataFadeSpeed; m_dataAudioClip = data.m_dataAudioClip; }
//------------------------------------------------------------------------ /*! * @brief BGM再生 */ //------------------------------------------------------------------------ public void PlayBGM(AudioClip clip, float volume, double delayTime, float fadeTime, bool loop) { // 再生リクエスト保存領域検索 BGMPlayData blankData = GetBlankPlayData(); if (blankData == null) { return; } // 再生リクエストセットアップ blankData.Setup(clip, volume, delayTime, fadeTime, loop); // 既に再生しているものは受け付けない if (IsPlayingSound(blankData) == true) { blankData.Clear(); } }
static public void PlayBGM(BGMPlayData playData) { if (playData != null || BGMManager.HasInstance) { if (playData.dataAudioClip == null) { BGMManager.Instance.PlayBGM(playData.dataBGMPath, playData.dataPlayVolume, playData.dataDelayTime, playData.dataFadeTime, playData.dataLoop); } else { BGMManager.Instance.PlayBGM(playData.dataAudioClip, playData.dataPlayVolume, playData.dataDelayTime, playData.dataFadeTime, playData.dataLoop); } } }
//------------------------------------------------------------------------ /*! * @brief 開始処理 */ //------------------------------------------------------------------------ protected override void Awake() { base.Awake(); //-------------------------------------------------------------------- // データ領域作成 //-------------------------------------------------------------------- for (int i = 0; i < m_BGMPlayData.Length; i++) { m_BGMPlayData[i] = new BGMPlayData(); } //-------------------------------------------------------------------- // 再生管理クラス生成 //-------------------------------------------------------------------- for (int i = 0; i < m_BGMAudioSource.Length; i++) { m_BGMAudioSource[i] = new BGMAudioSource(); m_BGMAudioSource[i].Setup(m_AudioSource[i]); } }
//------------------------------------------------------------------------ // @brief 再生 //------------------------------------------------------------------------ public void Play(BGMPlayData data) { //-------------------------------------------------------------------- // エラーチェック //-------------------------------------------------------------------- if (data == null) { return; } #if BUILD_TYPE_DEBUG Debug.Log("CALL BGMManager#Play:" + data.dataBGMPath); #endif if (data.dataBGMPath.IsNullOrEmpty()) { Debug.Log("bgmPath is null or empty"); return; } // AssetBundle読み込み終了時にactionを呼ばれるとdataの中身が保障されないので一旦ローカルに保存 BGMPlayData _data = new BGMPlayData(); _data.Setup(data); Action <AudioClip> action = (clip) => { //-------------------------------------------------------------------- // 再生設定 //-------------------------------------------------------------------- m_PlayData.Setup(_data); //-------------------------------------------------------------------- // オーディオクリップセット //-------------------------------------------------------------------- m_AudioClip = clip; //-------------------------------------------------------------------- // ステータス設定 //-------------------------------------------------------------------- m_PlayState.m_playTime = 0.0f; m_PlayState.m_playVolume = 0.0f; m_PlayState.m_playState = BGMPlayState.BGM_STATE_READY; }; if (data.dataAudioClip != null) { action(data.dataAudioClip); return; } if (data.dataBGMPath == BGMManager.RESOURCE_BGM_01_1) { string res_path = GlobalDefine.DATAPATH_SOUND_BGM + data.dataBGMPath; AudioClip clip = Resources.Load(res_path) as AudioClip; action(clip); return; } string path = data.dataBGMPath; if (path.StartsWith(BGMManager.ASSETBUNELE_BATTLE_PREFIX)) { string asset_bundle_name = "pack_" + path.Substring(0, (BGMManager.ASSETBUNELE_BATTLE_PREFIX + "0000").Length); AssetBundler.Create().SetAsAudioClip(asset_bundle_name, path, (clip) => { if (clip == null) { Debug.LogError("NOT_FOUND_AUDIOCLIP:" + path); return; } action(clip); } ).Load(); } else { AssetBundler.Create().SetAsAudioClip(BGMManager.ASSETBUNELE_MENU, path, (clip) => { if (clip == null) { Debug.LogError("NOT_FOUND_AUDIOCLIP:" + path); return; } action(clip); }).Load(); } }
//------------------------------------------------------------------------ /*! * @brief 定期更新処理 */ //------------------------------------------------------------------------ void Update() { if (!LocalSaveManager.HasInstance) { return; } //-------------------------------------------------------------------- // Mute設定 //-------------------------------------------------------------------- if (mIsMute == false) { LocalSaveOption cOption = LocalSaveManager.Instance.LoadFuncOption(); if (cOption != null) { bool bOptionActiveBGM = (cOption.m_OptionBGM == (int)LocalSaveDefine.OptionBGM.OFF); Mute(bOptionActiveBGM); } } else { Mute(true); } //-------------------------------------------------------------------- // 再生リクエスト処理 //-------------------------------------------------------------------- BGMPlayData data = null; for (int i = 0; i < m_BGMPlayData.Length; i++) { data = m_BGMPlayData[i]; if (data == null) { continue; } if (data.dataUsing == false) { continue; } // 再生クラスの空きを検索 BGMAudioSource audio = null; for (int j = 0; j < m_BGMAudioSource.Length; j++) { audio = m_BGMAudioSource[j]; if (audio == null) { continue; } if (audio.playState != BGMPlayState.BGM_STATE_NONE) { continue; } // 再生 audio.Play(data); data.Clear(); break; } } //-------------------------------------------------------------------- // ダッキング処理 //-------------------------------------------------------------------- if (mDuckingTime != 0.0f && mDuckingTime > AudioSettings.dspTime) { if (mDuckingEnable == false) { StartCoroutine(TransVolume(1.0f, 0.5f, 0.05f, true)); } } else { if (mDuckingEnable == true) { StartCoroutine(TransVolume(0.5f, 1.0f, 0.6f, false)); } } //-------------------------------------------------------------------- // 再生管理クラス更新 //-------------------------------------------------------------------- for (int i = 0; i < m_BGMAudioSource.Length; i++) { BGMAudioSource audio = m_BGMAudioSource[i]; if (audio == null) { continue; } if (audio.playState != BGMPlayState.BGM_STATE_READY && audio.playState != BGMPlayState.BGM_STATE_PLAYING && audio.playState != BGMPlayState.BGM_STATE_FADEIN && audio.playState != BGMPlayState.BGM_STATE_FADEOUT) { continue; } // 再生情報更新 audio.Update(); // ダッキング処理 audio.duckingScale = mDuckingVolumeScale; } }