【问题标题】:WebAudio setting gainNode.gain.valueWebAudio设置gainNode.gain.value
【发布时间】:2018-02-05 00:52:46
【问题描述】:

我正在尝试处理与设置 gainNode.gain.value 相关的 WebAudio API 已弃用的 Chrome 功能。我目前的代码是这样的:

var source = ctx.createBufferSource();
var my_gain = -1; //or 1, depending on whether I want sound or not
source.gainNode.gain.value = Math.min(1.0, Math.max(-1.0, gain));

然而,这给我带来了一条错误消息:“[Deprecation] GainNode.gain.value setter 平滑已被弃用,并将在 2018 年 1 月左右在 M64 中删除。如果需要平滑,请改用 setTargetAtTime()。请参阅 @ 987654321@了解更多详情”

要让错误消息消失,我可以这样做:

source.gainNode.gain.setTargetAtTime(0, ctx.currentTime, 0.015);

但是如何将my_gain 变量合并到其中?

【问题讨论】:

  • 我不确定,但我认为您不应该为这条消息而烦恼。当您阅读他们提供的链接时,他们只会谈论他们所拥有的隐藏的未指定行为,他们将删除这些行为。但我不认为您期望在自己的代码中使用此功能,而是您只想立即设置 gainNode 的值,而不需要任何斜坡。而且我不相信你的做法有任何错误,而是 Chrome 的信息有点过于冗长。此外,最终,您将使用 setValueAtTime(your_value, ctx.currentTime) 来做同样的事情。
  • 我同意,Chrome 的消息很冗长。现在,如果我什么都不做,代码仍然有效。问题是,如果我曾经使用过setValueAtTime(my_value, ctx.currentTime),我不确定要在my_value 中插入什么。从我上面的原始示例中插入my_gain 不起作用...
  • my_value 这是您设置为 source.gainNode.gain.value 的结果,即 Math.min(1.0, Math.max(-1.0, gain))
  • 嗯,只是尝试实现这一点,但是当my_value 为-1 时(即,当我希望关闭声音时),音频仍在全音量播放。我做错了什么?
  • (换句话说:var gain_value = Math.min(1.0, Math.max(-1.0, my_gain)); source.gainNode.gain.setTargetAtTime(gain_value, ctx.currentTime, 0.015); 似乎不起作用...

标签: javascript web-audio-api


【解决方案1】:

因此,您可以忽略此消息。在这种情况下,平滑对您来说并不重要。如果你确实想要平滑,你应该使用:

source.gainNode.gain.setTargetAtTime(my_value, ctx.currentTime, 0.015);

将 my_value 设置为 -1 不起作用的原因是它不应该 - 你所做的只是反转声音(即,声音值一开始就在 -1 和 1 之间,这会翻转它们但是不要使它们为零)。为了关闭声音,你应该做的是让 my_value=0。

【讨论】:

  • 如果您确实想与旧行为兼容,GainNode 的时间常数为 5 毫秒。因此,不要使用 0.015,而是使用 0.005。
  • 谢谢,cwilso!顺便说一句,我衷心感谢您开发 pitchdetect.js!这是一个很棒的库,我发现它对我的项目非常有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2021-09-28
  • 2013-01-15
  • 2019-06-04
  • 2016-09-14
  • 2016-06-16
相关资源
最近更新 更多