Here's a little hint, though I'm not sure if it will actually be useful. Is your audio sample a wav, or a compressed ogg? A largely uncompressed wav file is what you are going to want to use for audio samples that need to be integrated into gameplay. It is less costly for Godot to load those files into memory and play them back without any delay. An audio sample stored in a compressed format like ogg has to be interpreted before it can be loaded into memory, which can create a slight delay in playback.
Also, a repeating timer is probably not what you're going to want to be using. Something like that can trip up due to the game performance. (or lack thereof) You're going to want to disconnect the timing from the standard game loop, and test against duration from a fixed point, most likely the retrieved time from when you started the action. Your specific beat can then be calculated based on a pre-determined float value.