timer, corutines, constant deltaTime, metronome like

I’m stuck with a simple metronome…

Let’s say I want to play a sound 5 times per second, with time btw notes being constant. Again, just like a metronome.
so I tried this code:

 void LateUpdate()
 {
     dt_sum += Time.fixedDeltaTime;
     time_btw_notes = 60f / 300f;
     if (dt_sum >= time_btw_notes)
     {
         snare.audio.Play();
         dt_sum -= time_btw_notes;
     }
 }

It works well at 150fps: constant sound real life time distance. But then I add a super particle system to drop fps to less than 30 and distance btw sounds is no longer constant.

I’ve tried with corutines too:

void Start()
{
    StartCoroutine(WaitAndPrint(0.2F));
}

IEnumerator WaitAndPrint(float waitTime)
{
    while (true)
    {
        snare.audio.Play();
        yield return new WaitForSeconds(waitTime);
    }
}

Same problem…

Is there a way to fix this, threads? I’ve read somewhere no Unity functions can be called in a plain c# thread…
Also heard somewhere I can make LateUpdate() to be called as much often as I want but it would also process physics…

Any ideas?
Thanks

You have mixed up a few things, LateUpdate is just like Update but it is called after all Updates. Time.fixedDeltaTime belongs to FixedUpdate() and shouldn't be used anywhere else. Also you shouldn't even use fixedDeltaTime for time corrections in FixedUpdate. Just use Time.deltaTime. It returns always the correct delta depending on from which callback you read it.

edit

You can also use InvokeRepeating which seems to be very accurate and has minimal overhead.