有没有办法在我创建后删除AudioContext
?
var analyzers = [];
var contexts = [];
try {
for(var i = 0; i<20; i++) {
contexts[i] = new AudioContext();
analyzers[i] = contexts[i].createAnalyser();
}
}catch(e) {
console.log(e);
// too many contexts created -- how do I remove them?
}
我已经尝试过这个,但它不允许我在事后创建新的上下文:analyzers.forEach(function(analyzer){analyzer.disconnect(analyzer.context.destination)})
我在Ubuntu Linux 14.04上使用Chrome 36。
答案 0 :(得分:29)
AudioContext.close()将释放上下文的硬件,但检查它是否仅适用于最新版本的chrome和firefox。显然不适用于IE。 查看文档: https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/close
答案 1 :(得分:17)
页面中应该只有一个AudioContext
。
来自文档:&#34;在大多数用例中,每个文档只使用一个AudioContext。&#34;
我无法想到你为什么需要多个原因。您是否遇到了导致您创建多个上下文的特定问题?
答案 2 :(得分:6)
将其引用到变量即:
<?php
$usernameVal=$_REQUEST["username"];
//$passwordVAl=$_REQUEST["password"];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "learn2crack-login-register";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
$escapedPW = mysqli_real_escape_string($conn,$_REQUEST['password']);
然后通过呼叫摧毁
var myAudioCtx = new AudioContext();
就是这样。
答案 3 :(得分:0)
我正在开发一个媒体播放器小部件,只要在一个页面中嵌入了超过五个,就会破坏Chrome(但不是Firefox)。
我发现您可以创建一个AudioContext
并将其全局存储,然后让每个实例只使用共享的AudioContext
。它似乎没有区别 - 你可以附加多个缓冲区和多个目的地,音频都混合在一起。
如果你将它用于计时,这可能需要更多的努力,但是为了回放使用JS代码即时生成的一个或多个音频流,共享一个<div class="colourword">Anyword</div>
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++ ) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
var colors = getRandomColor();
$('colourword').html(function() {
return $.map($(this).text().split(''), function(el, i) {
return '<span style="color:' +colors+ '";>' + el + '</span>';
}).join('');
});
可以正常工作。
答案 4 :(得分:0)
在每次单击之前将其关闭。如果您使用计时器延迟关闭,则可能会出现播放不完整的情况,尤其是在切换文件时。
const audioPlay = (() => {
let context = null;
return async () => {
if (context) context.close();
context = new AudioContext();
const source = context.createBufferSource();
source.buffer = await fetch('./2.mp3')
.then(res => res.arrayBuffer())
.then(arrayBuffer => context.decodeAudioData(arrayBuffer));
source.connect(context.destination);
source.start();
};
})();
document.querySelector('#add').addEventListener('click', audioPlay);
不推荐
setTimeout(() => { context.close();}, 400);