public void Fade(AudioClipModel clip, params AudioFadeModel[] audioFades) { TryRemoveFade(clip); var fade = new AudioMultiFadeState(clip, audioFades); _activeAudioFades.Add(fade); }
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); }
private void AddFade(AudioClipModel clip, float startVolume, float endVolume, float duration) { TryRemoveFade(clip); var fade = new AudioFadeState(clip, startVolume, endVolume, duration); _activeAudioFades.Add(fade); }
public AudioMultiFadeState(AudioClipModel clip, params AudioFadeModel[] audioFadeModels) { Clip = clip; _audioFadeModels = audioFadeModels; _currentModel = audioFadeModels[0]; }
public void Fade(AudioClipModel clip, float targetVolume, float duration) { if (TryGetChannel(clip, out var channel)) { AddFade(clip, channel.Volume, targetVolume, duration); } }
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(); }
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(); }
public void Stop(AudioClipModel clip) { if (TryGetChannel(clip, out var channel)) { ResetChannel(channel); _occupiedChannels.Remove(clip); } TryRemoveFade(clip); }
public bool IsPlaying(AudioClipModel clip) { var isPlaying = false; if (_occupiedChannels.ContainsKey(clip)) { isPlaying = _occupiedChannels[clip].IsPlaying; } return(isPlaying); }
public float GetPlaybackTime(AudioClipModel clip) { var playbackTime = -1f; if (TryGetChannel(clip, out var channel)) { playbackTime = channel.PlaybackSeconds; } return(playbackTime); }
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); } } }
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); }
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); } } }
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); }
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); }
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); }
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(); }
public AudioFade(AudioClipModel clip, float startVolume, float targetVolume, float duration) { Clip = clip; _model = new AudioFadeModel(startVolume, targetVolume, duration); }
public void Play(AudioClipModel clip, AudioClipModel master = null, Action onComplete = null) { PlayInternal(clip, master, onComplete); }