Example #1
0
        // Use this for initialization
        void Awake()
        {
            s_instance = this;
            GameObject pool = new GameObject("AudioSourcePool");

            pool.transform.parent = transform;
            for (int i = 0; i < m_audioSourcePoolSize; ++i)
            {
                GameObject newAudioSource = new GameObject("PooledAudioSource");
                newAudioSource.transform.parent = pool.transform;

                AudioSource aSource = newAudioSource.AddComponent <AudioSource>();

                AudioSourcePoolItem aspi = new AudioSourcePoolItem();
                aspi.m_audioSource  = aSource;
                aSource.enabled     = false;
                aSource.rolloffMode = m_defaultRolloffMode;
                aSource.maxDistance = m_defaultMaxDistance;
                aSource.minDistance = m_defaultMinDistance;
                aspi.m_index        = i;
                m_audioSourcePool.Add(aspi);
            }

            BaseEventReceiveAction[] evrs = GetComponentsInChildren <BaseEventReceiveAction>();
            foreach (BaseEventReceiveAction evr in evrs)
            {
                string[] events = evr.GetEvents();
                if (events != null)
                {
                    foreach (string ev in events)
                    {
                        if (!m_eventReceivers.ContainsKey(ev))
                        {
                            m_eventReceivers[ev] = new List <BaseEventReceiveAction>();
                        }
                        m_eventReceivers[ev].Add(evr);
                    }
                }
            }

            gameObject.AddComponent <AudioListener>();

            transform.position = Vector3.zero;
            m_lastDSPTime      = AudioSettings.dspTime;
#if UNITY_EDITOR
            m_startTime = AudioSettings.dspTime;
#endif
        }
Example #2
0
        public void UnlinkSource(AudioSourcePoolItem item)
        {
            //item.m_audioSource.Stop();
            //item.m_audioSource.enabled = false;
            //item.m_audioSource.clip = null;
            // flush test
            GameObject go = item.m_audioSource.gameObject;

            Destroy(item.m_audioSource);
            item.m_audioSource             = go.AddComponent <AudioSource>();
            item.m_audioSource.enabled     = false;
            item.m_audioSource.rolloffMode = m_defaultRolloffMode;
            item.m_audioSource.maxDistance = m_defaultMaxDistance;
            item.m_audioSource.minDistance = m_defaultMinDistance;
            item.m_user = null;
        }
Example #3
0
        public AudioSourcePoolItem TryClaimPoolSource(ActiveCue cue)
        {
            AudioSourcePoolItem bestSteal   = null;
            int   lowestImportance          = cue.GetImportance();
            float quietestSimilarImportance = 1.0f;

            foreach (AudioSourcePoolItem aspi in m_audioSourcePool)
            {
                if (aspi.m_user == null)
                {
                    aspi.m_user = cue;
                    return(aspi);
                }
                else
                {
                    if (aspi.m_user.GetImportance() < cue.GetImportance())
                    {
                        if (aspi.m_user.GetImportance() < lowestImportance)
                        {
                            lowestImportance = aspi.m_user.GetImportance();
                            bestSteal        = aspi;
                        }
                    }
                    else if (aspi.m_user.GetImportance() == lowestImportance)
                    {
                        if (aspi.m_user.GetTheoreticalVolume() < quietestSimilarImportance)
                        {
                            quietestSimilarImportance = aspi.m_user.GetTheoreticalVolume();
                            bestSteal = aspi;
                        }
                    }
                }
            }
            if (bestSteal != null)
            {
                bestSteal.m_user.Virtualise();
                bestSteal.m_user = cue;
                return(bestSteal);
            }
            return(null);
        }
Example #4
0
        //void OnGUI()
        //{
        //    GUILayout.Label(playingPercussionItems.Count.ToString());
        //}

        void Update()
        {
            for (int i = playingPercussionItems.Count - 1; i >= 0; i--)
            {
                if (!playingPercussionItems[i].IsPlaying())
                {
                    playingPercussionItems[i].TryRelease();
                    playingPercussionItems.RemoveAt(i);
                }
            }

            for (int i = scheduledPercussionItems.Count - 1; i >= 0; i--)
            {
                scheduledPercussion = scheduledPercussionItems[i];

                if (audioSourcePool.AvailableCount > 0)
                {
                    audioSourcePoolItem = audioSourcePool.Acquire();

                    if (!audioSourcePoolItem.audioSource)
                    {
                        audioSourcePoolItem.audioSource             = gameObject.AddComponent <AudioSource>();
                        audioSourcePoolItem.audioSource.playOnAwake = false;
                    }

                    audioSourcePoolItem.Schedule(scheduledPercussion);
                    playingPercussionItems.Add(audioSourcePoolItem);
                    playingPercussionItems.Sort((a, b) =>
                    {
                        return(-1 * a.dspTime.CompareTo(b.dspTime));
                    });

                    scheduledPercussionItems.RemoveAt(i);
                }
            }
        }
        // Use this for initialization
        void Awake()
        {
            s_instance = this;
            GameObject pool = new GameObject("AudioSourcePool");
            pool.transform.parent = transform;
            for (int i = 0; i < m_audioSourcePoolSize; ++i)
            {
                GameObject newAudioSource = new GameObject("PooledAudioSource");
                newAudioSource.transform.parent = pool.transform;

                AudioSource aSource = newAudioSource.AddComponent<AudioSource>();

                AudioSourcePoolItem aspi = new AudioSourcePoolItem();
                aspi.m_audioSource = aSource;
                aSource.enabled = false;
                aSource.rolloffMode = m_defaultRolloffMode;
                aSource.maxDistance = m_defaultMaxDistance;
                aSource.minDistance = m_defaultMinDistance;
                aspi.m_index = i;
                m_audioSourcePool.Add(aspi);
            }

            BaseEventReceiveAction[] evrs = GetComponentsInChildren<BaseEventReceiveAction>();
            foreach (BaseEventReceiveAction evr in evrs)
            {
                string[] events = evr.GetEvents();
                if (events != null)
                {
                    foreach (string ev in events)
                    {
                        if (!m_eventReceivers.ContainsKey(ev))
                        {
                            m_eventReceivers[ev] = new List<BaseEventReceiveAction>();
                        }
                        m_eventReceivers[ev].Add(evr);
                    }
                }
            }

            gameObject.AddComponent<AudioListener>();

            transform.position = Vector3.zero;
            m_lastDSPTime = AudioSettings.dspTime;
            #if UNITY_EDITOR
            m_startTime = AudioSettings.dspTime;
            #endif
        }
 public void UnlinkSource(AudioSourcePoolItem item)
 {
     //item.m_audioSource.Stop();
     //item.m_audioSource.enabled = false;
     //item.m_audioSource.clip = null;
     // flush test
     GameObject go = item.m_audioSource.gameObject;
     Destroy(item.m_audioSource);
     item.m_audioSource = go.AddComponent<AudioSource>();
     item.m_audioSource.enabled = false;
     item.m_audioSource.rolloffMode = m_defaultRolloffMode;
     item.m_audioSource.maxDistance = m_defaultMaxDistance;
     item.m_audioSource.minDistance = m_defaultMinDistance;
     item.m_user = null;
 }