/** * <summary>Updates a MainData class with its own variables that need saving.</summary> * <param name = "mainData">The original MainData class</param> * <returns>The updated MainData class</returns> */ public MainData SaveMainData(MainData mainData) { StringBuilder musicString = new StringBuilder(); for (int i = 0; i < queuedMusic.Count; i++) { musicString.Append(queuedMusic[i].trackID.ToString()); musicString.Append(SaveSystem.colon); musicString.Append((queuedMusic[i].trackLoop) ? "1" : "0"); musicString.Append(SaveSystem.colon); musicString.Append(queuedMusic[i].fadeTime); musicString.Append(SaveSystem.colon); musicString.Append((queuedMusic[i].isCrossfade) ? "1" : "0"); if (i < (queuedMusic.Count - 1)) { musicString.Append(SaveSystem.pipe); } } mainData.musicQueueData = musicString.ToString(); mainData.musicTimeSamples = 0; if (queuedMusic.Count > 0) { MusicStorage musicStorage = GetMusic(queuedMusic[0].trackID); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && audioSource.isPlaying) { mainData.musicTimeSamples = audioSource.timeSamples; } } return(mainData); }
private void FadeOutThenIn(MusicStorage musicStorage, float fadeTime, bool loop) { FadeOut(fadeTime); delayTime = fadeTime; delayAudioID = musicStorage.ID; delayFadeTime = fadeTime; delayLoop = loop; }
private void FadeOutThenIn(MusicStorage musicStorage, float fadeTime, bool loop, bool resumeIfPlayedBefore) { FadeOut(fadeTime); delayTime = fadeTime; delayAudioID = musicStorage.ID; delayFadeTime = fadeTime; delayLoop = loop; delayResumeIfPlayedBefore = resumeIfPlayedBefore; }
private void FadeOutThenIn(MusicStorage musicStorage, float fadeTime, bool loop, bool resumeIfPlayedBefore, int newTrackTimeSamples) { FadeOut(fadeTime); delayTime = fadeTime; delayAudioID = musicStorage.ID; delayFadeTime = fadeTime; delayLoop = loop; delayResumeIfPlayedBefore = resumeIfPlayedBefore; delayNewTrackTimeSamples = newTrackTimeSamples; }
private void StoreSoundtrackSampleByIndex(int index) { if (queuedSoundtrack != null && queuedSoundtrack.Count > index) { int trackID = queuedSoundtrack[index].trackID; MusicStorage musicStorage = GetSoundtrack(trackID); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && IsPlayingThisFrame) { SetSoundtrackSample(trackID, audioSource.timeSamples); } } }
private void StoreMusicSampleByIndex(int index) { if (queuedMusic != null && queuedMusic.Count > index) { int trackID = queuedMusic[index].trackID; MusicStorage musicStorage = GetMusic(trackID); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && audioSource.isPlaying) { SetMusicSample(trackID, audioSource.timeSamples); } } }
private void Resume(int _timeSamples) { if (queuedMusic.Count > 0) { MusicStorage musicStorage = GetMusic(queuedMusic[0].trackID); if (musicStorage != null && musicStorage.audioClip != null) { audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); PlayAtPoint(queuedMusic[0].trackLoop, _timeSamples); } } }
private void AfterDelay() { if (delayAudioID >= 0) { delayTime = 0f; MusicStorage musicStorage = GetMusic(delayAudioID); if (musicStorage != null) { audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); FadeIn(delayFadeTime, delayLoop); } } delayAudioID = -1; }
protected void Resume(int _timeSamples, float fadeTime = 0f) { if (queuedSoundtrack.Count > 0) { MusicStorage musicStorage = GetSoundtrack(queuedSoundtrack[0].trackID); if (musicStorage != null && musicStorage.audioClip != null) { audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); PlayAtPoint(queuedSoundtrack[0].trackLoop, _timeSamples); if (fadeTime > 0f) { HandleFadeIn(fadeTime, queuedSoundtrack[0].trackLoop, _timeSamples); } } } }
private void AfterDelay() { if (delayAudioID >= 0) { delayTime = 0f; MusicStorage musicStorage = GetSoundtrack(delayAudioID); if (musicStorage != null) { int timeSamples = (delayResumeIfPlayedBefore) ? GetSoundtrackSample(delayAudioID) : delayNewTrackTimeSamples; audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); FadeIn(delayFadeTime, delayLoop, timeSamples); } } delayAudioID = -1; }
private void ClearMusicQueue() { lastTimeSamples = 0; if (queuedMusic != null && queuedMusic.Count > 0) { MusicStorage musicStorage = GetMusic(queuedMusic[0].trackID); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && audioSource.isPlaying) { lastTimeSamples = audioSource.timeSamples; } } lastQueuedMusic.Clear(); foreach (QueuedMusic queueMusic in queuedMusic) { lastQueuedMusic.Add(new QueuedMusic(queueMusic)); } queuedMusic.Clear(); }
private void ClearSoundtrackQueue() { lastTimeSamples = 0; if (queuedSoundtrack != null && queuedSoundtrack.Count > 0) { MusicStorage musicStorage = GetSoundtrack(queuedSoundtrack[0].trackID); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && IsPlayingThisFrame) { lastTimeSamples = audioSource.timeSamples; } } lastQueuedSoundtrack.Clear(); foreach (QueuedSoundtrack soundtrack in queuedSoundtrack) { lastQueuedSoundtrack.Add(new QueuedSoundtrack(soundtrack)); } queuedSoundtrack.Clear(); }
public override MainData SaveMainData(MainData mainData) { mainData.lastAmbienceQueueData = CreateLastSoundtrackString(); mainData.ambienceQueueData = CreateTimesampleString(); mainData.ambienceTimeSamples = 0; mainData.lastAmbienceTimeSamples = LastTimeSamples; if (GetCurrentTrackID() >= 0) { MusicStorage musicStorage = GetSoundtrack(GetCurrentTrackID()); if (musicStorage != null && musicStorage.audioClip != null && audioSource.clip == musicStorage.audioClip && audioSource.isPlaying) { mainData.ambienceTimeSamples = audioSource.timeSamples; } } mainData.oldAmbienceTimeSamples = CreateOldTimesampleString(); return(mainData); }
protected void LoadMainData(int _timeSamples, string _oldTimeSamples, int _lastTimeSamples, string _lastQueueData, string _queueData) { if (!CrossfadeWhenLoading || LoadFadeTime <= 0f) { ForceStopAll(0f, false); } else if (!string.IsNullOrEmpty(_queueData)) { queuedSoundtrack.Clear(); lastQueuedSoundtrack.Clear(); } if (!string.IsNullOrEmpty(_oldTimeSamples)) { oldSoundtrackSamples.Clear(); string[] oldArray = _oldTimeSamples.Split(SaveSystem.pipe[0]); foreach (string chunk in oldArray) { string[] chunkData = chunk.Split(SaveSystem.colon[0]); // ID int _id = 0; int.TryParse(chunkData[0], out _id); // TimeSample int _timeSample = 0; int.TryParse(chunkData[1], out _timeSample); oldSoundtrackSamples.Add(new SoundtrackSample(_id, _timeSample)); } } lastTimeSamples = _lastTimeSamples; if (!string.IsNullOrEmpty(_lastQueueData)) { lastQueuedSoundtrack.Clear(); string[] queueArray = _lastQueueData.Split(SaveSystem.pipe[0]); foreach (string chunk in queueArray) { string[] chunkData = chunk.Split(SaveSystem.colon[0]); // ID int _id = 0; int.TryParse(chunkData[0], out _id); // Loop int _loop = 0; int.TryParse(chunkData[1], out _loop); bool loopBool = (_loop == 1) ? true : false; // FadeTime float _fadeTime = 0f; float.TryParse(chunkData[2], out _fadeTime); // Crossfade int _crossfade = 0; int.TryParse(chunkData[3], out _crossfade); bool crossfadeBool = (_crossfade == 1) ? true : false; // Looping overlap time float loopingOverlapTime = 0f; if (chunkData.Length >= 5) { float.TryParse(chunkData[4], out loopingOverlapTime); } lastQueuedSoundtrack.Add(new QueuedSoundtrack(_id, loopBool, _fadeTime, crossfadeBool, false, 0, loopingOverlapTime)); } } if (!string.IsNullOrEmpty(_queueData)) { string[] queueArray = _queueData.Split(SaveSystem.pipe[0]); foreach (string chunk in queueArray) { string[] chunkData = chunk.Split(SaveSystem.colon[0]); // ID int _id = 0; int.TryParse(chunkData[0], out _id); // Loop int _loop = 0; int.TryParse(chunkData[1], out _loop); bool loopBool = (_loop == 1) ? true : false; // FadeTime float _fadeTime = 0f; float.TryParse(chunkData[2], out _fadeTime); // Crossfade int _crossfade = 0; int.TryParse(chunkData[3], out _crossfade); bool crossfadeBool = (_crossfade == 1) ? true : false; // Looping overlap time float loopingOverlapTime = 0f; if (chunkData.Length >= 5) { float.TryParse(chunkData[4], out loopingOverlapTime); } queuedSoundtrack.Add(new QueuedSoundtrack(_id, loopBool, _fadeTime, crossfadeBool, false, 0, loopingOverlapTime)); } if (RestartTrackWhenLoading) { _timeSamples = 0; } if (CrossfadeWhenLoading && LoadFadeTime > 0f && queuedSoundtrack.Count > 0) { MusicStorage musicStorage = GetSoundtrack(queuedSoundtrack[0].trackID); if (musicStorage != null) { CreateNewCrossfade(LoadFadeTime); audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); HandleFadeIn(LoadFadeTime, queuedSoundtrack[0].trackLoop, _timeSamples); } } else { Resume(_timeSamples, LoadFadeTime); } } }
private float HandlePlay(int trackID, bool loop, bool isQueued, float fadeTime, bool isCrossfade, bool resumeIfPlayedBefore) { if (musicCrossfade) { musicCrossfade.Stop(); } MusicStorage musicStorage = GetMusic(trackID); if (musicStorage == null || musicStorage.audioClip == null) { ACDebug.LogWarning("Cannot play music - no AudioClip assigned!"); return(0f); } if (isQueued && queuedMusic.Count > 0) { queuedMusic.Add(new QueuedMusic(trackID, loop, fadeTime, isCrossfade, resumeIfPlayedBefore)); return(0f); } else { if (queuedMusic.Count > 0 && queuedMusic[0].trackID == trackID) { // Already playing, ignore return(0f); } /*if (queuedMusic.Count > 0 && queuedMusic[0].trackLoop) * { * // Looping current, ignore * return 0f; * }*/ // End other music objects Sound[] sounds = FindObjectsOfType(typeof(Sound)) as Sound[]; foreach (Sound sound in sounds) { sound.EndOldMusic(this); } bool musicAlreadyPlaying = (queuedMusic.Count > 0) ? true : false; if (musicAlreadyPlaying) { StoreMusicSampleByIndex(0); } int newTrackTimeSamples = (resumeIfPlayedBefore) ? GetMusicSample(trackID) : 0; queuedMusic.Clear(); queuedMusic.Add(new QueuedMusic(trackID, loop)); if (musicAlreadyPlaying) { if (fadeTime > 0f) { if (isCrossfade) { if (musicCrossfade) { musicCrossfade.FadeOut(audioSource, fadeTime); } audioSource.clip = musicStorage.audioClip; FadeIn(fadeTime, loop, newTrackTimeSamples); return(fadeTime); } else { FadeOutThenIn(musicStorage, fadeTime, loop, resumeIfPlayedBefore); return(fadeTime * 2f); } } else { Stop(); SetRelativeVolume(musicStorage.relativeVolume); Play(musicStorage.audioClip, loop, newTrackTimeSamples); return(0f); } } else { SetRelativeVolume(musicStorage.relativeVolume); if (fadeTime > 0f) { audioSource.clip = musicStorage.audioClip; FadeIn(fadeTime, loop, newTrackTimeSamples); return(fadeTime); } else { Play(musicStorage.audioClip, loop, newTrackTimeSamples); return(0f); } } } }
public override void _Update() { float deltaTime = Time.deltaTime; if (KickStarter.stateHandler.gameState == GameState.Paused) { if (KickStarter.settingsManager.playMusicWhilePaused) { deltaTime = Time.fixedDeltaTime; } else { return; } } if (musicCrossfade) { musicCrossfade._Update(); } if (delayAudioID >= 0 && delayTime > 0f) { delayTime -= deltaTime; if (delayTime <= 0f) { AfterDelay(); } base._Update(); } if (queuedMusic.Count > 0 && delayAudioID < 0) { if (!audioSource.isPlaying) { ClearMusicSample(queuedMusic[0].trackID); queuedMusic.RemoveAt(0); if (queuedMusic.Count > 0) { MusicStorage musicStorage = GetMusic(queuedMusic[0].trackID); if (musicStorage != null && musicStorage.audioClip != null) { int nextTimeSamples = (queuedMusic[0].doResume) ? GetMusicSample(queuedMusic[0].trackID) : 0; SetRelativeVolume(musicStorage.relativeVolume); Play(musicStorage.audioClip, queuedMusic[0].trackLoop, nextTimeSamples); } } } else if (queuedMusic.Count > 1 && delayAudioID < 0) { QueuedMusic nextMusic = queuedMusic[1]; if (nextMusic.fadeTime > 0f) { int nextTimeSamples = (nextMusic.doResume) ? GetMusicSample(nextMusic.trackID) : 0; // Need to pre-empt next track float thresholdProportion = (audioSource.clip.length - nextMusic.fadeTime) / audioSource.clip.length; int thresholdSamples = (int)(thresholdProportion * (float)audioSource.clip.samples); if (audioSource.timeSamples > thresholdSamples) { MusicStorage musicStorage = GetMusic(nextMusic.trackID); ClearMusicSample(queuedMusic[0].trackID); queuedMusic.RemoveAt(0); if (nextMusic.isCrossfade) { if (musicCrossfade) { musicCrossfade.FadeOut(audioSource, nextMusic.fadeTime); } audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); FadeIn(nextMusic.fadeTime, nextMusic.trackLoop, nextTimeSamples); } else { FadeOutThenIn(musicStorage, nextMusic.fadeTime, nextMusic.trackLoop, nextMusic.doResume); } } } } } base._Update(); }
public override void _Update() { float deltaTime = Time.deltaTime; if (KickStarter.stateHandler.gameState == GameState.Paused) { if (soundType == SoundType.Music && KickStarter.settingsManager.playMusicWhilePaused) { deltaTime = Time.fixedDeltaTime; } else { return; } } if (crossfade) { crossfade._Update(); } if (delayAudioID >= 0 && delayTime > 0f) { delayTime -= deltaTime; if (delayTime <= 0f) { AfterDelay(); } base._Update(); } if (queuedSoundtrack.Count > 0 && delayAudioID < 0) { if (!IsPlayingThisFrame) { ClearSoundtrackSample(queuedSoundtrack[0].trackID); queuedSoundtrack.RemoveAt(0); if (queuedSoundtrack.Count > 0) { MusicStorage musicStorage = GetSoundtrack(queuedSoundtrack[0].trackID); if (musicStorage != null && musicStorage.audioClip != null) { int nextTimeSamples = (queuedSoundtrack[0].doResume) ? GetSoundtrackSample(queuedSoundtrack[0].trackID) : queuedSoundtrack[0].newTimeSamples; SetRelativeVolume(musicStorage.relativeVolume); Play(musicStorage.audioClip, queuedSoundtrack[0].trackLoop, nextTimeSamples); } } } else if (queuedSoundtrack.Count > 1 && delayAudioID < 0) { QueuedSoundtrack nextSoundtrack = queuedSoundtrack[1]; if (nextSoundtrack.fadeTime > 0f) { int nextTimeSamples = (nextSoundtrack.doResume) ? GetSoundtrackSample(nextSoundtrack.trackID) : nextSoundtrack.newTimeSamples; // Need to pre-empt next track float thresholdProportion = (audioSource.clip.length - nextSoundtrack.fadeTime) / audioSource.clip.length; int thresholdSamples = (int)(thresholdProportion * (float)audioSource.clip.samples); if (audioSource.timeSamples > thresholdSamples) { MusicStorage musicStorage = GetSoundtrack(nextSoundtrack.trackID); ClearSoundtrackSample(queuedSoundtrack[0].trackID); queuedSoundtrack.RemoveAt(0); if (nextSoundtrack.isCrossfade) { if (crossfade) { crossfade.FadeOut(audioSource, nextSoundtrack.fadeTime); } audioSource.clip = musicStorage.audioClip; SetRelativeVolume(musicStorage.relativeVolume); HandleFadeIn(nextSoundtrack.fadeTime, nextSoundtrack.trackLoop, nextTimeSamples); } else { FadeOutThenIn(musicStorage, nextSoundtrack.fadeTime, nextSoundtrack.trackLoop, nextSoundtrack.doResume, nextSoundtrack.newTimeSamples); } } } } } base._Update(); if (!KickStarter.stateHandler.IsPaused() || playWhilePaused) { if (!audioSource.isPlaying && wasPlayingLastFrame) { KickStarter.eventManager.Call_OnStopSoundtrack(IsMusic, 0f); } wasPlayingLastFrame = audioSource.isPlaying; } }
private float HandlePlay(int trackID, bool loop, bool isQueued, float fadeTime, bool isCrossfade, bool resumeIfPlayedBefore, int newTrackTimeSamples = 0) { if (crossfade) { crossfade.Stop(); } MusicStorage musicStorage = GetSoundtrack(trackID); if (musicStorage == null || musicStorage.audioClip == null) { ACDebug.LogWarning("Cannot play " + name + " - no AudioClip assigned to track " + trackID + "!"); return(0f); } isPlaying = true; if (isQueued && queuedSoundtrack.Count > 0) { queuedSoundtrack.Add(new QueuedSoundtrack(trackID, loop, fadeTime, isCrossfade, resumeIfPlayedBefore, newTrackTimeSamples)); return(0f); } else { if (queuedSoundtrack.Count > 0 && queuedSoundtrack[0].trackID == trackID) { // Already playing, ignore return(0f); } // End other objects EndOthers(); bool alreadyPlaying = (queuedSoundtrack.Count > 0) ? true : false; if (alreadyPlaying) { StoreSoundtrackSampleByIndex(0); } if (resumeIfPlayedBefore) { newTrackTimeSamples = GetSoundtrackSample(trackID); } queuedSoundtrack.Clear(); queuedSoundtrack.Add(new QueuedSoundtrack(trackID, loop)); KickStarter.eventManager.Call_OnPlaySoundtrack(trackID, IsMusic, loop, fadeTime, newTrackTimeSamples); if (alreadyPlaying) { if (fadeTime > 0f) { if (isCrossfade) { if (crossfade) { crossfade.FadeOut(audioSource, fadeTime); } SetRelativeVolume(musicStorage.relativeVolume); audioSource.clip = musicStorage.audioClip; HandleFadeIn(fadeTime, loop, newTrackTimeSamples); return(fadeTime); } else { FadeOutThenIn(musicStorage, fadeTime, loop, resumeIfPlayedBefore, newTrackTimeSamples); return(fadeTime * 2f); } } else { Stop(); SetRelativeVolume(musicStorage.relativeVolume); Play(musicStorage.audioClip, loop, newTrackTimeSamples); return(0f); } } else { SetRelativeVolume(musicStorage.relativeVolume); if (fadeTime <= 0f && KickStarter.stateHandler.gameState != GameState.Paused) { // Prevents volume not correct in first frame of play fadeTime = 0.001f; } if (fadeTime > 0f) { audioSource.clip = musicStorage.audioClip; HandleFadeIn(fadeTime, loop, newTrackTimeSamples); return(fadeTime); } else { Play(musicStorage.audioClip, loop, newTrackTimeSamples); return(0f); } } } }