在下面的代码中,我希望在每次按下按钮元素时创建一个分配给o的新振荡器节点,允许多次按下,从而在440处产生多个1秒音调。然而,我发现这个按钮只能按一次以产生一个音调,之后它就会消失,就好像我没有创建新的振荡器节点一样。我正在学习JavaScript,我怀疑它一定是一些微不足道的东西。有人有主意吗?
<html>
<body>
<button id='but' label='Button'/>
<script>
function secondContext(){
play([440],0,1);
}
function play(freqs, delay, duration) {
freqs.forEach(function(freq){
o = audio_context.createOscillator();
o.frequency.value = freq;
o.connect(audio_context.destination);
o.start(0);
o.stop(1);
});
}
var audio_context = new (AudioContext || webkitAudioContext);
button_ele = document.getElementById('but')
button_ele.addEventListener('click',function(){secondContext()});
</script>
</body>
</html>
编辑:
刚找到这个问题解决了这个问题。解决方案是将audio_context.currentTime()添加到偏移量中,如下所示:
o.start(audio_context.currentTime + 0);
o.stop(audio_context.currentTime + 1);
正如您提到的,start()
和stop()
方法的第一个参数是一个基于时钟维护的AudioContext.CurrentTime
的时间戳。
如果时间戳小于当前时间,则立即执行start/stop方法。否则,当时钟与时间戳同时时,将执行这些方法(分别启动或停止振荡器)。
when参数描述声音应该在什么时间(以秒为单位)开始播放。它与AudioContext的currentTime属性处于同一时间坐标系中。如果为该值传入0或该值小于currentTime,则声音将立即开始播放。start只能调用一次,并且必须在STOP之前调用....
http://webaudio.github.io/web-audio-api/#widl-audioBufferSourceNode-start-void-double-when-double-offset-double-duration
我正在尝试添加AnalyserNode并将输出声音可视化到我制作的web音频示例中,但我不知道如何实现。我想我没有将正确的源传递给分析器(?) 完整代码如下:https://jsfidle.net/kepin95043/1ub0sjo3/ 谁能帮我找出我做错了什么?提前感谢! PS:用火狐打开吧。对我来说在基于Chromium的浏览器上不起作用。 下面是一个工作示例:https://codepen
在执行此代码时,我会得到这样的错误:“Uncattle TypeError:Failed to execute'linear ramptoValueAtTime'on'AudioParam':The provided double value is non-finite”。 &如果替换ac.endTime只是endTime-“endTime未定义”,则发生错误。也许有人能解释为什么会这样?谢谢
仅仅是我,还是振荡器即使在0.5增益下也听起来疯狂的响亮?我不能增加我的电脑的体积超过5%。 现在,当我将增益设置为0.001时,音量似乎“归一化”了,但这不对?我希望能有一些关于控制振荡器音量的见解。
本节,我们将探讨第三大类型的运动——振荡运动。弹簧上悬挂的重物,振荡的气泡,来回摆动的摆钟,都是振荡运动的例子。 图5-4 创建振荡运动 操作步骤 按照以下步骤,让盒子来回摆动: 1. 链接到Animation类: <head> <script src="animation.js"> </script> 2. 实例化一个Animation对象,并获取画布上下文对象: <script> wind
当使用web audio API制作振荡器时,我总是听到当停止它时的咔嗒声。我四处寻找,但没有一个解决办法对我有效。我尝试了所有的实现从我如何避免这种‘咔哒’声音时,我停止播放一个声音?和更多 我读到一个解决方案是等待下一个零振幅值,然后立即停止播放。有没有一种方法可以使用web audio API做到这一点? 我正在考虑为我的项目切换到Tone.js,因为声音不需要点击就可以播放。他们是如何解决
这一节,让我们试着制造一些声音,我们将需要完成以下任务: 创建Web Audio API context 在context中创振荡器节点 选择波形类型 设定频率 把振荡器连接到目标上 启动振荡器 让我们把这些步骤写成代码 var context = new (window.AudioContext || window.webkitAudioContext)(); var oscillator