javascript – Web Audio onaudioprocess在Firefox中运行,JSFiddle在Chrome中运行,但不适用于Chrome本身
作者:互联网
我在WebAudio / WebMIDI应用上使用Chrome 39.0.2171.71(64位).我安装了jazz-soft webmidi插件.
我无法让onaudioprocess开火.我已经删除了最基本的代码:
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
Page Loaded.
<script>
var context;
if (window.AudioContext) {
context = new AudioContext();
} else {
context = new webkitAudioContext();
}
console.log('Javascript is working.');
oscillator = context.createOscillator();
oscillator.start(0);
myscriptnode = context.createScriptProcessor(4096, 1, 1);
myscriptnode.onaudioprocess = function(event) {
console.log('ONAUDIOPROCESS works!');
};
oscillator.connect(myscriptnode);
</script>
</body>
</html>
这适用于Firefox.事实上,我一直在玩的大部分内容都适用于Firefox,但不适用于Chrome.但是,以下两个示例适用于在Chrome中运行的JSFiddle:
http://jsfiddle.net/78yKV/3/(这个例子运行但是onaudioprocess回调似乎很慢/不稳定,有时它会被切断,需要重新启动.)
http://jsfiddle.net/99rxd/(对于这个例子,我必须将function(){console.log(‘error’);}的第三个参数添加到getUserMedia()以使其运行.当我开始时,这给了我未定义的r undefined参考错误它,然后它运行并且onaudioprocess回调可靠地工作.)
我试过的事情
我进行了详尽的搜索,看起来像createScriptProcessor存在一些Chrome范围问题.我已经尝试了一切将我的流程范围扩展到全局(在顶部声明它,声明没有’var’,设置myscriptnode.onaudioprocess = window.audioProcess = function(event))并且没有任何工作.一切都在Firefox中有效.
我坚持希望的唯一原因是因为JSFiddle的工作原理.似乎代码在JSFiddle中工作的主要原因而不是在浏览器中与等待DOM加载有关.我怀疑这是问题,但我尝试将我的javascript放入(function(/ code /)();,将oninit()函数添加到body标签并将我的代码放入函数init(){}等中.没运气.
我不知道发生了什么事.如果它在JSFiddle中工作,我不应该能够在浏览器中工作吗?是否有另一种方法来改变范围,以便我的事件处理程序不会收集垃圾(这是我假设的问题)…还是有更基本的错误?我还没有看到使用浏览器中的onaudioprocess工作的一个回调,这让我觉得它可能比范围/垃圾收集问题更基本.它可能是爵士软件插件吗?
谢谢您的帮助!
解决方法:
Chrome仍然存在脚本处理器需要连接到目标的错误.
添加“myscriptnode.connect(context.destination);”到最后,我认为你会发现它按预期工作.
标签:javascript,google-chrome,web-audio,jsfiddle 来源: https://codeday.me/bug/20190830/1767008.html