The "twitch" in Safari likey happens because currentAudio.duration or currentAudio.currentTime can be unreliable right after play() starts. You can try adding a short delay before calling updateProgress(). I think that this gives Safari a bit of time to stabilize