WEB AUDIO API 产生雨水噼啪声
Posted
技术标签:
【中文标题】WEB AUDIO API 产生雨水噼啪声【英文标题】:WEB AUDIO API creating rain crackling noises 【发布时间】:2020-04-28 14:09:40 【问题描述】:我正在尝试在 javascript Web Audio API 中创建雨。 到目前为止,我已经为背景创建了一个低频隆隆声,并且我正在研究一个高频噪声,它将模仿雨滴的声音。然而,现在的高频噪声很像白噪声,太强而不能成为单个液滴。有谁知道如何将声音“分离”一点,使它听起来几乎像噼啪声。 Here 是一个链接,如果你增加最后一个滑块(紫色),我希望高频噪音听起来像你能听到它。
这是我目前的 html 代码
<script>
let context= new AudioContext();
let context2= new AudioContext();
let lowpass = context.createBiquadFilter();
lowpass.type = 'lowpass';
//lowpass.Q.value = -7.01;
lowpass.frequency.setValueAtTime(80, context2.currentTime);
let gain = new GainNode(context);
gain.gain.value= 0.4;
let gain2 = new GainNode(context2);
gain2.gain.value= 0.02;
let highpass=context2.createBiquadFilter();
highpass.type = 'highpass';
highpass.Q.value = 2;
//highpass.frequency.setValueAtTime(6000, context2.currentTime);
let distortion = context2.createWaveShaper();
let delay = context2.createDelay(90.0);
function StartAudio() context.resume();
context.audioWorklet.addModule('basicnoise.js').then(() =>
let myNoise = new AudioWorkletNode(context,'noise-generator');
myNoise.connect(lowpass);
lowpass.connect(gain);
gain.connect(context.destination);
);
function StartAudio2() context2.resume();
context2.audioWorklet.addModule('basicnoise.js').then(() =>
let myNoise2 = new AudioWorkletNode(context2,'noise-generator');
myNoise2.connect(highpass);
highpass.connect(gain2);
gain2.connect(delay);
delay.connect(context2.destination);
);
我一直在使用不同的功能,其中一些功能并没有做太多,或者我只是没有正确使用它们,因为我对音频 API 场景还很陌生。感谢任何帮助,因为这是一个学校项目,我知道其他一些学生想要发出火声,也可以从噼啪声中受益!谢谢!!
【问题讨论】:
【参考方案1】:如果您将下雨视为一种物理过程,那么它基本上是大量的表面撞击声(可能还有一些由气流产生的额外氛围)。当足够多的雨滴以足够快的速度撞击表面时,最终的结果就是噪音。
我认为逼真的雨水发生器会模拟大量单个水滴在距听者不同距离处撞击表面(这会导致衰减和过滤)。
也就是说,如果您想尝试“破解”您现在正在进行的噪声发生器,请尝试随机调制增益节点的增益值;在这里,生成器有 25% 的机会每 20 毫秒有效地静音(或者,考虑到计时器并不精确)。
setInterval(() =>
gain.gain.value=(Math.random() < 0.75 ? 0.4 : 0);
, 20)
【讨论】:
感谢您的快速回复!这噼啪声很好,但我不能让它变成雨,你有什么建议可以让我随机制造很多单滴吗? 也许将一个噪声源路由到几个您单独调制的滤波器/增益对? 好的,谢谢你,我会努力的!!感谢您的帮助以上是关于WEB AUDIO API 产生雨水噼啪声的主要内容,如果未能解决你的问题,请参考以下文章
是否有抽象 Web Audio API 和 Mozilla Audio Data API 以读取原始音频(MP3,ogg)的库