The sound file has to load from the server, first. That's the delay.
If you only have a handful of sound files you want to play, you can force them to pre-load.
Just do:
Code:
<span style="visibility: hidden;">
<embed src="xyz.wav" hidden="true" autostart="false" loop="false" />
</span>
That *should* load the file but not play it. Then, later, your JS code loads the same file, but the browser discovers it in the cache.
Not sure it works in all browsers, but give it a shot.
You need a separate <embed> for each sound file. of course, but they can all be in the one hidden <span>.