I've tried to do something similar a long time ago in Shockwave (sorry if that dates me). It didn't really work great, but I have thought about this a bit.
I think you may want to consider playing the sounds on "process" or "physics_process". Keep track of the elapsed time and the current bar and then play the sound if it passes that time point (you can use the modulus operator so it loops).
Maybe in physics process, if you set the update to 1000 fps (1 ms) that should be more than enough resolution. If the frame rate is lower (likely 60 fps) it will just run multiple times per frame but that should be fine and I don't think the processing overhead would be that much considering the graphics are simple.