微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

停止振荡器时的 Web Audio API 点击声音

如何解决停止振荡器时的 Web Audio API 点击声音

使用网络音频 API 制作振荡器时,我总是在停止时听到咔嗒声。我搜索了周围,但没有一个解决方案对我有用。我尝试了 How can I avoid this 'clicking' sound when I stop playing a sound? 和更多的所有实现

我读到一个解决方案是等待下一个零幅度值,然后立即停止播放。有没有办法通过网络音频 api 做到这一点?

我正在考虑为我的项目切换到 Tone.Js,因为声音在没有点击的情况下播放。他们是如何解决问题的?

我很惊讶没有内置的解决方

解决方法

消除咔嗒声的最佳方法是淡出信号。这是一个小例子(未经测试):

let c = new AudioContext();
let s = new OscillatorNode(c);
let g = new GainNode(c);
s.connect(g).connect(c.destination);
g.gain.setValueAtTime(1,c.currentTime);
s.start();
// Let's stop the oscillator in 5 sec.
let stopTime = c.currentTime + 5;
s.stop(stopTime);
// Fade out the signal.  Fade out starts 0.25 sec before we stop.
// Then we linearly ramp down to 0 at stopTime
g.gain.setValueAtTime(1,stopTime - 0.25);
g.gain.linearRamptToValueAtTime(0,stopTime);

淡出信号的方法不止一种。另一种方法是:

g.gain.setTargetAtTime(0,stopTime - 0.25,.025);

这会在停止时间前 0.25 秒开始淡出。您必须适当地选择 timeConstant 值以足够快地淡出但又不足以引起点击。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。