Unfortunately Flash is currently pretty much unavoidable if you want sound effects in JS games.
I experimented with <audio> tag in HTML5 game few days ago: it's fine for media player type applications (where you play longer sounds with looser coupling to user actions), but it's not there yet for games (implementation-wise, API is ok).
If you need to play a lot of tiny sounds in rapid response to player actions, you are going to get random weird behaviors and cross-browser inconsistencies: noticeable lags, cracking noises, cuts and repetitions.
This seems to be heavily depended on the file types you use. I have some experiments with many different, short, sound files running with <audio> just fine - in Chrome, FF and Opera at least.
Ogg Vorbis and (of course WAV) works quite nice, MP3 doesn't. For Safari, maybe AAC would be the right choice. Still, as you said, the <audio> implementation is quite buggy at times. But I have no doubt it will get better!
Yes, a good point. I confirm, also in my experience problems are very dependent on particular sound files. Some work perfectly fine, some make troubles.
And it's not just encoding, it seems to be dependent also on what's inside the sound file like a particular waveform or length.
For me the worst were a sequences of very short sounds (fractions of second) played in a direct response to rapid successive keypresses (keydown-keydown-keydown should make pew-pew-pew). No matter what I did, there was always at least one browser with some showstopping bug.
I experimented with <audio> tag in HTML5 game few days ago: it's fine for media player type applications (where you play longer sounds with looser coupling to user actions), but it's not there yet for games (implementation-wise, API is ok).
If you need to play a lot of tiny sounds in rapid response to player actions, you are going to get random weird behaviors and cross-browser inconsistencies: noticeable lags, cracking noises, cuts and repetitions.