Reset Event playback/timeline after animation finished | Oculus Go delay - Unity

Hello everyone,
I am playing events with Studio Event Emitters that are more or less synced with an animation.
The animation itself loops after finishing as well as the played events and everything works fine when it is played in Unity.
After building it for the Oculus Go and testing it there I experience a sync issue between the animation and the sound. I preload all the samples and banks and only start the animation when everything has loaded using FMODUnity.RuntimeManager.WaitForAllLoads(); & FMODUnity.RuntimeManager.AnyBankLoading().
Because I am nearing my deadline (I have time until max. Saturday/Sunday) I don’t have time for a lot of troubleshooting as to why the delay is happening. So I adjusted the animation to fit the delay in the Oculus Go. But after several loops the animation and the audio get out of sync and deviate more and more.

Now here is my question:
Is there a way to reset the playback (beginning of the timeline) of Events played via the Event Emitter Script so that I can set a keyframe to start from the beginning of the event after each animation loop is finished?

Yes, you can set timeline position of an Event Instance or just stop and restart the emitter:

private FMODUnity.StudioEventEmitter emitter;

void Awake()
{
emitter = GetComponent<FMODUnity.StudioEventEmitter>();
}

public void ResetEventTimeline()
{
    emitter.EventInstance.setTimelinePosition(0);
}

public void RestartEvent()
{
    if (emitter.IsPlaying())
    { 
    emitter.Stop();
    emitter.Play();
    }
}

From the top of my head I would rather use animation events to play the sounds at a specific keyframe instead of trying to reset the event when the animation finishes. Just create a public method in a script where the Event Emitter is located:

private FMODUnity.StudioEventEmitter emitter;

void Awake()
{
    emitter = GetComponent<FMODUnity.StudioEventEmitter>();
}

public void PlaySound()
{
    if (!emitter.IsPlaying())
    {
        emitter.Play();
    }
    else
    {
        emitter.Stop();
        emitter.Play();
    }
}

Then in the animation clip insert an animation event at your desired keyframe and select the PlaySound method from the drop down list:

I got it running with your solution, thank you!

A follow up question:
Is there a way to reduce the “no-audio” gap when stopping of the sound when stopping and playing the sound - like a crossover? Am I correct with the thought that there is no way because the script calls the stop-play method and the gap between stopping and playing can’t be reduced?

I don’t know what kind of sound you are playing, but try putting an AHDSR modulator with a short release value on the master volume of your event, then check the Allow Fadeout setting in the Event Emitter. This will avoid having an abrupt stop of the sound when calling emitter.Stop().