У меня есть функция js для воспроизведения любого данного звука с использованием аудио интерфейса (создание нового экземпляра для каждого вызова).
Это работает довольно хорошо, вплоть до 32-го вызова (иногда меньше).Эта проблема напрямую связана с выпуском экземпляра Audio.Я знаю это, потому что я дал время для запуска GC в Chromium, и это позволит мне снова воспроизвести еще 32 или более звука.
Вот пример того, что я делаю:
<html><head>
<script type="text/javascript">
function playSound(url) {
var snd = new Audio(url);
snd.play();
snd = null;
}
</script>
</head>
<body>
<a href="#" onclick="playSound('blah.mp3');">Play sound</a>
</body></html>
У меня также есть это, которое хорошо работает для страниц, которые имеют менее 32 вызовов playSound:
var AudioPlayer = {
cache: {},
play: function(url) {
if (!AudioPlayer.cache[url])
AudioPlayer.cache[url] = new Audio(url);
AudioPlayer.cache[url].play();
}
};
Но это не будет работать для того, что я хочу сделать (динамически заменить div на другойконтент (из отдельных файлов), на котором есть еще больше звуков - 1. использование памяти легко взлетит до небес, 2. многие звуки никогда не будут воспроизводиться).
Мне нужен способ немедленно выпустить звук.Можно ли сделать это?Я не нашел метода free / close / unload для интерфейса Audio.
Страницы будут просматриваться локально, поэтому постоянная загрузка звуков вообще не является большим фактором (и большинство звуков довольно короткие).