Esempio n. 1
0
 protected void PlayAudio(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace = default)
 {
     if (_gameState.CurrentGameState != GameState.Cutscene)
     {
         _sfxEventChannel.RaisePlayEvent(audioCue, audioConfiguration, positionInSpace);
     }
 }
Esempio n. 2
0
    /// <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));
        }
    }
Esempio n. 3
0
 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.");
     }
 }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    /// <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));
        }
    }
Esempio n. 6
0
    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
    }
Esempio n. 9
0
    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;
                }
            }
        }
    }
Esempio n. 10
0
 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;
 }
Esempio n. 11
0
    /// <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));
    }
Esempio n. 12
0
    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;
 }
Esempio n. 14
0
 public void Raise(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace)
 {
     eventRaised.Invoke(audioCue, audioConfiguration, positionInSpace);
 }