// 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; }
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); }
//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; }