// Update is called once per fram
    void Update()
    {
        songPosition = (float)(AudioSettings.dspTime - dspSongTime);

        songPositionInBeats = songPosition / secPerBeat;
        if (songPositionInBeats >= (completedLoops + 1) * beatsPerLoop)
        {
            completedLoops++;
            newLoopEvent.Invoke();
        }
        loopPositionInBeats = (songPositionInBeats - completedLoops * beatsPerLoop);

        if (loopPositionInBeats - prevInterval >= beatUnit && loopPositionInBeats - prevInterval <= 2 * beatUnit)
        {
            prevInterval += beatUnit;
            if (prevInterval >= beatsPerLoop - beatUnit)
            {
                prevInterval = 0;
            }
            Interval.Invoke(prevInterval);
        }

        if ((int)loopPositionInBeats != prevBeat)
        {
            prevBeat = (int)loopPositionInBeats;
            Beat.Invoke();
        }

        loopPositionInAnalog = (float)loopPositionInBeats / beatsPerLoop;
    }