我正在使用 Web Audio API,并且正在尝试制作一个输出脉冲的 JavaScriptNode。也就是说,我想要一个输出 1 后跟一大堆零的节点,仅此而已。
我认为下面的代码将是执行此操作的明智方法。我将一个名为“timeForAnImpulse”的变量初始化为 true,并使用该变量触发音频回调的脉冲输出。在回调中,我将“timeForAnImpulse”设置为 false。
这似乎应该有效,但事实并非如此。我得到的不是单个脉冲,而是一个脉冲序列(每个缓冲区开头的 1)。知道我做错了什么吗?
<script type="text/javascript">
window.onload = init;
function impulseNodeCB(evt){
if(timeForAnImpulse){
var buf = evt.outputBuffer.getChannelData(0);
buf[0] = 1;
timeForAnImpulse = false;
}
}
var timeForAnImpulse = true;
function init() {
var context = new webkitAudioContext();
impulseNode = context.createJavaScriptNode(2048,0,1);
impulseNode.onaudioprocess = impulseNodeCB;
impulseNode.connect(context.destination);
}
</script>
</head>