У меня есть функция 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.
Страницы будут просматриваться локально, поэтому постоянная загрузка звуков не является большим фактором (и большинство звуков довольно короткое).