【发布时间】:2010-06-13 22:42:22
【问题描述】:
我有一个 js 函数,用于使用音频接口播放任何给定的声音(为每个调用创建一个新实例)。
这工作得很好,直到大约第 32 次调用(有时更少)。此问题与 Audio 实例的发布直接相关。我知道这一点是因为我已经让 Chromium 中的 GC 有时间运行,它可以让我再次播放另外 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. 很多声音永远不会玩)。
我需要一种立即释放声音的方法。是否有可能做到这一点?我没有找到音频接口的免费/关闭/卸载方法。
页面将在本地查看,因此声音的持续加载根本不是一个重要因素(而且大多数声音都很短)。
【问题讨论】:
标签: javascript garbage-collection