Пример #1
0
        /// <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();
                        }
                    }
                }
            }
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        // 绑定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;
            }
        }
Пример #6
0
 public string GetEffectPrefabPathByEffectType(MAudioIdType type)
 {
     return(GetEnumDes(type));
 }
Пример #7
0
        /// <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);
                }
            }
        }