GameObjects not syncing with music

I have a rhythm game I’m trying to make where obstacles fade into view based on the time of the music. It works at first but after a few times the objects start getting desynced, with each one appearing slightly later than it should and I have no idea why. The scripts look like this.

using UnityEngine;
using System.Collections;

public class Obstical_Script : MonoBehaviour {

    AudioSource fmusic;
    
    float start, interval;
    int chooseChild;
	void Start ()
    {
        fmusic = GetComponent<AudioSource>();
        interval = 0;
        start = 1.5f;
	}
	
	void Update () 
    {
        if (fmusic.time >= start)
        {
            Debug.Log(fmusic.time);
            transform.GetChild(0).GetComponent<ChildObsticalsScript>().fading = true;
            interval += 1f;
            chooseChild++;
            if (chooseChild == 8)
                chooseChild = 0;
           
        }
	}
}


using UnityEngine;
using System.Collections;

public class ChildObsticalsScript : MonoBehaviour {

    public bool fading;
    bool fadeOut;
    Color defaultColor;
    float alpha;
    int wait;

	void Start () 
    {
        fading = false;
        fadeOut = false;
        alpha = 0;
        wait = 5;

        gameObject.GetComponent<SpriteRenderer>().color = new Color(gameObject.GetComponent<SpriteRenderer>().color.r, 
            gameObject.GetComponent<SpriteRenderer>().color.g, gameObject.GetComponent<SpriteRenderer>().color.b, 0);

        defaultColor = gameObject.GetComponent<SpriteRenderer>().color;
	}
	
	// Update is called once per frame
	void Update () 
    {
	    if(fading)
        {
            if (alpha < 1f && !fadeOut)
            {
                alpha += 1f * Time.deltaTime;
                gameObject.GetComponent<SpriteRenderer>().color = new Color(gameObject.GetComponent<SpriteRenderer>().color.r,
                gameObject.GetComponent<SpriteRenderer>().color.g, gameObject.GetComponent<SpriteRenderer>().color.b, alpha);
            }

            if (alpha >= 1f && !fadeOut)
            {
                gameObject.GetComponent<SpriteRenderer>().color = new Color(0, 0, 0, 1);
                gameObject.GetComponent<BoxCollider2D>().enabled = true;
                alpha = 0;
                fadeOut = true;
            }
        }
        if (fadeOut)
        {
            --wait;
            if (wait <= 0)
            {
                gameObject.GetComponent<BoxCollider2D>().enabled = false;
                gameObject.GetComponent<SpriteRenderer>().color = defaultColor;
                wait = 5;
                fading = false;
                fadeOut = false;
            }
        }
	}
}

The first half is a script I have on a parent object. It chooses which object it wants to fade in. The second part is the object that’s supposed to fade in. I’ve checked both the interval and fmusic.time with Debug.Log and they both work fine yet the objects will still start to slowly desync with the music and I’m not sure why. I’ve also tried changing fmusic to a variable called time which I increment with Time.DeltaTime and I get the same problem.

Alright, so I more or less fixed the problem. I changed interval from 1f to .924f. It seems I was making the assumption that every down beat was 1 second apart. Silly me.