/// <summary> /// Garbage collection, a coroutine that keeps on running till the object is destroyed /// </summary> private IEnumerator AddAudioSourceCR(AudioSourceContainer source) { Instance.AudioSources.Add(source); float TimeStopped = 0; // Keep Running till it has stopped for one second while (TimeStopped < 0.5f) { if (source == null) { yield break; } if (source.AudioSource.time == 0) { TimeStopped += Time.deltaTime; } else { TimeStopped = 0; } yield return(null); } Instance.Destroy(source); //source = null; }
public static AudioSourceContainer Play(AudioSample sample, Vector3 position) { AudioSourceContainer soundObject = RegisterAndCreateAudioSourceContainer(sample); soundObject.transform.position = position; return(Play(soundObject)); }
private void Destroy(AudioSourceContainer source) { //Debug.Log("DESTROY " + source.gameObject.name); AudioLayerSettings settings = AudioLayerManager.GetAudioLayerSettings(source.Layer); Instance.AudioSources.Remove(source); GameObject.DestroyImmediate(source.gameObject); settings.ClipsPlaying--; }
private static AudioSourceContainer RegisterAndCreateAudioSourceContainer(AudioSample sample) { GameObject soundObject = AudioSourceContainer.CreateContainer(sample); AudioSourceContainer cont = soundObject.GetComponent <AudioSourceContainer>(); AudioLayerSettings audioLayerSettings = AudioLayerManager.GetAudioLayerSettings(sample.Layer); //Register Instance.AddAudioSource(cont); audioLayerSettings.ClipsPlaying++; return(cont); }
private static void ResumeUnmuteEtc(AudioSourceContainer con1) { if (!con1.AudioSource.isPlaying) { con1.AudioSource.Play(); } AudioLayerSettings settings = AudioLayerManager.GetAudioLayerSettings(con1.Layer); if (!settings.Mute) { con1.AudioSource.mute = false; } }
public static GameObject CreateContainer(AudioSample sample) { GameObject soundObject = new GameObject(); soundObject.name = "AudioSourceObject " + sample.Name; AudioSourceContainer container = soundObject.AddComponent <AudioSourceContainer>(); container.AudioSource = soundObject.AddComponent <AudioSource>(); container.Name = sample.Name; container.Sample = sample; container.SetSettingsFromSample(sample); return(soundObject); }
private static IEnumerator crossFadeCR(AudioSample sampleFrom, AudioSample sampleTO, float duration) { float dt = 0; AudioSourceContainer con1 = FindOrPlay(sampleFrom); AudioSourceContainer con2 = FindOrPlay(sampleTO); float v1 = con1.VolumeModifier; //con1.AudioSource.volume; float v2 = con2.VolumeModifier; //con2.AudioSource.volume; ResumeUnmuteEtc(con1); ResumeUnmuteEtc(con2); con2.AudioSource.Play(); //Debug.Log("XF in AM: " + con1.VolumeModifier + "," + con2.VolumeModifier + " dur " + duration + " dt " + dt + " " + con1.gameObject.GetInstanceID() + ", " + con2.gameObject.GetInstanceID()); float startTime = Time.timeSinceLevelLoad; while (dt < duration) { float t = dt / duration; con1.VolumeModifier = Mathf.Max((1 - t), 0) * v1; con2.VolumeModifier = Mathf.Min(t, 1) * v2; //Debug.Log(con1.AudioSource.volume + " " + con2.AudioSource.volume); dt = Time.timeSinceLevelLoad - startTime; yield return(null); } //Debug.Log("XF FIN in AM: " + con1.VolumeModifier + "," + con2.VolumeModifier + " dur " + duration + " dt " + dt); con2.VolumeModifier = v2; con1.VolumeModifier = v1; con1.AudioSource.mute = true; MuteAndDestroyAfter(con1, 5.0f); //con1.AudioSource.volume = 0; //con1.AudioSource.Stop(); }
private static IEnumerator MuteAndDestroyAfterCR(AudioSourceContainer source, float time) { source.AudioSource.mute = true; float dt = 0; //Debug.Log("MuteAndDestroyAfterCR"); while (dt < time && source.AudioSource.mute) { dt += Time.deltaTime; yield return(null); } if (source.AudioSource.mute) { Instance.Destroy(source); } yield break; }
public static void Stop(AudioSourceContainer source) { source.AudioSource.Stop(); }
private void AddAudioSource(AudioSourceContainer source) { // Handle destroy // Handle limit StartCoroutine(AddAudioSourceCR(source)); }
private static void MuteAndDestroyAfter(AudioSourceContainer source, float time) { Instance.StartCoroutine(MuteAndDestroyAfterCR(source, time)); }
private static AudioSourceContainer Play(AudioSourceContainer audioSource) { audioSource.AudioSource.Play(); return(audioSource); }