Javascript 声音会消失,但不会消失——为什么?
我想我了解Web音频API的主要概念,以及声音的工作原理。尽管我成功地使声音“淡出”,但我无法理解,为什么在我为解决问题而编写的以下片段中,声音没有“淡入”:Javascript 声音会消失,但不会消失——为什么?,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,我想我了解Web音频API的主要概念,以及声音的工作原理。尽管我成功地使声音“淡出”,但我无法理解,为什么在我为解决问题而编写的以下片段中,声音没有“淡入”: (函数() { "严格使用",; var context=new AudioContext(), wave=context.create振荡器(), 增益=上下文。createGain(), 零=0.000001; 波形连接(增益); 连接(上下文、目的地); wave.type='sine'; 波频值=200; 增益。增益。值=零;
(函数()
{
"严格使用",;
var context=new AudioContext(),
wave=context.create振荡器(),
增益=上下文。createGain(),
零=0.000001;
波形连接(增益);
连接(上下文、目的地);
wave.type='sine';
波频值=200;
增益。增益。值=零;
wave.start(context.currentTime);
增益.增益.指数RamptoValueAttime(1.00,1.0);
增益。增益。指数RamptoValueAttime(零,3.0);
})();代码>将您的gain.gain.value=0
行替换为:
gain.gain.setValueAtTime(ZERO, 0);
这将解决问题
基本原理在指数RamptoValueAttime()
函数中:
计划参数值从上一个计划参数值到给定值的指数连续变化
因此,如果没有以前的计划参数值(只有固定值),则函数无法插值。这同样适用于linearrantovalueattime
函数
这在以下方面也可能有用:
AudioParam.value
。。。尽管可以设置,但在调度自动化事件(即使用AudioParam方法调度的事件)时发生的任何修改都将被忽略,不会引发任何异常
你需要
gain.gain.setValueAtTime(ZERO, 0);
因为刚开始
gain.gain.value = ZERO;
未在AudioParam调度程序中设置调度点-因此它是从最后一个已知的调度点进行调度(时间=0时的默认值为1)。混合设置。值和调度往往不起作用;我有一篇75%的文章已经写了很长一段时间了,只是还没有发布。我也观察到了linearrantovalueattime
淡入的同样问题,所以这至少不是一个指数特定的问题。另外,由于您这里似乎有一个完整的可运行示例(谢谢!),您介意将其编辑成一个堆栈片段,以便我们可以直接在页面上运行和编辑它吗?@apsillers-yepp,我还使用linear
版本对此进行了测试,正如您所说的那样=>得到了相同的结果。我希望我将上面的代码正确地转换为堆栈代码段(到目前为止,我从未使用过它,感谢您的提醒;)。嗯。。是的。。看起来这正在解决问题。。真的很奇怪!嗨,克里斯-对你编辑规范的工作投赞成票:)我真的必须完成我启动的TB-303模拟器…我没有,该死的!:p我的问题是我从规范还不成熟的时候开始,在如何正确模拟模拟方面一直没有克服我的挫折感,例如:)