Это определенно ошибка, но я думаю, что это связано с реальным элементом, а не с частью воспроизведения звука.Вы можете легко обойти это, предварительно загрузив аудио, создавая новый аудиообъект для каждого воспроизведения звука, а затем, наконец, проверяйте звуковые объекты на каждом тике, чтобы определить, закончили ли они воспроизведение, чтобы вы могли очистить память.
Предварительная загрузка, конечно, выглядит примерно так:
var _mySnd = new Audio('my/snd/file/is/here.mp3');
Создание экземпляра выглядит так:
var _sndCollection = [];
var n = _sndCollection.length;
_sndCollection[n] = new Audio();
_sndCollection[n].src = _mySnd.src;
_sndCollection[n].play();
А проверка очистки будет выглядеть так:
for (var i = 0; i < _sndCollection.length; i++)
{
if (_sndCollection[i].currentTime >= _sndCollection[i].duration)
{
_sndCollection.splice(i, 1);
i--;
}
}
Я использую что-то подобное в своем собственном игровом движке HTML5, и до сих пор это прекрасно работало.