/// <summary> /// 恢复播放 /// </summary> /// <param name="configID"></param> /// <param name="audioInfo"></param> public void Resume(MAudioIdType configID, MAudio audioInfo = null) { if (_single_music != null && _single_music.audioId == configID) { _single_music.Resume(); return; } var L = mPlayingSoundEffectDict.GetList(); for (int i = 0, count = L.Count; i < count; i++) { var kv = L[i]; if (kv.Key == configID) { var ValueList = kv.Value; if (audioInfo != null) { for (int j = 0, VCount = ValueList.Count; j < VCount; j++) { if (audioInfo == ValueList[j]) { ValueList[j].Resume(); } } } else { for (int j = 0, VCount = ValueList.Count; j < VCount; j++) { ValueList[j].Resume(); } } } } }
/// <summary> /// 初始化AudioObject /// </summary> /// <param name="path"></param> public void InitAudioObject(MAudioIdType configId, Vector3 pos, float durTime, int audioType, bool loop, int loopCount) { mAudioObject = MAudioObject.Get(pos); var path = GetEffectPrefabPathByEffectType(configId); if (string.IsNullOrEmpty(path)) { return; } this.duarationTime = durTime; this.audioType = audioType; this.isLoop = loop; this.mLoopCount = loopCount; var source = mAudioObject.mAudio; var loader = ResManager.Instance.Load(path, false); if (loader == null) { #if DEBUG //Logger.LogError("InitAudioObject loader Not Found : " + path); #endif return; } var clip = loader.mMainAsset as AudioClip; if (clip == null) { #if DEBUG //Logger.LogError("InitAudioObject clip Not Found : " + path); #endif return; } source.clip = clip; clipLenght = clip.length; if (curAudioBigType == E_MAudioBigType.EFFECT) { source.minDistance = 5; source.maxDistance = 1000; source.dopplerLevel = 1; source.rolloffMode = AudioRolloffMode.Linear; source.pitch = 1f; source.spatialBlend = 1F; source.ignoreListenerVolume = false; source.spread = 180f; } else { source.spatialBlend = 0f; GameObject.DontDestroyOnLoad(mAudioObject.mGo); } source.volume = targetVolume; mAudioObject.mGo.name = CurAudioType + "----" + path; mAudioObject.mAudioInfo = this; source.time = mTotalPlayTime % clipLenght; source.loop = isLoop; }
public virtual void Clean(MAudioIdType configID) { this.Stop(configID); MAudioIdType config; for (_i = 0, _leni = _playingSoundEffectConfigList.Count; _i < _leni; _i++) { config = _playingSoundEffectConfigList[_i]; if (config == configID) { CleanOneAudio(config); } } }
void CleanOneAudio(MAudioIdType config) { List <MAudio> audioList = null; if (mPlayingSoundEffectDict.TryGetValue(config, out audioList)) { if (audioList != null) { for (int i = 0, count = audioList.Count; i < count; i++) { audioList[i].DoClean(); _idleAudioUnitList.Add(audioList[i]); } } mPlayingSoundEffectDict.Remove(config); _playingSoundEffectConfigList.Remove(config); } }
// 绑定audioObject对象 public void AttachAudioObject(MAudioIdType configId, Transform tf, float durationTime, int audioType, bool loop, int loopCount) { audioId = configId; tfPos = tf.position; if (configId != MAudioIdType.None) { mSate = E_AudioPlayState.Loading; //加入特定的路径,也支持异步绑定 curAudioBigType = MAudioManager.GetAudioBigType(CurAudioType); mTotalPlayTime = 0; InitAudioObject(configId, tfPos, durationTime, audioType, loop, loopCount); mSate = E_AudioPlayState.Ready; } else { mSate = E_AudioPlayState.Sleeping; } }
public string GetEffectPrefabPathByEffectType(MAudioIdType type) { return(GetEnumDes(type)); }
/// <summary> /// <summary> /// 播放 ,音频id 和父对象tf ,对应audioresconfig 表格的id /// </summary> /// <param name="configID"></param> /// <param name="tf"></param> public MAudio Play(MAudioIdType configID, Transform tf, float durationTime, int audioType, bool loop, int loopCount) { MAudioIdType configId = configID; List <MAudio> mPlayingList; if (mPlayingSoundEffectDict.TryGetValue(configId, out mPlayingList)) { if (mPlayingList == null) { mPlayingList = new List <MAudio>(); mPlayingSoundEffectDict[configId] = mPlayingList; } } else { mPlayingList = new List <MAudio>(); mPlayingSoundEffectDict.Add(configId, mPlayingList); _playingSoundEffectConfigList.Add(configId); } var mAudioType = audioType; if (mAudioType == E_MAudioType.LOADING_AUDIO || mAudioType == E_MAudioType.BGM)//TODO:改为音效类型 { // 处于loading时期 ,禁止播放其他类型音效,避免野指针 if (_single_music == null) { _single_music = MAudio.Get(); } _single_music.AttachAudioObject(configId, tf, durationTime, audioType, loop, loopCount); return(_single_music); } else { // 处于loading时期 ,禁止播放其他类型音效,避免野指针 //音效// if (mPlayingList.Count < maxOverlay) { MAudio audio = null; audio = MAudio.Get(); if (audio.state != E_AudioPlayState.Sleeping) { audio = null; audio = MAudio.Get(); } mPlayingSoundEffectDict[configId].Add(audio); audio.AttachAudioObject(configId, tf, durationTime, audioType, loop, loopCount); return(audio); } else { for (int i = 0, count = mPlayingList.Count; i < count; i++) { var A = mPlayingList[i]; if (A.state == E_AudioPlayState.Pause) { A.Resume(); return(A); } else if (A.state == E_AudioPlayState.Sleeping) { A.Play(true); return(A); } } return(null); } } }