/// <summary> /// Tocar um AudioClip. /// OBS.: O AudioSource vai ter Loop caso o MixerGroup seja Background. Caso haja necessidade de ter Backgrouns sem loop, outro MixerGroup deve ser criado na estrutura. /// </summary> /// <param name="audioClip">AudioClip para ser tocado.</param> /// <param name="audioMixerGroupName">Tipo de AudioClip.</param> /// <param name="delay">Delay em segundos para tocar o AudioClip.</param> public static AudioSource Play(AudioClip audioClip, AudioMixerGroupNames audioMixerGroupName, float delay = 0) { if (audioClip == null) { return(null); } AudioSource audioSource = AudioPooler.AudioSource; try { AudioMixerGroup audioMixerGroup = Instance.GetAudioMixerGroupByName(audioMixerGroupName); audioSource.outputAudioMixerGroup = audioMixerGroup; audioSource.clip = audioClip; audioSource.PlayDelayed(delay); audioSource.loop = audioMixerGroupName == AudioMixerGroupNames.Background; } catch (System.Exception e) { Debug.LogError(e.Message); Debug.LogError(e.StackTrace); } return(audioSource); }
/// <summary> /// Configurar o volume de uma determinado grupo de Audio. /// </summary> /// <param name="audioMixerGroupName">Nome do grupo de Audio.</param> /// <param name="volume">[0 dB] = Normal volume. [-80 dB] = Minimum volume. [20 dB] = Maximum volume.</param> public void OnVolumeChangedHandler(AudioMixerGroupNames audioMixerGroupName, float volume) { string audioMixerParameterName = string.Format("{0}_Volume", audioMixerGroupName); lastVolume = (int)volume; MasterAudioMixer.SetFloat(audioMixerParameterName, volume); }
public static float GetVolume(AudioMixerGroupNames audioMixerGroupName) { if (!VolumesDict.ContainsKey(audioMixerGroupName)) { LoadSavedConfigs(); } return(VolumesDict[audioMixerGroupName]); }
/// <summary> /// Dar Pause em todos os AudioSources do Pooler que estao nesse MixerGroup. /// </summary> /// <param name="audioMixerGroupName"></param> /// <param name="useFade"></param> /// <returns>Lista de AudioSources que foram pausados.</returns> public static List <AudioSource> UnPause(AudioMixerGroupNames audioMixerGroupName, bool useFade = true) { List <AudioSource> list = AudioPooler.AudioSourcesList.FindAll(x => x.outputAudioMixerGroup == Instance.GetAudioMixerGroupByName(audioMixerGroupName) && x.IsPaused()); float duration = useFade ? 0.5f : 0.0f; list.ForEach(x => { x.DOKill(); x.DOFade(1, duration).OnComplete(() => x.UnPause()); }); return(list); }
public static void SaveVolume(AudioMixerGroupNames audioMixerGroupName, float volume) { string playerPrefsKey = string.Format("{0}_AudioSource_Volume", audioMixerGroupName.ToString()); PlayerPrefs.SetFloat(playerPrefsKey, volume); if (VolumesDict.ContainsKey(audioMixerGroupName)) { VolumesDict[audioMixerGroupName] = volume; } else { VolumesDict.Add(audioMixerGroupName, volume); } //Debug.Log("SAVE: " + playerPrefsKey + " = " + VolumesDict[audioSourceType]); if (OnVolumeChanged_Action != null) { OnVolumeChanged_Action(audioMixerGroupName, volume); } }
/// <summary> /// Dar Stop em todos os AudioSources do Pooler que estao nesse MixerGroup. /// </summary> /// <param name="audioMixerGroupName"></param> /// <param name="useFade"></param> public static void Stop(AudioMixerGroupNames audioMixerGroupName, bool useFade = true) { try { List <AudioSource> list = AudioPooler.AudioSourcesList.FindAll(x => x.outputAudioMixerGroup == Instance.GetAudioMixerGroupByName(audioMixerGroupName) && !x.IsStopped()); float duration = useFade ? 0.5f : 0.0f; list.ForEach(x => { AudioPooler.AudioSourcesList.Remove(x); x.DOKill(); x.DOFade(0, duration).OnComplete(() => x.Stop()); }); } catch (System.Exception e) { Debug.LogError(e.Message); Debug.LogError(e.StackTrace); } }
/// <summary> /// Tocar um Audio baseado no caminho dentro da pasta Resources. /// OBS.: O AudioSource vai ter Loop caso o MixerGroup seja Background. Caso haja necessidade de ter Backgrouns sem loop, outro MixerGroup deve ser criado na estrutura. /// </summary> /// <param name="resourcesPath">Caminho do AudioClip para ser tocado.</param> /// <param name="audioMixerGroupName">Tipo de AudioClip.</param> /// <param name="delay">Delay em segundos para tocar o AudioClip.</param> public static AudioSource Play(string resourcesPath, AudioMixerGroupNames audioMixerGroupName, float delay = 0) { AudioSource audioSource = null; try { AudioClip audioClip = Resources.Load <AudioClip>(resourcesPath); // Se nao encontrar nenhum audioClip, pegar um vazio. if (audioClip == null) { audioClip = Resources.Load <AudioClip>(EMPTY_AUDIO); } audioSource = Play(audioClip, audioMixerGroupName, delay); } catch (System.Exception e) { Debug.LogError(e.Message); Debug.LogError(e.StackTrace); } return(audioSource); }
private AudioMixerGroup GetAudioMixerGroupByName(AudioMixerGroupNames audioMixerGroupName) { AudioMixerGroup audioMixerGroup = MasterAudioMixer.FindMatchingGroups("Master").FirstOrDefault(x => x.name.Equals(audioMixerGroupName.ToString())); return(audioMixerGroup); }
/// <summary> /// Verifica se o MixerGroup esta tocando algum audio. /// </summary> /// <param name="audioMixerGroupName"></param> /// <returns></returns> public static bool IsPlaying(AudioMixerGroupNames audioMixerGroupName) { bool exists = AudioPooler.AudioSourcesList.Exists(x => x.outputAudioMixerGroup == Instance.GetAudioMixerGroupByName(audioMixerGroupName) && !x.IsStopped()); return(exists); }