public void PlayOnNextBeat(AudioSource source, bool loop, OnBeatCallbackFunction onBeatCallback = null) { source.loop = loop; RemoveNonPlayingSounds(); var playingSound = new PlayingSound(source, onBeatCallback); PlayingSounds.Add(playingSound); if (SyncBasis == null) { StartSyncing(playingSound); return; } double timeElapsed = (double)SyncBasis.timeSamples / SyncBasis.clip.frequency; double offsetFromBeat = timeElapsed % AudioSyncBeatIntervalSeconds; playingSound.PlayScheduled(AudioSettings.dspTime + AudioSyncBeatIntervalSeconds - offsetFromBeat); }