Esempio n. 1
0
        public void Fade(AudioClipModel clip, params AudioFadeModel[] audioFades)
        {
            TryRemoveFade(clip);
            var fade = new AudioMultiFadeState(clip, audioFades);

            _activeAudioFades.Add(fade);
        }
Esempio n. 2
0
        private IAudioChannel PlayInternal(AudioClipModel clip, AudioClipModel master = null, Action onComplete = null)
        {
            IAudioChannel channel;

            if (IsPlaying(clip))
            {
                channel = _occupiedChannels[clip];
                TryRemoveFade(clip);
            }
            else if (TryFindFreeChannel(out channel))
            {
                _occupiedChannels[clip] = channel;
            }

            if (channel != null)
            {
                if (master != null)
                {
                    TryGetChannel(master, out var masterChannel);
                    channel.Play(clip, masterChannel, onComplete);
                }
                else
                {
                    channel.Play(clip, onComplete: onComplete);
                }
            }

            return(channel);
        }
Esempio n. 3
0
        private void AddFade(AudioClipModel clip, float startVolume, float endVolume, float duration)
        {
            TryRemoveFade(clip);
            var fade = new AudioFadeState(clip, startVolume, endVolume, duration);

            _activeAudioFades.Add(fade);
        }
Esempio n. 4
0
        public AudioMultiFadeState(AudioClipModel clip, params AudioFadeModel[] audioFadeModels)
        {
            Clip = clip;

            _audioFadeModels = audioFadeModels;
            _currentModel    = audioFadeModels[0];
        }
Esempio n. 5
0
 public void Fade(AudioClipModel clip, float targetVolume, float duration)
 {
     if (TryGetChannel(clip, out var channel))
     {
         AddFade(clip, channel.Volume, targetVolume, duration);
     }
 }
Esempio n. 6
0
 public void Play(AudioClipModel clip, IAudioChannel master = null)
 {
     _master = master;
     // TODO create resource manager and cache resources
     _audioSource.clip = Resources.Load <AudioClip>(clip.Name);
     _audioSource.time = 0f;
     _audioSource.Play();
 }
Esempio n. 7
0
 public void Play(AudioClipModel clip, IAudioChannel master = null, Action onComplete = null)
 {
     _master           = master;
     _onComplete       = onComplete;
     _audioSource.clip = LoadClip(clip.Name);
     _audioSource.time = 0f;
     _audioSource.Play();
 }
Esempio n. 8
0
        public void Stop(AudioClipModel clip)
        {
            if (TryGetChannel(clip, out var channel))
            {
                ResetChannel(channel);
                _occupiedChannels.Remove(clip);
            }

            TryRemoveFade(clip);
        }
Esempio n. 9
0
        public bool IsPlaying(AudioClipModel clip)
        {
            var isPlaying = false;

            if (_occupiedChannels.ContainsKey(clip))
            {
                isPlaying = _occupiedChannels[clip].IsPlaying;
            }

            return(isPlaying);
        }
Esempio n. 10
0
        public float GetPlaybackTime(AudioClipModel clip)
        {
            var playbackTime = -1f;

            if (TryGetChannel(clip, out var channel))
            {
                playbackTime = channel.PlaybackSeconds;
            }

            return(playbackTime);
        }
Esempio n. 11
0
        public void FadeIn(AudioClipModel clip, float duration, AudioClipModel master = null)
        {
            var freeChannel = PlayInternal(clip, master);

            if (0f < duration)
            {
                if (freeChannel != null)
                {
                    freeChannel.Volume = _volumeLowerLimit;
                    AddFade(clip, _volumeLowerLimit, _volumeUpperLimit, duration);
                }
            }
        }
Esempio n. 12
0
        public bool TryGetVolume(AudioClipModel clip, out float volume)
        {
            var success = false;

            volume = 0f;

            if (_occupiedChannels.ContainsKey(clip))
            {
                volume  = _occupiedChannels[clip].Volume;
                success = true;
            }

            return(success);
        }
Esempio n. 13
0
 public void FadeOut(AudioClipModel clip, float duration)
 {
     if (duration <= 0f)
     {
         Stop(clip);
     }
     else
     {
         if (TryGetChannel(clip, out var channel))
         {
             var startVolume = channel.Volume;
             AddFade(clip, startVolume, _volumeLowerLimit, duration);
         }
     }
 }
Esempio n. 14
0
        private bool TryRemoveFade(AudioClipModel clip)
        {
            var didStopFade = false;

            for (var i = 0; i < _activeAudioFades.Count; i++)
            {
                if (_activeAudioFades[i].Clip == clip)
                {
                    _activeAudioFades.RemoveAt(i);
                    didStopFade = true;
                    break;
                }
            }

            return(didStopFade);
        }
Esempio n. 15
0
        public bool IsFading(AudioClipModel clip, float?targetVolume, float?duration)
        {
            var isFading = false;

            foreach (var fade in _activeAudioFades)
            {
                if (fade.Clip == clip &&
                    (targetVolume == null || fade.TargetVolume == targetVolume) &&
                    (duration == null || fade.Duration == duration))
                {
                    isFading = true;
                    break;
                }
            }

            return(isFading);
        }
Esempio n. 16
0
        private bool TryGetChannel(AudioClipModel clip, out IAudioChannel channel)
        {
            var didFindChannel = false;

            channel = null;

            if (_occupiedChannels.ContainsKey(clip))
            {
                channel        = _occupiedChannels[clip];
                didFindChannel = true;
            }
            else
            {
                // TODO use a global logger
                // Debug.LogWarning("No channel found for clip: " + clip.Name);
            }

            return(didFindChannel);
        }
Esempio n. 17
0
    private void PlayDialogueAudio(string audioName)
    {
        if (!string.IsNullOrEmpty(_audioClip?.Name))
        {
            _audioController.Stop(_audioClip);
        }

        if (Resources.Load <AudioClip>(Path.Combine("Audio", CurrentCharacter.BodyName, audioName)))
        {
            _audioClip = new AudioClipModel
            {
                Name = Path.Combine("Audio", CurrentCharacter.BodyName, audioName)
            };

            if (!string.IsNullOrEmpty(_audioClip.Name))
            {
                IsTalking = true;
                _audioController.Play(_audioClip, onComplete: HandleEndAudio);
                return;
            }
        }
        HandleEndAudio();
    }
Esempio n. 18
0
 public AudioFade(AudioClipModel clip, float startVolume, float targetVolume, float duration)
 {
     Clip   = clip;
     _model = new AudioFadeModel(startVolume, targetVolume, duration);
 }
Esempio n. 19
0
 public void Play(AudioClipModel clip, AudioClipModel master = null, Action onComplete = null)
 {
     PlayInternal(clip, master, onComplete);
 }