protected void PlayAudio(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace = default) { if (_gameState.CurrentGameState != GameState.Cutscene) { _sfxEventChannel.RaisePlayEvent(audioCue, audioConfiguration, positionInSpace); } }
/// <summary> /// Instructs the AudioSource to play a single clip, with optional looping, in a position in 3D space. /// </summary> /// <param name="clip"></param> /// <param name="settings"></param> /// <param name="hasToLoop"></param> /// <param name="position"></param> public void PlayAudioClip(AudioClip clip, AudioConfigurationSO settings, bool hasToLoop, Vector3 position = default) { _audioSource.clip = clip; ApplySettings(_audioSource, settings); _audioSource.transform.position = position; _audioSource.loop = hasToLoop; _audioSource.Play(); if (!hasToLoop) { StartCoroutine(FinishedPlaying(clip.length)); } }
public void RaiseEvent(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace) { if (OnAudioCueRequested != null) { OnAudioCueRequested.Invoke(audioCue, audioConfiguration, positionInSpace); } else { Debug.LogWarning("An AudioCue was requested, but nobody picked it up. " + "Check why there is no AudioManager already loaded, " + "and make sure it's listening on this AudioCue Event channel."); } }
public void FadeMusicIn(AudioClip musicClip, AudioConfigurationSO settings, float duration, float startTime = 0f) { PlayAudioClip(musicClip, settings, true); _audioSource.volume = 0f; //Start the clip at the same time the previous one left, if length allows //TODO: find a better way to sync fading songs if (startTime <= _audioSource.clip.length) { _audioSource.time = startTime; } _audioSource.DOFade(settings.Volume, duration); }
/// <summary> /// Instructs the AudioSource to play a single clip, with optional looping, in a position in 3D space. /// </summary> /// <param name="clip"></param> /// <param name="settings"></param> /// <param name="hasToLoop"></param> /// <param name="position"></param> public void PlayAudioClip(AudioClip clip, AudioConfigurationSO settings, bool hasToLoop, Vector3 position = default) { _audioSource.clip = clip; settings.ApplyTo(_audioSource); _audioSource.transform.position = position; _audioSource.loop = hasToLoop; _audioSource.time = 0f; //Reset in case this AudioSource is being reused for a short SFX after being used for a long music track _audioSource.Play(); if (!hasToLoop) { StartCoroutine(FinishedPlaying(clip.length)); } }
public AudioCueKey RaisePlayEvent(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace = default) { AudioCueKey audioCueKey = AudioCueKey.Invalid; if (OnAudioCuePlayRequested != null) { audioCueKey = OnAudioCuePlayRequested.Invoke(audioCue, audioConfiguration, positionInSpace); } else { Debug.LogWarning("An AudioCue play event was requested for " + audioCue.name + ", but nobody picked it up. " + "Check why there is no AudioManager already loaded, " + "and make sure it's listening on this AudioCue Event channel."); } return(audioCueKey); }
/// <summary> /// Plays an AudioCue by requesting the appropriate number of SoundEmitters from the pool. /// </summary> public void PlayAudioCue(AudioCueSO audioCue, AudioConfigurationSO settings, Vector3 position = default) { if (!audioCue.isSolo) { AudioClip[] clipsToPlay = audioCue.GetClips(); int nOfClips = clipsToPlay.Length; for (int i = 0; i < nOfClips; i++) { SoundEmitter soundEmitter = _pool.Request(); if (soundEmitter != null) { soundEmitter.PlayAudioClip(clipsToPlay[i], settings, audioCue.looping, position); if (!audioCue.looping) { soundEmitter.OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying; } } } } else if (audioCue.isSolo && !soloPlaying) { AudioClip[] clipsToPlay = audioCue.GetClips(); int nOfClips = clipsToPlay.Length; StartCoroutine(SoloClipDelay(clipsToPlay[0].length)); for (int i = 0; i < nOfClips; i++) { SoundEmitter soundEmitter = _pool.Request(); if (soundEmitter != null) { soundEmitter.PlayAudioClip(clipsToPlay[i], settings, audioCue.looping, position); if (!audioCue.looping) { soundEmitter.OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying; } } } } else { Debug.Log("Could not play solo clip as another one is currently playing"); } }
/// <summary> /// Plays an AudioCue by requesting the appropriate number of SoundEmitters from the pool. /// </summary> public void PlayAudioCue(AudioCueSO audioCue, AudioConfigurationSO settings, Vector3 position = default) { AudioClip[] clipsToPlay = audioCue.GetClips(); int nOfClips = clipsToPlay.Length; for (int i = 0; i < nOfClips; i++) { SoundEmitter soundEmitter = _pool.Request(); if (soundEmitter != null) { soundEmitter.PlayAudioClip(clipsToPlay[i], settings, audioCue.looping, position); if (!audioCue.looping) { soundEmitter.OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying; } } } //TODO: Save the SoundEmitters that were activated, to be able to stop them if needed }
public void PlayAudioCue(AudioCueSO audioCue, AudioConfigurationSO settings, Vector3 position = default) { AudioClip[] clipsToPlay = audioCue.GetClips(); var amountOfClips = clipsToPlay.Length; for (int i = 0; i < amountOfClips; i++) { SoundEmitter soundEmitter = _pool.Request(); if (soundEmitter != null) { soundEmitter.PlayAudioClip(clipsToPlay[i], settings, audioCue.IsLooping, position); if (!audioCue.IsLooping) { soundEmitter.OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying; } } } }
private void ApplySettings(AudioSource source, AudioConfigurationSO settings) { source.outputAudioMixerGroup = settings.OutputAudioMixerGroup; source.mute = settings.Mute; source.bypassEffects = settings.BypassEffects; source.bypassListenerEffects = settings.BypassListenerEffects; source.bypassReverbZones = settings.BypassReverbZones; source.priority = settings.Priority; source.volume = settings.Volume; source.pitch = settings.Pitch; source.panStereo = settings.PanStereo; source.spatialBlend = settings.SpatialBlend; source.reverbZoneMix = settings.ReverbZoneMix; source.dopplerLevel = settings.DopplerLevel; source.spread = settings.Spread; source.rolloffMode = settings.RolloffMode; source.minDistance = settings.MinDistance; source.maxDistance = settings.MaxDistance; source.ignoreListenerVolume = settings.IgnoreListenerVolume; source.ignoreListenerPause = settings.IgnoreListenerPause; }
/// <summary> /// Plays an AudioCue by requesting the appropriate number of SoundEmitters from the pool. /// </summary> public AudioCueKey PlayAudioCue(AudioCueSO audioCue, AudioConfigurationSO settings, Vector3 position = default) { AudioClip[] clipsToPlay = audioCue.GetClips(); SoundEmitter[] soundEmitterArray = new SoundEmitter[clipsToPlay.Length]; int nOfClips = clipsToPlay.Length; for (int i = 0; i < nOfClips; i++) { soundEmitterArray[i] = _pool.Request(); if (soundEmitterArray[i] != null) { soundEmitterArray[i].PlayAudioClip(clipsToPlay[i], settings, audioCue.looping, position); if (!audioCue.looping) { soundEmitterArray[i].OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying; } } } return(_soundEmitterVault.Add(audioCue, soundEmitterArray)); }
private AudioCueKey PlayMusicTrack(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace) { float fadeDuration = 2f; float startTime = 0f; if (_musicSoundEmitter != null && _musicSoundEmitter.IsPlaying()) { AudioClip songToPlay = audioCue.GetClips()[0]; if (_musicSoundEmitter.GetClip() == songToPlay) { return(AudioCueKey.Invalid); } //Music is already playing, need to fade it out startTime = _musicSoundEmitter.FadeMusicOut(fadeDuration); } _musicSoundEmitter = _pool.Request(); _musicSoundEmitter.FadeMusicIn(audioCue.GetClips()[0], audioConfiguration, 1f, startTime); _musicSoundEmitter.OnSoundFinishedPlaying += StopMusicEmitter; return(AudioCueKey.Invalid); //No need to return a valid key for music }
public PlayAudioCueAction(AudioCueSO audioCue, AudioCueEventChannelSO audioCueEventChannel, AudioConfigurationSO audioConfiguration) { _audioCue = audioCue; _audioCueEventChannel = audioCueEventChannel; _audioConfiguration = audioConfiguration; }
public void Raise(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace) { eventRaised.Invoke(audioCue, audioConfiguration, positionInSpace); }