private void stopBGMPlayed(AudioSource audio, ClipDetail clipDetail, AudioLoopCallbacks callback, bool immediatly) { if (!audio) { return; } if (immediatly) { audio.volume = 0; audio.Stop(); audio.clip = null; callback?.Unsubscribe(); } else { DOVirtual.Float(1, 0, timeFade, (x) => { audio.volume = globalBGMVolume * clipDetail.localVolume * x; }).OnComplete(() => { audio.volume = 0; audio.Stop(); audio.clip = null; callback?.Unsubscribe(); }); } }
private void playBGMDefaultAdvance(string audioSource, string musicName, AudioLoop.LoopType loopType, float start, float end) { var audioSourceData = audioSources.GetAudio(audioSource); AudioSource audio = audioSourceData.audio; AudioLoopCallbacks callback = audioSourceData.callback; ClipDetail clipDetail = audioLibrary.GetBGMClip(musicName); if (!audio) { var source = setNewAudioSource(audioSource, true); audio = source.audio; callback = source.callback; } if (audio.isPlaying) { stopBGMPlayed(audio, clipDetail, callback, true); } audio.loop = true; audio.clip = clipDetail.clip; audio.volume = globalBGMVolume * clipDetail.localVolume; audioLoopFunction.SetAudioSource(ref audio, ref callback); audioLoopFunction.PlayLoops(loopType, start, end); }
private void playBGMTransitionAdvance(string audioSource, string musicName, AudioLoop.LoopType loopType, float start, float end) { var audioSourceData = audioSources.GetAudio(audioSource); AudioSource audio = audioSourceData.audio; AudioLoopCallbacks callback = audioSourceData.callback; if (!audio) { var source = setNewAudioSource(audioSource, true); audio = source.audio; callback = source.callback; } if (audio.isPlaying) { ClipDetail clipDetail = audioLibrary.GetBGMClip(audio.clip); DOVirtual.Float(1, 0, timeFade, (x) => { audio.volume = globalBGMVolume * clipDetail.localVolume * x; }).OnComplete(() => playBGMInTransitionAdvance(audio, musicName, loopType, start, end)); } else { playBGMInTransitionAdvance(audio, musicName, loopType, start, end); } }
private void playBGMDefault(string audioSource, string musicName, bool loop) { var audioSourceData = audioSources.GetAudio(audioSource); AudioSource audio = audioSourceData.audio; AudioLoopCallbacks callback = audioSourceData.callback; ClipDetail clipDetail = audioLibrary.GetBGMClip(musicName); if (!audio) { var source = setNewAudioSource(audioSource, false); audio = source.audio; callback = source.callback; } if (audio.isPlaying) { stopBGMPlayed(audio, clipDetail, callback, true); } audio.loop = loop; audio.clip = clipDetail.clip; audio.volume = globalBGMVolume * clipDetail.localVolume; audio.Play(); }
/// <summary> /// Set the audio source to define where the audio source being affected by this AudioLoop function /// </summary> /// <param name="source">Is the audio source will be modify to loop the music</param> public void SetAudioSource(ref AudioSource source) { this.source = source; if (callbacks == null) { callbacks = source.transform.gameObject.AddComponent <AudioLoopCallbacks>(); } }
public void SetAudio(string audioSourceName, AudioSource source, AudioLoopCallbacks callback = null) { if (audioSources == null) { Init(); } if (!audioSources.Any(e => e.audioSourceName == audioSourceName) && source != null) { audioSources.Add(new TWAudioSource(audioSourceName, source, callback)); } }
private (AudioSource audio, AudioLoopCallbacks callback) setNewAudioSource(string audioSource, bool usingCallbackFunction) { GameObject audioObject = Instantiate(prefab, audioParent.transform); AudioSource audio = audioObject.GetComponent <AudioSource>(); AudioLoopCallbacks callback = audioObject.GetComponent <AudioLoopCallbacks>(); callback.enabled = usingCallbackFunction; audioSources.SetAudio(audioSource, audio, callback); return(audio, callback); }
private void stopBGMPlayed(string audioSource, bool immediatly) { var audioSourceData = audioSources.GetAudio(audioSource); AudioSource audio = audioSourceData.audio; AudioLoopCallbacks callback = audioSourceData.callback; Debug.Log(audio + " " + audioSourceData); if (!audio || !audio.isPlaying) { return; } if (immediatly) { audio.volume = 0; audio.Stop(); audio.clip = null; callback?.Unsubscribe(); } else { ClipDetail clipDetail = audioLibrary.GetBGMClip(audio.clip); DOVirtual.Float(1f, 0f, timeFade, (x) => { audio.volume = globalBGMVolume * clipDetail.localVolume * x; }).OnComplete(() => { audio.volume = 0; audio.Stop(); audio.clip = null; callback?.Unsubscribe(); }); } }
public TWAudioSource(string audioSourceName, AudioSource audio, AudioLoopCallbacks callback) { this.audioSourceName = audioSourceName; this.audio = audio; this.callback = callback; }
/// <summary> /// Set the audio source to define where the audio source being affected by this AudioLoop function /// </summary> /// <param name="source">Is the audio source will be modify to loop the music</param> public void SetAudioSource(ref AudioSource source, ref AudioLoopCallbacks callbacks) { this.source = source; this.callbacks = callbacks; callbacks.enabled = true; }