Ejemplo n.º 1
0
        /**
         * <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);
        }
Ejemplo n.º 2
0
        private void FadeOutThenIn(MusicStorage musicStorage, float fadeTime, bool loop)
        {
            FadeOut(fadeTime);

            delayTime     = fadeTime;
            delayAudioID  = musicStorage.ID;
            delayFadeTime = fadeTime;
            delayLoop     = loop;
        }
Ejemplo n.º 3
0
        private void FadeOutThenIn(MusicStorage musicStorage, float fadeTime, bool loop, bool resumeIfPlayedBefore)
        {
            FadeOut(fadeTime);

            delayTime                 = fadeTime;
            delayAudioID              = musicStorage.ID;
            delayFadeTime             = fadeTime;
            delayLoop                 = loop;
            delayResumeIfPlayedBefore = resumeIfPlayedBefore;
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 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);
         }
     }
 }
Ejemplo n.º 6
0
 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);
         }
     }
 }
Ejemplo n.º 7
0
 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);
         }
     }
 }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
        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();
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 14
0
        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);
                }
            }
        }
Ejemplo n.º 15
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 16
0
        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();
        }
Ejemplo n.º 17
0
        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;
            }
        }
Ejemplo n.º 18
0
        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);
                    }
                }
            }
        }