Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 声音会消失,但不会消失——为什么?_Javascript_Audio_Web Audio Api - Fatal编程技术网

Javascript 声音会消失,但不会消失——为什么?

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; 增益。增益。值=零;

我想我了解Web音频API的主要概念,以及声音的工作原理。尽管我成功地使声音“淡出”,但我无法理解,为什么在我为解决问题而编写的以下片段中,声音没有“淡入”:

(函数()
{
"严格使用",;
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我的问题是我从规范还不成熟的时候开始,在如何正确模拟模拟方面一直没有克服我的挫折感,例如:)