I had the same problem ... I would like to control the sound from "get go" as it is.
My solution was to put sound tags in a hidden DIV like this.
<div id="junk" style="display: none">
<audio id="effect1" src="..." autobuffer="autobuffer" controls="" ></audio>
<audio id="effect2" src="..." autobuffer="autobuffer" controls="" ></audio>
<audio id="effect3" src="..." autobuffer="autobuffer" controls="" ></audio>
</div>
Then in my javascript I have code like this in a game program.
function playEffect(x) {
var a = document.getElementById('effect' + x);
if (a && a instanceof Audio) {
if (a.currentTime) { a.currentTime = 0; }
a.play();
}
}
So ... you follow the rules, because there is a “required” UI Control, but, of course, this does not interfere with the web page. Checking currentTime in the playEffect function rewinds the sound ... if you do not, it will not play a second time.
iPad iPhone, Safari Mac. IE . Google Maps API v3.