//------------------------------------------------------------------------ /*! * @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(); } }
//------------------------------------------------------------------------ // @brief 定期更新 //------------------------------------------------------------------------ public void Update() { //-------------------------------------------------------------------- // エラーチェック //-------------------------------------------------------------------- if (m_AudioClip == null || m_PlayState == null || m_PlayData == null) { return; } //-------------------------------------------------------------------- // 再生時間更新 //-------------------------------------------------------------------- m_PlayState.m_playTime += Time.deltaTime; //-------------------------------------------------------------------- // 各ステータスでの状態処理 //-------------------------------------------------------------------- switch (m_PlayState.m_playState) { case BGMPlayState.BGM_STATE_READY: //---------------------------------------------------------------- // 再生待ち時間チェック //---------------------------------------------------------------- { m_AudioSource.clip = m_AudioClip; m_AudioSource.loop = m_PlayData.dataLoop; m_AudioSource.PlayScheduled(m_PlayData.dataDelayTime); m_PlayState.m_playState = BGMPlayState.BGM_STATE_FADEIN; } break; case BGMPlayState.BGM_STATE_PLAYING: //---------------------------------------------------------------- // 再生中 //---------------------------------------------------------------- break; case BGMPlayState.BGM_STATE_FADEIN: //---------------------------------------------------------------- // フェードイン //---------------------------------------------------------------- { float fadeSpeed = 0.0f; if (m_PlayData.dataFadeTime <= 0.0f) { fadeSpeed = m_PlayData.dataPlayVolume; } else { fadeSpeed = m_PlayData.dataFadeSpeed * Time.deltaTime; } m_PlayState.m_playVolume += fadeSpeed; if (m_PlayState.m_playVolume >= m_PlayData.dataPlayVolume) { m_PlayState.m_playVolume = m_PlayData.dataPlayVolume; m_PlayState.m_playState = BGMPlayState.BGM_STATE_PLAYING; } } break; case BGMPlayState.BGM_STATE_FADEOUT: //---------------------------------------------------------------- // フェードアウト //---------------------------------------------------------------- { float fadeSpeed; // フェードアウト時間が0だった場合はボリュームが0になるようにする if (m_PlayState.m_stopFadeTime <= 0.0f) { fadeSpeed = m_PlayState.m_playVolume; } else { fadeSpeed = m_PlayState.m_stopFadeSpeed * Time.deltaTime; } m_PlayState.m_playVolume -= fadeSpeed; if (m_PlayState.m_playVolume <= 0.0f) { // ステータス停止 m_PlayState.m_playState = BGMPlayState.BGM_STATE_NONE; m_PlayState.m_playVolume = 0.0f; // 停止 m_AudioSource.Stop(); m_PlayData.Clear(); m_AudioSource.clip = null; m_AudioClip = null; } } break; case BGMPlayState.BGM_STATE_NONE: default: //---------------------------------------------------------------- // 無し //---------------------------------------------------------------- break; } //-------------------------------------------------------------------- // ボリューム設定 //-------------------------------------------------------------------- if (m_AudioSource.volume != (m_PlayState.m_playVolume * m_DuckingScale)) { m_AudioSource.volume = (m_PlayState.m_playVolume * m_DuckingScale); } }
//------------------------------------------------------------------------ /*! * @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; } }